编译步骤/代码生成/底层后端/底层提升。豫
yuyan · 393 行 · 20425 字节 · 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
寻观「标准库」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层中间式」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层读取」之书。
「:文言:提升:局部函数或内联为环,或单用而展开,或升为全局函数;末尾自调化为回跳;等值之链成派。汉语:把局部函数消掉:只被调用一次且不自调的展开进调用处;只被调用一次且自调都在尾位置的做成内联循环(共用外层函数的局部变量,因此可以捕获可变格);其余提升为全局函数,自由变量作为前置形参(不能是可变格)。全局函数里的自身尾调用改成回到函数起点的循环。连续的对同一变量的整数等值判断合成分派。:」
「底层提升函数们」者「新引用」授以(「列」于「低层函数」)
于(「罄」授以「低层函数」)
也。
「:文言:改写对局部函数之调用。汉语:把所有 `局调 函 实参` 换成变换后的项;实参已先改写。:」
「低层重写局调」乃
化「字符串」而
化(化(「列」于「低层项」)而「低层项」)而
化「低层项」而
「低层项」
也。
「低层重写局调」者会「函」而会「变换」而会「项」而
虑「新」者
「低层映射子项」于(会「子」而「低层重写局调」于「函」于「变换」于「子」)于「项」而
鉴「新」而
有「项局调」于「名」于「参们」则(
若「串相等」于「名」于「函」则「变换」于「参们」否则「新」)
或有「余项」则「新」
也。
「:文言:函数展开:形参依次令为实参,而后其体。汉语:把一次调用展开成一串 `令`(保持实参求值顺序)。:」
「低层内联展开」乃
化(「列」于「字符串」)而
化(「列」于「低层项」)而
化「低层项」而
「低层项」
也。
「低层内联展开」者会「形们」而会「实们」而会「体」而
鉴「形们」而
有「罄」则「体」
或有「缀」于「形」于「余形」则(
鉴「实们」而
有「缀」于「实」于「余实」则
「项令」
于「形」
于「实」
于(「低层内联展开」于「余形」于「余实」于「体」)
或有「罄」则「体」
)
也。
「:文言:数被关注之调用。汉语:统计 `项` 中被 `选` 选中的调用个数。:」
「低层选调数」乃
化(化「低层项」而(「或可有」于(「列」于「低层项」)))而
化「低层项」而
「整数」
也。
「低层选调数」者会「选」而会「项」而
虑「自身」者
(「整数」也(鉴「选」于「项」而
有「可有」于「参们」则「一」
或有「可无」则「零」))
而
「加」
于「自身」
于(「从左折叠」授以「低层项」授以「整数」
于(会「子」而会「累」而「加」于「累」于(「低层选调数」于「选」于「子」))
于「零」
于(「低层子项们」于「项」))
也。
「:文言:末位所调,皆为某自调乎。汉语:`选` 从一个项取出(若它是被关注的自调用)实参;判断 `项` 中的所有被关注调用是否都在尾位置。`个` 是要求的实参个数。:」
「低层尾位全是自调」乃
化(化「低层项」而(「或可有」于(「列」于「低层项」)))而
化「整数」而
化「低层项」而
「爻」
也。
「低层尾位全是自调」者会「选」而会「个」而会「项」而
虑「无自调」者(化「低层项」而「爻」)也(会「子」而
「等于」于(「低层选调数」于「选」于「子」)于「零」)而
鉴「选」于「项」而
有「可有」于「参们」则
「且」
于(「等于」于(「长度」授以「低层项」于「参们」)于「个」)
于(「全部符合」授以「低层项」于「无自调」于「参们」)
或有「可无」则(
鉴「项」而
有「项若」于「条」于「真」于「假」则
「且」
于(「无自调」于「条」)
于(「且」
于(「低层尾位全是自调」于「选」于「个」于「真」)
于(「低层尾位全是自调」于「选」于「个」于「假」))
或有「项令」于「名」于「值」于「体」则
「且」
于(「无自调」于「值」)
于(「低层尾位全是自调」于「选」于「个」于「体」)
或有「项环」于「标」于「形们」于「初们」于「体」则
「且」
于(「全部符合」授以「低层项」于「无自调」于「初们」)
于(「低层尾位全是自调」于「选」于「个」于「体」)
或有「项派」于「被」于「分们」于「缺」则
「且」
于(「无自调」于「被」)
于(「且」
于(「全部符合」授以(「整数」合「低层项」)
于(会「分」而「低层尾位全是自调」于「选」于「个」于(「分」中「一」))
于「分们」)
于(「低层尾位全是自调」于「选」于「个」于「缺」))
或有「余项」则「无自调」于「项」
)
也。
「:文言:尾位之自调,改为回跳。汉语:把尾位置上被关注的调用改成 `续 标 实参`。:」
「低层尾改续」乃
化(化「低层项」而(「或可有」于(「列」于「低层项」)))而
化「字符串」而
化「低层项」而
「低层项」
也。
「低层尾改续」者会「选」而会「标」而会「项」而
鉴「选」于「项」而
有「可有」于「参们」则
「项续」于「标」于「参们」
或有「可无」则(
鉴「项」而
有「项若」于「条」于「真」于「假」则
「项若」
于「条」
于(「低层尾改续」于「选」于「标」于「真」)
于(「低层尾改续」于「选」于「标」于「假」)
或有「项令」于「名」于「值」于「体」则
「项令」
于「名」
于「值」
于(「低层尾改续」于「选」于「标」于「体」)
或有「项环」于「标二」于「形们」于「初们」于「体」则
「项环」
于「标二」
于「形们」
于「初们」
于(「低层尾改续」于「选」于「标」于「体」)
或有「项派」于「被」于「分们」于「缺」则
「项派」
于「被」
于(「态射」授以(「整数」合「低层项」)授以(「整数」合「低层项」)
于「分们」
于(会「分」而(「分」中「零」)与(「低层尾改续」于「选」于「标」于(「分」中「一」))))
于(「低层尾改续」于「选」于「标」于「缺」)
或有「余项」则「项」
)
也。
「:文言:尾位有被关注之调用否。汉语:判断尾位置上是否存在被关注的调用。:」
「低层尾含选调」乃
化(化「低层项」而(「或可有」于(「列」于「低层项」)))而
化「低层项」而
「爻」
也。
「低层尾含选调」者会「选」而会「项」而
鉴「选」于「项」而
有「可有」于「参们」则「阳」
或有「可无」则(
鉴「项」而
有「项若」于「条」于「真」于「假」则
「或者」
于(「低层尾含选调」于「选」于「真」)
于(「低层尾含选调」于「选」于「假」)
或有「项令」于「名」于「值」于「体」则
「低层尾含选调」
于「选」于「体」
或有「项环」于「标」于「形们」于「初们」于「体」则
「低层尾含选调」于「选」于「体」
或有「项派」于「被」于「分们」于「缺」则
「或者」
于(「存在吗」授以(「整数」合「低层项」)
于(会「分」而「低层尾含选调」于「选」于(「分」中「一」))
于「分们」)
于(「低层尾含选调」于「选」于「缺」)
或有「余项」则「阴」
)
也。
「:文言:凡新格者,令其名于格之集。汉语:值是 `底层_新格` 调用时,令绑定的变量是可变格。:」
「低层是新格」乃化「低层项」而「爻」也。
「低层是新格」者会「项」而
鉴「项」而
有「项外」于「名」于「参们」则
「串相等」于「名」于『底层_新格』
或有「余项」则「阴」
也。
「:文言:提升,自上而下:先定局部函数之归宿,再理其后。汉语:`基` 是当前全局函数名,`格们` 是作用域内的可变格变量名。处理 `局函 名 形参 体 余`:先提升体内更内层的局部函数;再按使用情况三选一(未使用则丢弃;单次调用且不自调则展开;单次调用且自调全为尾调则做成内联循环;否则提升为全局函数);然后把对它的调用在余式中改写完毕,才继续提升余式。:」
「低层提升」乃
化「字符串」而
化(「列」于「字符串」)而
化「低层项」而
「低层项」
也。
「低层提升」者会「基」而会「格们」而会「项」而
鉴「项」而
有「项令」于「名」于「值」于「体」则(
虑「新格们」者(「列」于「字符串」)也(
若「低层是新格」于「值」则「缀」于「名」于「格们」否则「格们」)
而
「项令」于「名」于(「低层提升」于「基」于「格们」于「值」)
于(「低层提升」于「基」于「新格们」于「体」)
)
或有「项局函」于「名」于「形们」于「体」于「余」则(
虑「体一」者「低层提升」于「基」于「格们」于「体」
而
虑「个」者「长度」授以「字符串」于「形们」
而
虑「自数」者「低层局调数」于「名」于「体一」
而
虑「外数」者「低层局调数」于「名」于「余」
而
虑「选自」者
(化「低层项」而(「或可有」于(「列」于「低层项」)))也(会「子」而
鉴「子」而
有「项局调」于「他」于「参们」则(
若「串相等」于「他」于「名」则「可有」于「参们」否则「可无」)
或有「余子」则「可无」
)
而
若「等于」于「外数」于「零」则
「低层提升」于「基」于「格们」于「余」
否则若「且」于(「等于」于「自数」于「零」)于(「等于」于「外数」于「一」)则
「低层提升」
于「基」
于「格们」
于(「低层重写局调」于「名」于(会「实们」而「低层内联展开」于「形们」于「实们」于「体一」)于「余」)
否则若「且」于(「等于」于「外数」于「一」)于(「低层尾位全是自调」于「选自」于「个」于「体一」)则
「低层提升」
于「基」
于「格们」
于(「低层重写局调」
于「名」
于(会「实们」而「项环」于「名」于「形们」于「实们」于(「低层尾改续」于「选自」于「名」于「体一」))
于「余」)
否则
(
虑「捕获们」者
「滤」授以「字符串」
于(会「变」而「非」于(「低层含名」于「形们」于「变」))
于(「低层自由们」于「体一」)
而
虑「捕获格」者
「滤」授以「字符串」
于(会「变」而「低层含名」于「格们」于「变」)于「捕获们」
而
若「等于」于(「长度」授以「字符串」于「捕获格」)于「零」则(
虑「全名」者「低层新名」于(「基」附『/』附「名」)
而
虑「转调」者(化(「列」于「低层项」)而「低层项」)也(会「实们」而
「项调」
于「全名」
于(「附加」授以「低层项」
于(「态射」授以「字符串」授以「低层项」于「捕获们」于(会「变」而「项局」于「变」))
于「实们」))
而
虑「体二」者「低层重写局调」于「名」于「转调」于「体一」
而
虑「无」者
「写引用」
于「底层提升函数们」
于(「缀」
于(「构造低层函数」于「全名」于(「附加」授以「字符串」于「捕获们」于「形们」)于「体二」)
于(「读引用」于「底层提升函数们」))
而
「低层提升」
于「基」于「格们」
于(「低层重写局调」于「名」于「转调」于「余」)
)
否则
「低层出错」授以「低层项」于(『局部函数〈』附「名」附『〉捕获了可变格〈』附(「间合」于『,』于「捕获格」)
附
『〉:请让该函数只有一处调用且自调都在尾位置(成为内联循环),或改经内存传递』)
)
)
或有「余项」则
「低层映射子项」于(会「子」而「低层提升」于「基」于「格们」于「子」)于「余项」
也。
「:文言:全局函数中,末位自调化为回跳。汉语:若函数体里有尾位置的自身调用,则把体包成一个以形参为循环变量的循环,并把这些调用改成回跳。:」
「低层函数尾环」乃化「低层函数」而「低层函数」也。
「低层函数尾环」者会「函」而
鉴「函」而
有「构造低层函数」于「全名」于「形们」于「体」则(
虑「选」者(化「低层项」而(「或可有」于(「列」于「低层项」)))也(会「项」而
鉴「项」而
有「项调」于「名」于「参们」则(
若「且」
于(「串相等」于「名」于「全名」)
于(「等于」于(「长度」授以「低层项」于「参们」)于(「长度」授以「字符串」于「形们」))则
「可有」于「参们」
否则
「可无」
)
或有「余项」则「可无」
)
而
若「低层尾含选调」于「选」于「体」
则
「构造低层函数」
于「全名」
于「形们」
于(「项环」
于『函数环』
于「形们」
于(「态射」授以「字符串」授以「低层项」于「形们」于(会「形」而「项局」于「形」))
于(「低层尾改续」于「选」于『函数环』于「体」))
否则
「函」
)
也。
「:文言:一函数及其所生之全局函数,皆已提升。汉语:提升一个全局函数:返回它自己与提升过程中产生的全局函数,都已把尾自调化为回跳。:」
「低层提升函数」乃化「低层函数」而(「列」于「低层函数」)也。
「低层提升函数」者会「函」而
鉴「函」而
有「构造低层函数」于「全名」于「形们」于「体」则(
虑「无」者
「写引用」于「底层提升函数们」于(「罄」授以「低层函数」)而
虑「体一」者
「低层提升」于「全名」于(「罄」授以「字符串」)于「体」而
虑「附」者
「反转」授以「低层函数」于(「读引用」于「底层提升函数们」)
而
「态射」授以「低层函数」授以「低层函数」
于(「缀」于(「构造低层函数」于「全名」于「形们」于「体一」)于「附」)
于「低层函数尾环」
)
也。
「:文言:整数等值之链,合为分派。汉语:`若 变量 = 常量 则 甲 否则 若 同一变量 = 常量 …` 合成 `派`;先前的判断优先,故同键后者被舍。:」
「低层等常式」乃化「低层项」而(「或可有」于(「字符串」合「整数」))也。
「低层等常式」者会「项」而
鉴「项」而
有「项外」于「名」于(「列」【「项局」于「变」,「项整」于「键」】)则
(若「串相等」于「名」于『底层_等』则「可有」于(「变」与「键」)否则「可无」)
或有「项外」于「名」于(「列」【「项整」于「键」,「项局」于「变」】)则
(若「串相等」于「名」于『底层_等』则「可有」于(「变」与「键」)否则「可无」)
或有「余项」则「可无」
也。
「低层除键」乃
化「整数」而
化(「列」于(「整数」合「低层项」))而
(「列」于(「整数」合「低层项」))
也。
「低层除键」者会「键」而会「分们」而
「滤」授以(「整数」合「低层项」)
于(会「分」而「不等于」于(「分」中「零」)于「键」)
于「分们」
也。
「低层成派」乃化「低层项」而「低层项」也。
「低层成派」者会「项」而
虑「新」者「低层映射子项」于「低层成派」于「项」而
鉴「新」而
有「项若」于「条」于「真」于「假」则(
鉴「低层等常式」于「条」而
有「可有」于「对」则(
虑「变」者「对」中「零」而
虑「键」者「对」中「一」而
鉴「假」而
有「项派」于(「项局」于「他变」)于「分们」于「缺」则(
若「串相等」于「他变」于「变」则
「项派」
于(「项局」于「变」)
于(「缀」于(「键」与「真」)于(「低层除键」于「键」于「分们」))
于「缺」
否则
「新」
)
或有「项若」于「条二」于「真二」于「假二」则(
鉴「低层等常式」于「条二」而
有「可有」于「对二」则(
若「串相等」于(「对二」中「零」)于「变」则
「项派」
于(「项局」于「变」)
于(「缀」
于(「键」与「真」)
于(「低层除键」于「键」于(「列」【((「对二」中「一」)与「真二」)】)))
于「假二」
否则
「新」
)
或有「可无」则「新」
)
或有「余假」则「新」
)
或有「可无」则「新」
)
或有「余项」则「新」
也。