豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 456 行 · 26715 字节 · UTF-8
§
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层中间式」之书。

「:文言:读闭包前优化形式之树,转为简树。凡不可入无垃圾回收之境者,明指而拒之。汉语:把 `表达式` 转成 `低层项`:为每个绑定生成全局唯一的变量名;拉平柯里化调用;把局部函数定义收成 `项局函`;把不支持的构造(闭包、元组、构造器、异常、续延、字符串值)报成带定义名的错误。:」
「底层名计数」者「新引用」授以「整数」于「零」也。

「底层当前定义」者「新引用」授以「字符串」于『』也。

「底层附加函数们」者「新引用」授以(「列」于「低层函数」)
于(「罄」授以「低层函数」)
也。

「低层出错」乃承「甲」而化「字符串」而「甲」也。
「低层出错」者受「甲」而会「消息」而
  「发生事故」授以「甲」于(『底层编译错误(定义〈』附(「读引用」于「底层当前定义」)附『〉):』附「消息」)
也。

「低层新名」乃化「字符串」而「字符串」也。
「低层新名」者会「基」而
  虑「号」者「读引用」于「底层名计数」而
  虑「无」者「写引用」于「底层名计数」于(「加」于「号」于「一」)而
  「基」附『#』附(「整数表示」于「号」)
也。

「低层二三二」乃「整数」也。
「低层二三二」者「四二九四九六七二九六」也。

「低层余」乃化「整数」而化「整数」而「整数」也。
「低层余」者会「数」而会「除数」而
  「减」于「数」于(「乘」于(「除以」于「数」于「除数」)于「除数」)
也。

「:文言:归于三十二位有符号之域。汉语:把任意整数按模二的三十二次方折回 [-2^31, 2^31)。:」
「低层归一」乃化「整数」而「整数」也。
「低层归一」者会「数」而
  虑「余」者「低层余」于「数」于「低层二三二」而
  虑「正」者
    若「小于」于「余」于「零」则「加」于「余」于「低层二三二」否则「余」而
  若「小于」于「正」于「二一四七四八三六四八」则
    「正」
  否则
    「减」于「正」于「低层二三二」
也。

「低层绑定」立「元类型」也。
  「绑值」立化「字符串」而「低层绑定」也。 「:普通局部:简树中的唯一名:」
  「绑函」立化「字符串」而化「整数」而「低层绑定」也。 「:局部函数:唯一名、形参个数:」
  「绑全」立化「字符串」而化「整数」而「低层绑定」也。 「:全局函数:全局名、形参个数:」
  「低层环」即「列」于(「字符串」合「低层绑定」)
也。

「低层查环」乃化「低层环」而化「字符串」而(「或可有」于「低层绑定」)也。
「低层查环」者会「境」而会「名」而
  鉴「境」而
    有「罄」则「可无」
    或有「缀」于「首」于「尾」则
      若「串相等」于(「首」中「零」)于「名」则「可有」于(「首」中「一」)否则「低层查环」于「尾」于「名」
也。

「低层开结果」立「元类型」也。
  「构造开结果」立化「低层环」而化(「列」于「字符串」)而化「表达式」而「低层开结果」也。

「:文言:连开若干绑定,各予新名。汉语:依次解构 n 个绑定,给每个变量生成唯一名并加入环境。:」
「低层开若干」乃
  化「整数」而
  化「低层环」而
  化(「列」于「字符串」)而
  化「表达式」而
  「低层开结果」
也。
「低层开若干」者会「数」而会「境」而会「已有」而会「绑」而
  若「小于」于「数」于「一」则
    「构造开结果」于「境」于「已有」于「绑」
  否则
    虑「名及体」者「解构抽象」于「绑」而
    虑「新名」者「低层新名」于(「名及体」中「零」)而
    「低层开若干」
      于(「减」于「数」于「一」)
      于(「缀」于((「名及体」中「零」)与(「绑值」于「新名」))于「境」)
      于(「附加」授以「字符串」于「已有」于(「列」【「新名」】))
      于(「名及体」中「一」)
也。

