编译步骤/闭包转换/函数提升。豫
yuyan · 111 行 · 5422 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
「: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.
:」
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
。
寻观「编译器核心」之「编译数据」之「编译配置」之「编译期输出」之书。
寻观「编译器核心」之「编译数据」之「编译配置」之「全局配置」之书。
寻观「编译器核心」之「编译步骤」之「总体过程」之「编译过程工具」之书。
寻观「编译器核心」之「顺序标识符」之「顺序标识符」之书。
「函数提升」乃
化「字符串」而
化(化(「字符串」合「爻」合「表达式」)而「有」)而
化「表达式」而
「表达式」
也。
「函数提升」者会「模块名」而会「写出函数」而会「式」而
虑「无」者
「编译调试打印行」于『func_hoist』于(会「无」而『函数提升中:』附(「表达式表示」于「式」))而
虑「递归」者
(化「表达式」而「表达式」也会「后式」而「函数提升」于「模块名」于「写出函数」于「后式」)而
虑「绑定递归」者
(化「表达式」而「表达式」也会「式」而「抽象表达式操作」于「式」于「递归」)而
鉴「式」而
有(「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【「参」】)))
则(
虑「函数名」者
「下个字符序数」
于(「模块名」附『_提升函数』)
而
虑「无」者
(
若(「等」于((「长度」授以「字符串」)于(「读取式自由变量」于「参」))于「零」)则
「元」
否则
「发生事故」于『闭包中不应该存在自由变量』
)
而
虑「无」者
「写出函数」
于(「函数名」与「阴」
与「式节点」
于(「拉姆达抽象」于(「多参数形」于「个数」))
于((「列」【(「绑定递归」于「参」)】)))
而
「式节点」
于(「函数引用节点」于「函数名」)
于「罄」
)
或有(「式节点」
于(「函数全局声明节点」于「函数名」)
于((「列」【(「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【「参」】)))】)))
则(
虑「无」者
(
若(「等」于((「长度」授以「字符串」)于(「读取式自由变量」于「参」))于「零」)
则
「元」
否则
「发生事故」于『闭包中不应该存在自由变量』
)
而
虑「无」者
「写出函数」于(「函数名」与「阳」
与「式节点」
于(「拉姆达抽象」于(「多参数形」于「个数」))
于((「列」【(「递归」于「参」)】)))
而
「式节点」于(「函数引用节点」于「函数名」)于「罄」
)
或有(「式节点」于(「自由变量标注节点」于(「名」))于((「列」【「当前」】)))则((「式节点」
于(「自由变量标注节点」于(「名」))
于((「列」【(「函数提升」于(「模块名」附『_』附「名」)于「写出函数」于「当前」)】)))
)
或有「其他」则
「表达式统一操作」于「递归」于「式」
也。
「函数提升顶层」乃
化「字符串」而
化「表达式」而
「列」于(「字符串」合「爻」合「表达式」)
也。
「函数提升顶层」者会「路径」而会「式」而
虑「结果」者
((「引用类」于(「列」于(「字符串」合「爻」合「表达式」)))也「新引用」于「罄」)而
虑「添加结果」者
(化「字符串」合「爻」合「表达式」而「有」也会「串式」而
「写引用」于「结果」于(「缀」于「串式」于(「读引用」于「结果」))
)
而
(「缀」于((「当前路径转全局函数名」于「路径」)与「阳」
与((「式节点」
于(「拉姆达抽象」于(「多参数形」于「零」))
于((「列」【
(「函数提升」
于(「操作系统」之「路径」之「获取文件名」于(「去除路径结尾豫言拓展名」于「路径」))
于
「添加结果」于「式」)
】)
))
)
))于(「反转」于(「读引用」于「结果」))
也。