豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 168 行 · 9374 字节 · UTF-8
§
「:This is untyped closure conversion. 
I have prepared groundwork for typed closure conversion, but I 
have not yet studied it.
Part of the reason is that type annotation and typed ANF conversion take 
too long to execute.
:」

寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。

。
寻观「编译器核心」之「编译数据」之「编译配置」之「编译期输出」之书。
寻观「编译器核心」之「编译数据」之「编译配置」之「全局配置」之书。

寻观「编译器核心」之「编译步骤」之「闭包转换」之「函数提升」之书。

寻观「编译器核心」之「编译步骤」之「总体过程」之「编译过程工具」之书。
寻观「编译器核心」之「顺序标识符」之「顺序标识符」之书。

寻观「编译器核心」之「编译步骤」之「闭包转换」之「全局结构变量储存变换」之书。

寻观「编译器核心」之「编译步骤」之「优化」之「基础工具」之「表达式带定义操作」之书。

「前闭包转换」乃化「表达式」而「表达式」也。
「前闭包转换」者会「式」而
  虑「递归」者「前闭包转换」而
  虑「无」者
    「编译调试打印行」于『clo_conv』于(会「无」而『正在编译:』附(「表达式表示」于「式」))而
  鉴「式」而
    有(「式节点」
      于「函数调用」
      于(「缀」
        于(「式节点」于(「函数引用节点」于「函数名」)于「罄」) 「:函数引用式节点发生在闭包转换及提升前,判定不需要闭包:」
  于((「列」【(「式节点」于(「参数节点」于(「多参数形」于「个数」))于「参数」)】))))
  则(
    虑「无」者
      「编译调试打印行」于
        『clo_conv』
          于(会「无」而『选择分支1』)
    而
    「分组函数调用式」
      于(「多参数形」于「个数」)
      于(「式节点」于(「函数引用节点」于「函数名」)于「罄」)
      于((「态射」)于「参数」于「递归」)
  )
    或有(「式节点」
      于「函数调用」
      于(「缀」
        于(「式节点」于(「函数引用节点」于「函数名」)于「罄」) 「:函数引用式节点发生在闭包转换及提升前,判定不需要闭包:」
  于((「列」【(「式节点」于(「参数节点」于(「尾多参数形」于「个数」))于「参数」)】))))
  则(
    虑「无」者
      「编译调试打印行」于
        『clo_conv』
          于(会「无」而『选择分支1.2』)
    而
    「分组函数调用式」
      于(「尾多参数形」于「个数」)
      于(「式节点」于(「函数引用节点」于「函数名」)于「罄」)
      于((「态射」)于「参数」于「递归」)
  )
    或有(「式节点」
      于「函数调用」
      于((「列」【「函数」,(「式节点」于(「参数节点」于(「多参数形」于「个数」))于「参数」)】)))
      则(
        虑「无」者
          「编译调试打印行」于『clo_conv』于(会「无」而『选择分支2』)
        而
        「式节点」
          于「内联虑」
          于((「列」【
            (「递归」于「函数」),
            (「构造抽象」
              于『闭包函数』
              于(会
                「闭包函数名」而
                  「分组函数调用式」
                    于(「多参数形」于(「加」于「个数」于「一」))
                    于(「式节点」于(「元组解构节点」于「零」)于((「列」【(「自由变量」于「闭包函数名」)】)))
                    于(「缀」于(「自由变量」于「闭包函数名」)于((「态射」)于「参数」于「递归」))))
          】))
      )
    或有(「式节点」
      于「函数调用」
      于((「列」【「函数」,(「式节点」于(「参数节点」于(「尾多参数形」于「个数」))于「参数」)】)))
      则(
        虑「无」者
          「编译调试打印行」于『clo_conv』于(会「无」而『选择分支3』)
        而
        「式节点」
          于「内联虑」
          于((「列」【
            (「递归」于「函数」),
            (「构造抽象」
              于『闭包函数』
              于(会
                「闭包函数名」而
                  「分组函数调用式」
                    于(「尾多参数形」于(「加」于「个数」于「一」))
                    于(「式节点」于(「元组解构节点」于「零」)于((「列」【(「自由变量」于「闭包函数名」)】)))
                    于(「缀」于(「自由变量」于「闭包函数名」)于((「态射」)于「参数」于「递归」))))
          】))
      )
    或有(「式节点」
      于(「函数全局声明节点」于「函数名」)
      于((「列」【(「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【「绑定拉体」】)))】)))
      则( 「:全局声明节点同样不需要闭包转换:」
        虑「无」者
          「编译调试打印行」于『clo_conv』于(会「无」而『选择分支4』)
        而
        (「式节点」
          于(「函数全局声明节点」于「函数名」)
          于((「列」【
            (「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【(「递归」于「绑定拉体」)】)))
          】)))
      )
    或有(「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【「绑定拉体」】)))
    则(
      虑「无」者
        「编译调试打印行」于
          『clo_conv』
            于(会「无」而『选择分支5』)而
            虑「所有自由变量」者
              ((「移除重复」授以「字符串」)于「串相等」于(「读取式自由变量」于「绑定拉体」))
            而
            虑「闭包名」者「下个字符序数」于『函数闭包』而
            虑「新式」者
              (「式节点」
                于(「元组构造节点」)
                于(「缀」
                  于(「式节点」
                    于(「拉姆达抽象」于(「多参数形」于(「加」于「个数」于「一」)))
                    于((「列」【
                      (「进行抽象」
                        于「闭包名」
                        于(「多绑定递归」
                          于「个数」
                          于「绑定拉体」
                          于(会「拉体」而
                          虑「引用式」者
                            (「新引用」授以「表达式」)
                            于(「递归」于「拉体」)而
                            虑「无」者
                              (「打表」授以「有」)
                              于(「长度」于「所有自由变量」)
                              于(会「序数」而「写引用」
                                于「引用式」
                                于(「式有名替换」
                                  于(「式节点」
                                    于(「元组解构节点」于(「加」于「序数」于「一」))
                                    于((「列」【
                                      (「式节点」
                                        于(「自由变量标注节点」于(「第N个」于「序数」于「所有自由变量」))
                                        于((「列」【(「自由变量」于「闭包名」)】)))
                                    】)))
                                    于(「第N个」于「序数」于「所有自由变量」)
                                    于(「读引用」于「引用式」)))
                            而
                            ((「读引用」于「引用式」)))))
                    】)))
                    于((「态射」)于「所有自由变量」于「自由变量」)))
            而
            「新式」
    )
    或有((「式节点」于(「函数引用节点」于「函数名」)于「罄」))则
      (「发生事故」于『函数引用节点不可以单独出现,必须出现在函数引用的函数位置:』附(「表达式表示」于「式」))
    或有「其他」则(「表达式统一操作」于「递归」于「式」)
也。