编译步骤/代码生成/底层后端/底层读取。豫
yuyan · 456 行 · 26715 字节 · 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 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层中间式」之书。
「:文言:读闭包前优化形式之树,转为简树。凡不可入无垃圾回收之境者,明指而拒之。汉语:把 `表达式` 转成 `低层项`:为每个绑定生成全局唯一的变量名;拉平柯里化调用;把局部函数定义收成 `项局函`;把不支持的构造(闭包、元组、构造器、异常、续延、字符串值)报成带定义名的错误。:」
「底层名计数」者「新引用」授以「整数」于「零」也。
「底层当前定义」者「新引用」授以「字符串」于『』也。
「底层附加函数们」者「新引用」授以(「列」于「低层函数」)
于(「罄」授以「低层函数」)
也。
「低层出错」乃承「甲」而化「字符串」而「甲」也。
「低层出错」者受「甲」而会「消息」而
「发生事故」授以「甲」于(『底层编译错误(定义〈』附(「读引用」于「底层当前定义」)附『〉):』附「消息」)
也。
「低层新名」乃化「字符串」而「字符串」也。
「低层新名」者会「基」而
虑「号」者「读引用」于「底层名计数」而
虑「无」者「写引用」于「底层名计数」于(「加」于「号」于「一」)而
「基」附『#』附(「整数表示」于「号」)
也。
「低层二三二」乃「整数」也。
「低层二三二」者「四二九四九六七二九六」也。
「低层余」乃化「整数」而化「整数」而「整数」也。
「低层余」者会「数」而会「除数」而
「减」于「数」于(「乘」于(「除以」于「数」于「除数」)于「除数」)
也。
「:文言:归于三十二位有符号之域。汉语:把任意整数按模二的三十二次方折回 [-2^31, 2^31)。:」
「低层归一」乃化「整数」而「整数」也。
「低层归一」者会「数」而
虑「余」者「低层余」于「数」于「低层二三二」而
虑「正」者
若「小于」于「余」于「零」则「加」于「余」于「低层二三二」否则「余」而
若「小于」于「正」于「二一四七四八三六四八」则
「正」
否则
「减」于「正」于「低层二三二」
也。
「低层绑定」立「元类型」也。
「绑值」立化「字符串」而「低层绑定」也。 「:普通局部:简树中的唯一名:」
「绑函」立化「字符串」而化「整数」而「低层绑定」也。 「:局部函数:唯一名、形参个数:」
「绑全」立化「字符串」而化「整数」而「低层绑定」也。 「:全局函数:全局名、形参个数:」
「低层环」即「列」于(「字符串」合「低层绑定」)
也。
「低层查环」乃化「低层环」而化「字符串」而(「或可有」于「低层绑定」)也。
「低层查环」者会「境」而会「名」而
鉴「境」而
有「罄」则「可无」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于「名」则「可有」于(「首」中「一」)否则「低层查环」于「尾」于「名」
也。
「低层开结果」立「元类型」也。
「构造开结果」立化「低层环」而化(「列」于「字符串」)而化「表达式」而「低层开结果」也。
「:文言:连开若干绑定,各予新名。汉语:依次解构 n 个绑定,给每个变量生成唯一名并加入环境。:」
「低层开若干」乃
化「整数」而
化「低层环」而
化(「列」于「字符串」)而
化「表达式」而
「低层开结果」
也。
「低层开若干」者会「数」而会「境」而会「已有」而会「绑」而
若「小于」于「数」于「一」则
「构造开结果」于「境」于「已有」于「绑」
否则
虑「名及体」者「解构抽象」于「绑」而
虑「新名」者「低层新名」于(「名及体」中「零」)而
「低层开若干」
于(「减」于「数」于「一」)
于(「缀」于((「名及体」中「零」)与(「绑值」于「新名」))于「境」)
于(「附加」授以「字符串」于「已有」于(「列」【「新名」】))
于(「名及体」中「一」)
也。
「:文言:连开拉姆达之链,形参合为一列。汉语:把直接嵌套的拉姆达拉平成一个形参列表;返回值为新环境、形参唯一名与函数体。:」
「低层开抽象们」乃化「低层环」而化「表达式」而「低层开结果」也。
「低层开抽象们」者会「境」而会「式」而
鉴「式」而
有(「式节点」于(「拉姆达抽象」于「形」)于(「列」【「绑体」】))则(
虑「数」者
(「整数」也(鉴「形」而
有(「多参数形」于「个」)则「个」
或有「其他形」则「一」))而
虑「首」者
「低层开若干」于「数」于「境」于(「罄」授以「字符串」)于「绑体」而
鉴「首」而
有「构造开结果」于「新境」于「首名们」于「体式」则(
虑「后」者「低层开抽象们」于「新境」于「体式」而
鉴「后」而
有「构造开结果」于「终境」于「后名们」于「终体」则
「构造开结果」
于「终境」
于(「附加」授以「字符串」于「首名们」于「后名们」)于「终体」
)
)
或有「其他」则
「构造开结果」于「境」于(「罄」授以「字符串」)于「式」
也。
「:文言:不开绑定而数其形参。汉语:只看结构,统计拉姆达链的形参总数。:」
「低层形参数」乃化「表达式」而「整数」也。
「低层形参数」者会「式」而
鉴「式」而
有(「式节点」于(「拉姆达抽象」于「形」)于(「列」【(「绑定」于「可能名」于「体」)】))则
「加」
于(「整数」也(鉴「形」而
有(「多参数形」于「个」)则「个」
或有「其他形」则「一」))于(「低层形参数」于「体」)
或有「其他」则「零」
也。
「:文言:函数调用之链,拉平为头与诸实参。汉语:把嵌套的单参数调用拉平成(头,全部实参)。:」
「低层拆调用」乃化「表达式」而(「表达式」合(「列」于「表达式」))也。
「低层拆调用」者会「式」而
虑「拆」者「解构函数调用式」于「式」而
虑「头」者「拆」中「零」而
虑「实们」者「拆」中「一」而
鉴「头」而
有(「式节点」于「函数调用」于「诸」)则
(虑「内」者「低层拆调用」于「头」而(「内」中「零」)与(「附加」授以「表达式」于(「内」中「一」)于「实们」))
或有「其他」则「头」与「实们」
也。
「:文言:内建之数,皆取其名。汉语:把展开后的内建常量转成简树:爻与单元是常量,整数相等、大于、减是内建运算,其余不支持。:」
「低层转内建」乃化「内建常量」而化(「列」于「低层项」)而「低层项」也。
「低层转内建」者会「量」而会「参们」而
鉴「量」而
有「内建有元」则「项整」于「零」
或有「内建爻阳」则「项整」于「一」
或有「内建爻阴」则「项整」于「零」
或有「内建函数整数相等」则
「项外」于『底层_等』于「参们」
或有「内建函数整数大于」则
「项外」于『底层_有符号大于』于「参们」
或有「内建函数整数减」则
「项外」于『底层_减』于「参们」
或有「其他」则
「低层出错」授以「低层项」于(『不支持的内建:』附(「内建常量表示」于「量」))
也。
「:文言:转换函数以参数传入,使诸互递归之函数可依序而立。汉语:`低层转换虑`、`低层转局部函数`、`低层登记全局函数` 与 `低层转换` 互相递归,而豫言不许前向引用,故前三者以“转换函数”为首个参数,由 `低层转换` 传入自身;后续之式以“续”函数表之,续受让名之绑定,返其后式之简树。:」
「:文言:全局函数声明,于空环境中开其形参,登记之。汉语:`函数全局声明` 里的拉姆达不含自由变量:在空环境里转换函数体,追加到全局函数收集器(全局名为声明所给之名)。:」
「低层登记全局函数」乃
化(化「低层环」而化「表达式」而「低层项」)而
化「字符串」而
化「表达式」而
「有」
也。
「低层登记全局函数」者会「转换」而会「全名」而会「拉体」而
虑「开」者
「低层开抽象们」于(「罄」授以(「字符串」合「低层绑定」))于「拉体」而
鉴「开」而
有「构造开结果」于「体环」于「形们」于「体式」则(
虑「函」者
「构造低层函数」
于「全名」
于「形们」
于(「转换」
于(「缀」于(「全名」与(「绑全」于「全名」于(「长度」授以「字符串」于「形们」)))于「体环」)
于「体式」)
而
「写引用」于「底层附加函数们」于(「缀」于「函」于(「读引用」于「底层附加函数们」))
)
也。
「:文言:局部函数,立其名、形参与体,而后续其后式。汉语:`拉式` 是拉姆达链;`递归名` 若有,则同时绑定到本函数,使函数体内按名自调;函数的唯一名交予续,使后式可按名调用。:」
「低层转局部函数」乃
化(化「低层环」而化「表达式」而「低层项」)而
化「低层环」而
化「表达式」而
化(「或可有」于「字符串」)而
化「字符串」而
化(化「低层绑定」而「低层项」)而
「低层项」
也。
「低层转局部函数」者会「转换」而会「值境」而会「拉式」而会「递归名」而会「提示」而会「续」而
虑「函名」者「低层新名」于「提示」而
虑「个」者「低层形参数」于「拉式」而
虑「自名境」者
(「低层环」也(
鉴「递归名」而
有「可有」于「递归名字」则
「缀」
于(「递归名字」与(「绑函」于「函名」于「个」))
于「值境」
或有「可无」则「值境」
))而
虑「开」者「低层开抽象们」于「自名境」于「拉式」而
鉴「开」而
有「构造开结果」于「体环」于「形们」于「体式」则
「项局函」
于「函名」
于「形们」
于(「转换」于「体环」于「体式」)
于(「续」于(「绑函」于「函名」于「个」))
也。
「:文言:虑之值,若为函数,则定为局部函数;若为虑,则上提;余者令之。汉语:处理 `虑 名 者 值 而 后`:值是拉姆达或递归时定义局部函数;值本身是虑或顺序时上提(续原封不动地传给内层);全局函数声明登记为全局函数;其余是普通的令。`提示` 是让名(用于生成唯一名),`续` 接收让名的绑定并返回后式的简树。:」
「低层转换虑」乃
化(化「低层环」而化「表达式」而「低层项」)而
化「低层环」而
化「表达式」而
化「字符串」而
化(化「低层绑定」而「低层项」)而
「低层项」
也。
「低层转换虑」者会「转换」而会「值境」而会「值」而会「提示」而会「续」而
鉴「值」而
有(「式节点」于「内联虑」于(「列」【「内值」,「内后」】))则(
虑「名及体」者「解构抽象」于「内后」而
「低层转换虑」
于「转换」
于「值境」
于「内值」
于(「名及体」中「零」)
于(会「绑」而「低层转换虑」
于「转换」
于(「缀」于((「名及体」中「零」)与「绑」)于「值境」)
于(「名及体」中「一」)于「提示」于「续」
)
)
或有(「式节点」于「内联虑带类型」于(「列」【「类」,「内值」,「内后」】))则(
虑「名及体」者「解构抽象」于「内后」而
「低层转换虑」
于「转换」
于「值境」
于「内值」
于(「名及体」中「零」)
于(会「绑」而「低层转换虑」
于「转换」
于(「缀」于((「名及体」中「零」)与「绑」)于「值境」)
于(「名及体」中「一」)于「提示」于「续」
)
)
或有(「式节点」于「顺序执行节点」于(「列」【「甲」,「乙」】))则
「项令」
于(「低层新名」于『序』)
于(「转换」于「值境」于「甲」)
于(「低层转换虑」于「转换」于「值境」于「乙」于「提示」于「续」)
或有(「式节点」于(「函数全局声明节点」于「全名」)于(「列」【「拉体」】))则(
虑「个」者「低层形参数」于「拉体」而
虑「无」者「低层登记全局函数」于「转换」于「全名」于「拉体」而
「续」于(「绑全」于「全名」于「个」)
)
或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则
「低层转局部函数」
于「转换」
于「值境」
于「值」
于(「可无」授以「字符串」)
于「提示」于「续」
或有(「式节点」于「递归节点」于(「列」【「递归域」,「递归绑」】))则(
虑「递名及体」者「解构抽象」于「递归绑」而
「低层转局部函数」
于「转换」于「值境」
于(「递名及体」中「一」)
于(「可有」于(「递名及体」中「零」))于「提示」于「续」
)
或有「其他」则(
虑「新名」者「低层新名」于「提示」而
「项令」于「新名」于(「转换」于「值境」于「值」)于(「续」于(「绑值」于「新名」))
)
也。
「低层转换」乃化「低层环」而化「表达式」而「低层项」也。
「低层转换」者会「境」而会「式」而
虑「转实们」者(化(「列」于「表达式」)而(「列」于「低层项」))也(会「们」而
「态射」授以「表达式」授以「低层项」
于「们」
于(会「实」而「低层转换」于「境」于「实」))而
鉴「式」而
有(「自由变量」于「名」)则(
鉴「低层查环」于「境」于「名」而
有「可有」于(「绑值」于「唯一」)则「项局」于「唯一」
或有「可有」于(「绑函」于「唯一」于「个」)则
「低层出错」授以「低层项」
于(『局部函数〈』附「名」附『〉不能作为值使用(闭包不受支持)』)
或有「可有」于(「绑全」于「全名」于「个」)则
「低层出错」授以「低层项」于(『函数〈』附「名」附『〉不能作为值使用(闭包不受支持)』)
或有「可无」则
「低层出错」授以「低层项」于(『未绑定的变量〈』附「名」附『〉』)
)
或有(「式节点」于(「整数节点」于「数」)于「罄」)则「项整」
于(「低层归一」于「数」)
或有(「式节点」于(「字符串节点」于「文」)于「罄」)则「项串」于「文」
或有(「式节点」于「空值节点」于「罄」)则「项整」
于「零」
或有(「式节点」于(「展开后内建节点」于「量」)于「参们」)则
「低层转内建」
于「量」
于(「转实们」于「参们」)
或有(「式节点」于(「解析后外部调用节点无类型」于「名」)于「参们」)则
「项外」
于「名」
于(「转实们」于「参们」)
或有(「式节点」于(「文件定义引用节点」于「文件」于「名」于「序」)于「罄」)则「项引」
于「文件」于「名」
或有(「式节点」于「爻分支节点」于(「列」【「条」,「真」,「假」】))则
「项若」
于(「低层转换」于「境」于「条」)
于(「低层转换」于「境」于「真」)
于(「低层转换」于「境」于「假」)
或有(「式节点」于「内联虑」于(「列」【「值」,「后」】))
则(
虑「名及体」者「解构抽象」于「后」而
「低层转换虑」
于「低层转换」
于「境」
于「值」
于(「名及体」中「零」)
于(会「绑」而「低层转换」于(「缀」于((「名及体」中「零」)与「绑」)于「境」)于(「名及体」中「一」))
)
或有(「式节点」于「内联虑带类型」于(「列」【「类」,「值」,「后」】))
则(
虑「名及体」者「解构抽象」于「后」而
「低层转换虑」
于「低层转换」
于「境」
于「值」
于(「名及体」中「零」)
于(会「绑」而「低层转换」于(「缀」于((「名及体」中「零」)与「绑」)于「境」)于(「名及体」中「一」))
)
或有(「式节点」于「顺序执行节点」于(「列」【「甲」,「乙」】))则
「项令」
于(「低层新名」于『序』)
于(「低层转换」于「境」于「甲」)
于(「低层转换」于「境」于「乙」)
或有(「式节点」于「函数调用」于「诸」)则(
虑「拆」者「低层拆调用」于「式」而
虑「头」者「拆」中「零」而
虑「实们」者「转实们」于(「拆」中「一」)而
鉴「头」而
有(「式节点」于(「函数引用节点」于「名」)于「罄」)则「项调」
于「名」
于「实们」
或有(「式节点」于(「文件定义引用节点」于「文件」于「名」于「序」)于「罄」)则「项调」
于(「文件」附『#』附「名」)于「实们」
或有(「自由变量」于「名」)则(
鉴「低层查环」于「境」于「名」而
有「可有」于(「绑函」于「唯一」于「个」)则(
若(「不等于」于「个」于(「长度」授以「低层项」于「实们」))则
「低层出错」授以「低层项」
于(『调用〈』附「名」附『〉的实参个数与形参个数不符』)
否则
「项局调」于「唯一」于「实们」
)
或有「可有」于(「绑全」于「全名」于「个」)则(
若(「不等于」于「个」于(「长度」授以「低层项」于「实们」))则
「低层出错」授以「低层项」
于(『调用〈』附「名」附『〉的实参个数与形参个数不符』)
否则
「项调」于「全名」于「实们」
)
或有「可有」于(「绑值」于「唯一」)则
「低层出错」授以「低层项」
于(『〈』附「名」附『〉不是已知函数,不支持间接调用』)
或有「可无」则
「低层出错」授以「低层项」于(『未绑定的变量〈』附「名」附『〉』)
)
或有「其他」则
「低层出错」授以「低层项」于(『不支持的调用头:』附(「表达式表示」于「头」))
)
或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则
「低层出错」授以「低层项」
于『拉姆达只能定义具名函数,不能作为值(闭包不受支持)』
或有(「式节点」于「递归节点」于「诸」)则
「低层出错」授以「低层项」
于『递归只能定义具名函数,不能作为值』
或有(「式节点」于「元组构造节点」于「诸」)则
「低层出错」授以「低层项」
于『元组需要垃圾回收,底层模式不支持』
或有(「式节点」于(「元组解构节点」于「位」)于「诸」)则
「低层出错」授以「低层项」
于『元组需要垃圾回收,底层模式不支持』
或有(「式节点」于「模式匹配」于「诸」)则
「低层出错」授以「低层项」
于『模式匹配只支持对整数常量的分派,其余不支持』
或有(「式节点」于「节点名」于「诸」)则
「低层出错」授以「低层项」于(『底层模式不支持的语法节点:』附(「节点名称表示」于「节点名」))
或有(「绑定」于「可能名」于「下式」)则
「低层出错」授以「低层项」于『意外的绑定』
或有(「绑定变量」于「位」)则
「低层出错」授以「低层项」于『意外的绑定变量』
也。
「:文言:顶层定义之形,或函数,或值。汉语:一个顶层定义转换后的形态:函数有形参与体,值只有一个简树。:」
「低层定义」立「元类型」也。
「定义函数」立化(「列」于「字符串」)而化「低层项」而「低层定义」也。
「定义值」立化「低层项」而「低层定义」也。
「低层定义结果」立「元类型」也。
「构造定义结果」立化「低层定义」而化(「列」于「低层函数」)而「低层定义结果」也。 「:本定义、及其中声明的全局函数:」
「:文言:转一顶层定义头。汉语:`全名` 是定义的全局函数名(文件#名)。定义体可能是:递归包裹的拉姆达(函数)、若干全局函数声明后接包装拉姆达(函数)、或值表达式。:」
「低层转定义头」乃化「字符串」而化「低层环」而化「表达式」而「低层定义」也。
「低层转定义头」者会「全名」而会「境」而会「式」而
鉴「式」而
有(「式节点」于「递归节点」于(「列」【「递归域」,「递归绑」】))则(
虑「递名及体」者「解构抽象」于「递归绑」而
虑「个」者「低层形参数」于(「递名及体」中「一」)而
虑「开」者
「低层开抽象们」
于(「缀」于((「递名及体」中「零」)与(「绑全」于「全名」于「个」))于「境」)
于(「递名及体」中「一」)而
鉴「开」而
有「构造开结果」于「体环」于「形们」于「体式」则(
若「等于」于「个」于「零」则
「定义值」于(「低层转换」于「体环」于「体式」)
否则
「定义函数」于「形们」于(「低层转换」于「体环」于「体式」)
)
)
或有(「式节点」
于「内联虑」
于(「列」【(「式节点」于(「函数全局声明节点」于「声明名」)于(「列」【「拉体」】)),「后」】))则(
虑「个」者「低层形参数」于「拉体」
而
虑「无」者「低层登记全局函数」于「低层转换」于「声明名」于「拉体」
而
虑「名及体」者「解构抽象」于「后」而
「低层转定义头」
于「全名」
于(「缀」于((「名及体」中「零」)与(「绑全」于「声明名」于「个」))于「境」)
于(「名及体」中「一」)
)
或有(「式节点」于(「拉姆达抽象」于「形」)于「诸」)则(
虑「开」者「低层开抽象们」于「境」于「式」而
鉴「开」而
有「构造开结果」于「体环」于「形们」于「体式」则
「定义函数」于「形们」于(「低层转换」于「体环」于「体式」)
)
或有「其他」则
「定义值」于(「低层转换」于「境」于「式」)
也。
「低层转定义」乃化「字符串」而化「字符串」而化「表达式」而「低层定义结果」也。
「低层转定义」者会「文件」而会「名」而会「式」而
虑「无」者「写引用」于「底层当前定义」于(「文件」附『#』附「名」)而
虑「无」者「写引用」于「底层附加函数们」于(「罄」授以「低层函数」)而
虑「全名」者「文件」附『#』附「名」而
虑「定」者
「低层转定义头」于「全名」于(「罄」授以(「字符串」合「低层绑定」))
于「式」而
虑「附」者
「反转」授以「低层函数」于(「读引用」于「底层附加函数们」)
而
「构造定义结果」于「定」于「附」
也。