编译数据/抽象绑定树结构/抽象语法树/副作用检查。豫
yuyan · 107 行 · 8325 字节 · 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
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「抽象语法树数据」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「抽象语法树基础操作」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「抽象语法树表示」之书。
「:检查给定的表达式是否可以被消除:」
「:我们假设ANF形式:」
「表达式无副作用」乃化「表达式」而「爻」也。
「表达式无副作用」者会「式」而
虑「递归」者「表达式无副作用」而
鉴「式」而
有(「自由变量」于「名」)则
「阳」
或有(「式节点」于(「自由变量标注节点」于「变量名」)于((「列」【「内容」】)))则
(「递归」于「内容」)
或有「式节点」于「内联虑」于((「列」【「实现」,「下个」】))则
(若(「表达式无副作用」)于「实现」则(「表达式无副作用」于(「解构抽象」于「下个」)中「一」)否则(「阴」))
或有(「式节点」于(「文件引用节点」于「文件名」)于「罄」)则
「阳」
或有(「式节点」于(「文件定义引用节点」于「文件名」于「定义名」于「序数」)于「罄」)则
「阳」
或有(「式节点」于(「文件定义内存引用节点」于「文件名」于「定义名」于「序数」)于「罄」)则
「阳」
或有(「绑定」于「可能串」于「底式」)则
(虑「无」者「打印行」于『「发生事故」60』而「发生事故」于『不应当出现绑定』)
或有(「式节点」于(「结构投影带序数」于「投影名」于「序数」)于((「列」【「结构」】)))则
(「递归」于「结构」)
或有(「式节点」于(「结构投影」于「投影名」)于((「列」【「结构」】)))则
(「递归」于「结构」)
或有(「式节点」于「函数调用」于「参数」)则
「阴」
或有(「式节点」于(「展开后内建节点」于「量」)于「参数们」)则
((「全部符合」授以「表达式」)于「递归」于「参数们」)
或有(「式节点」于(「爻分支节点」)于(「列」【「爻式」,「阳式」,「阴式」】))
则(
若(「表达式无副作用」于「爻式」)
则
(若(「表达式无副作用」于「阳式」)则(「表达式无副作用」于「阴式」)否则「阴」)
否则
「阴」
)
或有(「式节点」于(「整数节点」于「数」)于「罄」)则
「阳」
或有(「式节点」于(「小数节点」于「数」于「整小部」)于「罄」)则
「阳」
或有(「式节点」于(「字符串节点」于「串」)于「罄」)则
「阳」
或有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))则
((「全部符合」授以「表达式」)于「递归」于(「缀」于「分析式」于「分支们」))
或有(「式节点」于(「常量模式匹配分支」)于((「列」【「常量」,「结果」】)))则
(「递归」于「结果」)
或有(「式节点」于(「变量模式匹配分支」)于((「列」【「结果」】)))则
(「递归」于(「解构抽象」于「结果」)中「一」)
或有(「式节点」于(「唯一构造器模式匹配分支」于「序数」)于((「列」【「结果」】)))则
(「递归」于(「解构抽象」于「结果」)中「一」)
或有(「式节点」于(「元组构造节点」)于「元素们」)则
((「全部符合」授以「表达式」)于(「递归」)于「元素们」)
或有(「式节点」于(「元组类型节点」)于「类型们」)则
((「全部符合」授以「表达式」)于(「递归」)于「类型们」)
或有(「式节点」于(「栈元组构造节点」)于「元素们」)则
((「全部符合」授以「表达式」)于(「递归」)于「元素们」)
或有(「式节点」于(「擦除后类型节点」)于「罄」)则
「阳」
或有(「式节点」于(「元组解构节点」于「序数」)于((「列」【「元组」】)))则
(「递归」于「元组」)
或有(「式节点」于(「元组更新节点」于「序数」)于((「列」【「元组」,「更新式」】)))则
「阴」
或有(「式节点」于「顺序执行节点」于((「列」【「式甲」,「式乙」】)))则
(「且」于(「递归」于「式甲」)于(「递归」于「式乙」))
或有(「式节点」于(「展开后唯一构造器节点」于「序数」)于「参数们」)则
((「全部符合」授以「表达式」)于「递归」于「参数们」)
或有(「式节点」于(「唯一构造器序数元组节点」于「序数」于「元组长」)于「参数们」)则
((「全部符合」授以「表达式」)于「递归」于「参数们」)
或有(「式节点」于(「唯一构造器序数元组投影序数节点」)于「参数们」)则
((「全部符合」授以「表达式」)于「递归」于「参数们」)
或有(「式节点」于(「唯一构造器序数元组投影元组节点」)于「参数们」)则
((「全部符合」授以「表达式」)于「递归」于「参数们」)
或有(「式节点」于(「文件引用节点」于「新文件名」)于「罄」)则
「阳」
或有(「式节点」于(「解析后外部调用节点无类型」于「串」)于「参」)则
「阴」
或有(「式节点」于(「续延调用节点」)于((「列」【「续参」】)))则(「阴」)
或有(「式节点」于(「拉姆达抽象」于「拉形」)于((「列」【「拉参」】)))则(「阳」 「:拉姆达抽象当然可以消除,只要它不被调用:」
)
或有(「式节点」于(「拉姆达抽象续延」于「续延名」)于((「列」【「拉参」】)))则(「阴」 「:续延名可能被引用:」
)
或有(「式节点」于「空值节点」于「罄」)则
「阳」
或有(「式节点」于(「文件定义存储节点」于「文件名」于「定义名」于「序数」)于((「列」【「参」】)))则
(「阴」)
或有(「式节点」于(「函数调用续延」于「续延名」)于((「列」【「参」】)))则
「阴」
或有(「式节点」于(「函数尾调用」)于((「列」【「函」,「参」】)))则
「阴」
或有(「式节点」于(「续延调用返回节点」)于((「列」【「函」,「参」】)))则
「阴」
或有(「式节点」于(「函数引用节点」于「函数名」)于「罄」)则
「阳」
「:文言:声明虽载函数体,亦不可删。汉语:静态入口声明包含 lambda 参数;即使其返回值未使用,也必须保留声明供后续函数提升。:」
或有(「式节点」于(「函数全局声明节点」于「函数名」)于「声明参数」)则
「阴」 「:函数声明不可以被移除:」
或有(「式节点」于(「递归节点」)于((「列」【「定义域」,「递归值域」】)))则
(「递归」于(「解构抽象」于「递归值域」)中「一」)
或有「其他」则
「发生事故」于『未有副作用检查310:』附(「表达式表示」于「式」)
也。