「:文言:连开拉姆达之链,形参合为一列。汉语:把直接嵌套的拉姆达拉平成一个形参列表;返回值为新环境、形参唯一名与函数体。:」
「低层开抽象们」乃化「低层环」而化「表达式」而「低层开结果」也。
「低层开抽象们」者会「境」而会「式」而
  鉴「式」而
    有(「式节点」于(「拉姆达抽象」于「形」)于(「列」【「绑体」】))则(
      虑「数」者
        (「整数」也(鉴「形」而
        有(「多参数形」于「个」)则「个」
        或有「其他形」则「一」))而
        虑「首」者
          「低层开若干」于「数」于「境」于(「罄」授以「字符串」)于「绑体」而
        鉴「首」而
          有「构造开结果」于「新境」于「首名们」于「体式」则(
            虑「后」者「低层开抽象们」于「新境」于「体式」而
            鉴「后」而
              有「构造开结果」于「终境」于「后名们」于「终体」则
                「构造开结果」
                  于「终境」
                  于(「附加」授以「字符串」于「首名们」于「后名们」)于「终体」
          )
    )
    或有「其他」则
      「构造开结果」于「境」于(「罄」授以「字符串」)于「式」
也。

「:文言:不开绑定而数其形参。汉语:只看结构,统计拉姆达链的形参总数。:」
「低层形参数」乃化「表达式」而「整数」也。
「低层形参数」者会「式」而
  鉴「式」而
    有(「式节点」于(「拉姆达抽象」于「形」)于(「列」【(「绑定」于「可能名」于「体」)】))则
      「加」
        于(「整数」也(鉴「形」而
        有(「多参数形」于「个」)则「个」
        或有「其他形」则「一」))于(「低层形参数」于「体」)
    或有「其他」则「零」
也。

「:文言:函数调用之链,拉平为头与诸实参。汉语:把嵌套的单参数调用拉平成(头,全部实参)。:」
「低层拆调用」乃化「表达式」而(「表达式」合(「列」于「表达式」))也。
「低层拆调用」者会「式」而
  虑「拆」者「解构函数调用式」于「式」而
  虑「头」者「拆」中「零」而
  虑「实们」者「拆」中「一」而
  鉴「头」而
    有(「式节点」于「函数调用」于「诸」)则
      (虑「内」者「低层拆调用」于「头」而(「内」中「零」)与(「附加」授以「表达式」于(「内」中「一」)于「实们」))
    或有「其他」则「头」与「实们」
也。

「:文言:内建之数,皆取其名。汉语:把展开后的内建常量转成简树:爻与单元是常量,整数相等、大于、减是内建运算,其余不支持。:」
「低层转内建」乃化「内建常量」而化(「列」于「低层项」)而「低层项」也。
「低层转内建」者会「量」而会「参们」而
  鉴「量」而
    有「内建有元」则「项整」于「零」
    或有「内建爻阳」则「项整」于「一」
    或有「内建爻阴」则「项整」于「零」
    或有「内建函数整数相等」则
      「项外」于『底层_等』于「参们」
    或有「内建函数整数大于」则
      「项外」于『底层_有符号大于』于「参们」
    或有「内建函数整数减」则
      「项外」于『底层_减』于「参们」
    或有「其他」则
      「低层出错」授以「低层项」于(『不支持的内建:』附(「内建常量表示」于「量」))
也。

「:文言:转换函数以参数传入,使诸互递归之函数可依序而立。汉语:`低层转换虑`、`低层转局部函数`、`低层登记全局函数` 与 `低层转换` 互相递归,而豫言不许前向引用,故前三者以“转换函数”为首个参数,由 `低层转换` 传入自身;后续之式以“续”函数表之,续受让名之绑定,返其后式之简树。:」
「:文言:全局函数声明,于空环境中开其形参,登记之。汉语:`函数全局声明` 里的拉姆达不含自由变量:在空环境里转换函数体,追加到全局函数收集器(全局名为声明所给之名)。:」
「低层登记全局函数」乃
  化(化「低层环」而化「表达式」而「低层项」)而
  化「字符串」而
  化「表达式」而
  「有」
也。
「低层登记全局函数」者会「转换」而会「全名」而会「拉体」而
  虑「开」者
    「低层开抽象们」于(「罄」授以(「字符串」合「低层绑定」))于「拉体」而
  鉴「开」而
    有「构造开结果」于「体环」于「形们」于「体式」则(
      虑「函」者
        「构造低层函数」
          于「全名」
          于「形们」
          于(「转换」
            于(「缀」于(「全名」与(「绑全」于「全名」于(「长度」授以「字符串」于「形们」)))于「体环」)
            于「体式」)
      而
      「写引用」于「底层附加函数们」于(「缀」于「函」于(「读引用」于「底层附加函数们」))
    )
也。

