编译步骤/类型标注擦除/模式匹配消除。豫
yuyan · 212 行 · 13495 字节 · 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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
「:
把所有的模式匹配都转换成 if
:」
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
。
寻观「编译器核心」之「编译数据」之「编译配置」之「编译期输出」之书。
寻观「编译器核心」之「顺序标识符」之「顺序标识符」之书。
「:将三抽象转换成单抽象:」
「模式匹配消除」乃化「表达式」而「表达式」也。
「模式匹配消除」者会「式」而
虑「可能递归消除」者
(遇「表达式」者「分支内式」而
鉴「分支内式」而
有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))则
(「模式匹配消除」于「分支内式」)
或有「其他」则
(「分支内式」)
)而
鉴「式」而
有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))
则(
虑「无」者
「编译调试打印行」
于
『pattern_match_cancel』
于(会「无」而『模式匹配消除进行』附(「表达式表示」于「式」))而
虑「分析式名」者
(
若(「是直接变量」于「分析式」)则(「读取直接变量」于「分析式」)否则
(「下个字符序数」于『分析式消除』)
)而
递归虑「处理剩余」其化(「列」于「表达式」)而「表达式」者(会「剩余」而
鉴
「剩余」而
有「罄」则「发生事故」
于『必须有默认分支』
或有(「缀」于(「式节点」于(「变量模式匹配分支」)于((「列」【「结果」】)))于「多余分支」)则
(「可能递归消除」于(「式替换」于(「自由变量」于「分析式名」)于「结果」))
或有(「缀」
于(「式节点」于(「常量模式匹配分支」)于((「列」【「常量」,「分支式」】)))
于
「其余分支」)则(
虑「后续分支」者「处理剩余」于「其余分支」
而
鉴「常量」而
有(「式节点」于(「整数节点」于「数」)于「罄」)则
「式节点」
于「内联虑」
于((「列」【
(「式节点」于(「整数节点」于「数」)于「罄」),
(「构造抽象」
于『闭消数』
于(会「数名」而「式节点」
于「内联虑」
于((「列」【
(「式节点」
于(「展开后内建节点」于「内建函数整数相等」)
于((「列」【(「自由变量」于「分析式名」),(「自由变量」于「数名」)】))),
(「构造抽象」
于『闭消相等结果』
于(会「相等结果」而「式节点」
于「爻分支节点」
于(「列」【
「自由变量」于「相等结果」,
「可能递归消除」于「分支式」,
「后续分支」
】)))
】))))
】))
或有(「式节点」于(「字符串节点」于「串」)于「罄」)则
「式节点」
于「内联虑」
于((「列」【
(「式节点」于(「字符串节点」于「串」)于「罄」),
(「构造抽象」
于『闭消串』
于(会「串名」而「式节点」
于「内联虑」
于((「列」【
(「式节点」
于(「解析后外部调用节点无类型」于『豫言_字符串相等』)
于((「列」【(「自由变量」于「分析式名」),(「自由变量」于「串名」)】))),
(「构造抽象」
于『闭消相等结果』
于(会「相等结果」而「式节点」
于「爻分支节点」
于(「列」【
「自由变量」于「相等结果」,
「可能递归消除」于「分支式」,
「后续分支」
】)))
】))))
】))
或有(「式节点」于(「展开后内建节点」于「内建爻阳」)于「罄」)则「式节点」
于
「爻分支节点」
于(「列」【「自由变量」于「分析式名」,「可能递归消除」于「分支式」,「后续分支」】)
或有(「式节点」于(「展开后内建节点」于「内建爻阴」)于「罄」)则「式节点」
于
「爻分支节点」
于(「列」【「自由变量」于「分析式名」,「后续分支」,「可能递归消除」于「分支式」】)
)
或有(「缀」
于(「式节点」于(「唯一构造器模式匹配分支」于「序数」)于((「列」【「分支式」】)))
于
「其余分支」)则(
虑「后续分支」者「处理剩余」于「其余分支」而
「式节点」
于
「内联虑」
于((「列」【
(「式节点」于(「整数节点」于「序数」)于「罄」),
(「构造抽象」
于
『闭消序数』
于(会
「序数名」
而
「式节点」
于
「内联虑」
于((「列」【
(「式节点」
于(「唯一构造器序数元组投影序数节点」)
于((「列」【(「自由变量」于「分析式名」)】))),
(「构造抽象」
于『闭消待检测数』
于(会「待检测数名」而「式节点」
于「内联虑」
于((「列」【
(「式节点」
于(「展开后内建节点」于「内建函数整数相等」)
于((「列」【
(「自由变量」于「待检测数名」),
(「自由变量」于「序数名」)
】))),
(「构造抽象」
于『闭消相等结果』
于(会「相等结果」而「式节点」
于「爻分支节点」
于(「列」【
「自由变量」于「相等结果」,
「式节点」
于「内联虑」
于((「列」【
(「式节点」
于(「唯一构造器序数元组投影元组节点」)
于((「列」【(「自由变量」于「分析式名」)】))),
(「构造抽象」
于『参数数组』
于(会「参数数组」而「可能递归消除」
于(「式替换」于(「自由变量」于「参数数组」)于「分支式」)))
】)),
「后续分支」
】)))
】))))
】))))
】))
)
或有「其他」则
「发生事故」于『消83』
)
而
虑「初步结果」者「处理剩余」于「分支们」
而
虑「结果」者
(
若(「是直接变量」于「分析式」)则
(「初步结果」)
否则
(「式节点」
于「内联虑」
于((「列」【「分析式」,(「进行抽象」于「分析式名」于「初步结果」)】)))
)
而
虑「无」者
「编译调试打印行」
于『pattern_match_cancel』
于(会「无」而『模式匹配消除结果』附(「表达式表示」于「结果」))
而
「结果」
)
或有「其他」则
(「发生事故」于『期待模式匹配,却得到了:』附(「表达式表示」于「其他」))
也。
「展开展开后唯一构造器节点」乃化「表达式」而「表达式」也。
「展开展开后唯一构造器节点」者会「实现」而
鉴「实现」而
有(「式节点」于(「展开后唯一构造器节点」于「序数」)于「参数」)则(
若(「大于」于(「长度」于「参数」)于「二五零」)则
(「发生事故」于『暂时不支持长度超过250的构造器』)
否则
(「式节点」
于(「唯一构造器序数元组节点」于「序数」于(「长度」于「参数」))
于((「列」【(「式节点」于(「元组构造节点」)于「参数」)】)))
「: 式节点于「内联虑」于【式节点于(整数节点于「序数」)于【】,
构造抽象于『闭消序数』于(会序数名而
式节点于「内联虑」于【(式节点于(元组构造节点)于参数),
构造抽象于『闭消参数组』于(会参数组名而
(式节点于(元组构造节点)于(自由变量于序数名)衔(自由变量于参数组名)衔【】)
)
】)】 :」
)
或有「其他」则
「发生事故」于(『期待唯一构造器』)
也。