「:文言:局部函数,立其名、形参与体,而后续其后式。汉语:`拉式` 是拉姆达链;`递归名` 若有,则同时绑定到本函数,使函数体内按名自调;函数的唯一名交予续,使后式可按名调用。:」
「低层转局部函数」乃
  化(化「低层环」而化「表达式」而「低层项」)而
  化「低层环」而
  化「表达式」而
  化(「或可有」于「字符串」)而
  化「字符串」而
  化(化「低层绑定」而「低层项」)而
  「低层项」
也。
「低层转局部函数」者会「转换」而会「值境」而会「拉式」而会「递归名」而会「提示」而会「续」而
  虑「函名」者「低层新名」于「提示」而
  虑「个」者「低层形参数」于「拉式」而
  虑「自名境」者
    (「低层环」也(
        鉴「递归名」而
          有「可有」于「递归名字」则
            「缀」
              于(「递归名字」与(「绑函」于「函名」于「个」))
              于「值境」
          或有「可无」则「值境」
      ))而
      虑「开」者「低层开抽象们」于「自名境」于「拉式」而
      鉴「开」而
        有「构造开结果」于「体环」于「形们」于「体式」则
          「项局函」
            于「函名」
            于「形们」
            于(「转换」于「体环」于「体式」)
            于(「续」于(「绑函」于「函名」于「个」))
也。

「:文言:虑之值,若为函数,则定为局部函数;若为虑,则上提;余者令之。汉语:处理 `虑 名 者 值 而 后`:值是拉姆达或递归时定义局部函数;值本身是虑或顺序时上提(续原封不动地传给内层);全局函数声明登记为全局函数;其余是普通的令。`提示` 是让名(用于生成唯一名),`续` 接收让名的绑定并返回后式的简树。:」
「低层转换虑」乃
  化(化「低层环」而化「表达式」而「低层项」)而
  化「低层环」而
  化「表达式」而
  化「字符串」而
  化(化「低层绑定」而「低层项」)而
  「低层项」
也。
「低层转换虑」者会「转换」而会「值境」而会「值」而会「提示」而会「续」而
  鉴「值」而
    有(「式节点」于「内联虑」于(「列」【「内值」,「内后」】))则(
      虑「名及体」者「解构抽象」于「内后」而
      「低层转换虑」
        于「转换」
        于「值境」
        于「内值」
        于(「名及体」中「零」)
        于(会「绑」而「低层转换虑」
          于「转换」
          于(「缀」于((「名及体」中「零」)与「绑」)于「值境」)
          于(「名及体」中「一」)于「提示」于「续」
        )
    )
    或有(「式节点」于「内联虑带类型」于(「列」【「类」,「内值」,「内后」】))则(
      虑「名及体」者「解构抽象」于「内后」而
      「低层转换虑」
        于「转换」
        于「值境」
        于「内值」
        于(「名及体」中「零」)
        于(会「绑」而「低层转换虑」
          于「转换」
          于(「缀」于((「名及体」中「零」)与「绑」)于「值境」)
          于(「名及体」中「一」)于「提示」于「续」
        )
    )
    或有(「式节点」于「顺序执行节点」于(「列」【「甲」,「乙」】))则
      「项令」
        于(「低层新名」于『序』)
        于(「转换」于「值境」于「甲」)
        于(「低层转换虑」于「转换」于「值境」于「乙」于「提示」于「续」)
    或有(「式节点」于(「函数全局声明节点」于「全名」)于(「列」【「拉体」】))则(
      虑「个」者「低层形参数」于「拉体」而
      虑「无」者「低层登记全局函数」于「转换」于「全名」于「拉体」而
      「续」于(「绑全」于「全名」于「个」)
    )
    或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则
      「低层转局部函数」
        于「转换」
        于「值境」
        于「值」
        于(「可无」授以「字符串」)
        于「提示」于「续」
    或有(「式节点」于「递归节点」于(「列」【「递归域」,「递归绑」】))则(
      虑「递名及体」者「解构抽象」于「递归绑」而
      「低层转局部函数」
        于「转换」于「值境」
        于(「递名及体」中「一」)
        于(「可有」于(「递名及体」中「零」))于「提示」于「续」
    )
    或有「其他」则(
      虑「新名」者「低层新名」于「提示」而
      「项令」于「新名」于(「转换」于「值境」于「值」)于(「续」于(「绑值」于「新名」))
    )
也。

「低层转换」乃化「低层环」而化「表达式」而「低层项」也。
「低层转换」者会「境」而会「式」而
  虑「转实们」者(化(「列」于「表达式」)而(「列」于「低层项」))也(会「们」而
  「态射」授以「表达式」授以「低层项」
    于「们」
    于(会「实」而「低层转换」于「境」于「实」))而
  鉴「式」而
    有(「自由变量」于「名」)则(
      鉴「低层查环」于「境」于「名」而
        有「可有」于(「绑值」于「唯一」)则「项局」于「唯一」
        或有「可有」于(「绑函」于「唯一」于「个」)则
          「低层出错」授以「低层项」
          于(『局部函数〈』附「名」附『〉不能作为值使用(闭包不受支持)』)
        或有「可有」于(「绑全」于「全名」于「个」)则
          「低层出错」授以「低层项」于(『函数〈』附「名」附『〉不能作为值使用(闭包不受支持)』)
        或有「可无」则
          「低层出错」授以「低层项」于(『未绑定的变量〈』附「名」附『〉』)
    )
    或有(「式节点」于(「整数节点」于「数」)于「罄」)则「项整」
      于(「低层归一」于「数」)
    或有(「式节点」于(「字符串节点」于「文」)于「罄」)则「项串」于「文」
    或有(「式节点」于「空值节点」于「罄」)则「项整」
      于「零」
    或有(「式节点」于(「展开后内建节点」于「量」)于「参们」)则
      「低层转内建」
        于「量」
        于(「转实们」于「参们」)
    或有(「式节点」于(「解析后外部调用节点无类型」于「名」)于「参们」)则
      「项外」
        于「名」
        于(「转实们」于「参们」)
    或有(「式节点」于(「文件定义引用节点」于「文件」于「名」于「序」)于「罄」)则「项引」
      于「文件」于「名」
    或有(「式节点」于「爻分支节点」于(「列」【「条」,「真」,「假」】))则
      「项若」
        于(「低层转换」于「境」于「条」)
        于(「低层转换」于「境」于「真」)
        于(「低层转换」于「境」于「假」)
    或有(「式节点」于「内联虑」于(「列」【「值」,「后」】))
    则(
      虑「名及体」者「解构抽象」于「后」而
      「低层转换虑」
        于「低层转换」
        于「境」
        于「值」
        于(「名及体」中「零」)
        于(会「绑」而「低层转换」于(「缀」于((「名及体」中「零」)与「绑」)于「境」)于(「名及体」中「一」))
    )
    或有(「式节点」于「内联虑带类型」于(「列」【「类」,「值」,「后」】))
    则(
      虑「名及体」者「解构抽象」于「后」而
      「低层转换虑」
        于「低层转换」
        于「境」
        于「值」
        于(「名及体」中「零」)
        于(会「绑」而「低层转换」于(「缀」于((「名及体」中「零」)与「绑」)于「境」)于(「名及体」中「一」))
    )
    或有(「式节点」于「顺序执行节点」于(「列」【「甲」,「乙」】))则
      「项令」
        于(「低层新名」于『序』)
        于(「低层转换」于「境」于「甲」)
        于(「低层转换」于「境」于「乙」)
    或有(「式节点」于「函数调用」于「诸」)则(
      虑「拆」者「低层拆调用」于「式」而
      虑「头」者「拆」中「零」而
      虑「实们」者「转实们」于(「拆」中「一」)而
      鉴「头」而
        有(「式节点」于(「函数引用节点」于「名」)于「罄」)则「项调」
          于「名」
          于「实们」
        或有(「式节点」于(「文件定义引用节点」于「文件」于「名」于「序」)于「罄」)则「项调」
          于(「文件」附『#』附「名」)于「实们」
        或有(「自由变量」于「名」)则(
          鉴「低层查环」于「境」于「名」而
            有「可有」于(「绑函」于「唯一」于「个」)则(
              若(「不等于」于「个」于(「长度」授以「低层项」于「实们」))则
                「低层出错」授以「低层项」
                于(『调用〈』附「名」附『〉的实参个数与形参个数不符』)
              否则
                「项局调」于「唯一」于「实们」
            )
            或有「可有」于(「绑全」于「全名」于「个」)则(
              若(「不等于」于「个」于(「长度」授以「低层项」于「实们」))则
                「低层出错」授以「低层项」
                于(『调用〈』附「名」附『〉的实参个数与形参个数不符』)
              否则
                「项调」于「全名」于「实们」
            )
            或有「可有」于(「绑值」于「唯一」)则
              「低层出错」授以「低层项」
              于(『〈』附「名」附『〉不是已知函数,不支持间接调用』)
            或有「可无」则
              「低层出错」授以「低层项」于(『未绑定的变量〈』附「名」附『〉』)
        )
        或有「其他」则
          「低层出错」授以「低层项」于(『不支持的调用头:』附(「表达式表示」于「头」))
    )
    或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则
      「低层出错」授以「低层项」
      于『拉姆达只能定义具名函数,不能作为值(闭包不受支持)』
    或有(「式节点」于「递归节点」于「诸」)则
      「低层出错」授以「低层项」
      于『递归只能定义具名函数,不能作为值』
    或有(「式节点」于「元组构造节点」于「诸」)则
      「低层出错」授以「低层项」
      于『元组需要垃圾回收,底层模式不支持』
    或有(「式节点」于(「元组解构节点」于「位」)于「诸」)则
      「低层出错」授以「低层项」
      于『元组需要垃圾回收,底层模式不支持』
    或有(「式节点」于「模式匹配」于「诸」)则
      「低层出错」授以「低层项」
      于『模式匹配只支持对整数常量的分派,其余不支持』
    或有(「式节点」于「节点名」于「诸」)则
      「低层出错」授以「低层项」于(『底层模式不支持的语法节点:』附(「节点名称表示」于「节点名」))
    或有(「绑定」于「可能名」于「下式」)则
      「低层出错」授以「低层项」于『意外的绑定』
    或有(「绑定变量」于「位」)则
      「低层出错」授以「低层项」于『意外的绑定变量』
也。

「:文言:顶层定义之形,或函数,或值。汉语:一个顶层定义转换后的形态:函数有形参与体,值只有一个简树。:」
「低层定义」立「元类型」也。
  「定义函数」立化(「列」于「字符串」)而化「低层项」而「低层定义」也。
  「定义值」立化「低层项」而「低层定义」也。
「低层定义结果」立「元类型」也。
  「构造定义结果」立化「低层定义」而化(「列」于「低层函数」)而「低层定义结果」也。 「:本定义、及其中声明的全局函数:」
  「:文言:转一顶层定义头。汉语:`全名` 是定义的全局函数名(文件#名)。定义体可能是:递归包裹的拉姆达(函数)、若干全局函数声明后接包装拉姆达(函数)、或值表达式。:」
「低层转定义头」乃化「字符串」而化「低层环」而化「表达式」而「低层定义」也。
「低层转定义头」者会「全名」而会「境」而会「式」而
  鉴「式」而
    有(「式节点」于「递归节点」于(「列」【「递归域」,「递归绑」】))则(
      虑「递名及体」者「解构抽象」于「递归绑」而
      虑「个」者「低层形参数」于(「递名及体」中「一」)而
      虑「开」者
        「低层开抽象们」
          于(「缀」于((「递名及体」中「零」)与(「绑全」于「全名」于「个」))于「境」)
          于(「递名及体」中「一」)而
      鉴「开」而
        有「构造开结果」于「体环」于「形们」于「体式」则(
          若「等于」于「个」于「零」则
            「定义值」于(「低层转换」于「体环」于「体式」)
          否则
            「定义函数」于「形们」于(「低层转换」于「体环」于「体式」)
        )
    )
    或有(「式节点」
      于「内联虑」
      于(「列」【(「式节点」于(「函数全局声明节点」于「声明名」)于(「列」【「拉体」】)),「后」】))则(
      虑「个」者「低层形参数」于「拉体」
      而
      虑「无」者「低层登记全局函数」于「低层转换」于「声明名」于「拉体」
      而
      虑「名及体」者「解构抽象」于「后」而
      「低层转定义头」
        于「全名」
        于(「缀」于((「名及体」中「零」)与(「绑全」于「声明名」于「个」))于「境」)
        于(「名及体」中「一」)
    )
    或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则(
      虑「开」者「低层开抽象们」于「境」于「式」而
      鉴「开」而
        有「构造开结果」于「体环」于「形们」于「体式」则
          「定义函数」于「形们」于(「低层转换」于「体环」于「体式」)
    )
    或有「其他」则
      「定义值」于(「低层转换」于「境」于「式」)
也。

「低层转定义」乃化「字符串」而化「字符串」而化「表达式」而「低层定义结果」也。
「低层转定义」者会「文件」而会「名」而会「式」而
  虑「无」者「写引用」于「底层当前定义」于(「文件」附『#』附「名」)而
  虑「无」者「写引用」于「底层附加函数们」于(「罄」授以「低层函数」)而
  虑「全名」者「文件」附『#』附「名」而
  虑「定」者
    「低层转定义头」于「全名」于(「罄」授以(「字符串」合「低层绑定」))
    于「式」而
    虑「附」者
      「反转」授以「低层函数」于(「读引用」于「底层附加函数们」)
    而
    「构造定义结果」于「定」于「附」
也。