编译步骤/代码生成/底层后端/底层求值。豫
yuyan · 513 行 · 27391 字节 · 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 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「标准库」之「数据结构」之「字符串术」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层中间式」之书。
寻观「编译器核心」之「编译步骤」之「代码生成」之「底层后端」之「底层读取」之书。
「:文言:编译时求值:三十二位整数之算、顶层常量之解、静态串之置、内存与数据区之声。汉语:底层模式的编译期部分:三十二位有符号整数的纯运算(用于折叠与顶层常量)、顶层值定义按需求值、静态字符串分配到数据区、内存与数据区的声明状态。:」
「低层无符」乃化「整数」而「整数」也。
「低层无符」者会「数」而
虑「归」者「低层归一」于「数」而
若「小于」于「归」于「零」则
「加」于「归」于「低层二三二」
否则
「归」
也。
「低层幂二」乃化「整数」而「整数」也。
「低层幂二」者会「数」而
若「小于」于「数」于「一」则
「一」
否则
「乘」于「二」于(「低层幂二」于(「减」于「数」于「一」))
也。
「:文言:逐位而合,操零为与,一为或,二为异或。汉语:把两个非负整数按 32 位逐位组合。:」
「低层位合」乃化「整数」而化「整数」而化「整数」而「整数」也。
「低层位合」者会「操」而
会「甲」而
会「乙」而
递归虑「逐位」其化「整数」而化「整数」而化「整数」而化「整数」而「整数」者会「子」而会「丑」而会「权」而会「累」而
若「等于」于「权」于「低层二三二」则「累」
否则
虑「位子」者「低层余」于「子」于「二」
而
虑「位丑」者「低层余」于「丑」于「二」
而
虑「位」者
若「等于」于「操」于「零」则
(若「且」于(「等于」于「位子」于「一」)于(「等于」于「位丑」于「一」)则「一」否则「零」)
否则
若「等于」于「操」于「一」则
(若「或者」于(「等于」于「位子」于「一」)于(「等于」于「位丑」于「一」)则「一」否则「零」)
否则
(若「等于」于「位子」于「位丑」则「零」否则「一」)
而
「逐位」
于(「除以」于「子」于「二」)
于(「除以」于「丑」于「二」)
于(「乘」于「权」于「二」)
于(「加」于「累」于(「乘」于「位」于「权」))
而
「低层归一」于(「逐位」于(「低层无符」于「甲」)于(「低层无符」于「乙」)于「一」于「零」)
也。
「低层布尔」乃化「爻」而「整数」也。
「低层布尔」者会「值」而
若「值」则「一」否则「零」
也。
「:文言:左移,乘以二之幂而归一。汉语:按位移量模 32 计算。:」
「低层左移」乃化「整数」而化「整数」而「整数」也。
「低层左移」者会「甲」而会「乙」而
「低层归一」于(「乘」于「甲」于(「低层幂二」于(「低层余」于(「低层无符」于「乙」)于「三二」)))
也。
「低层无符右移」乃化「整数」而化「整数」而「整数」也。
「低层无符右移」者会「甲」而会「乙」而
「低层归一」于(「除以」
于(「低层无符」于「甲」)
于(「低层幂二」于(「低层余」于(「低层无符」于「乙」)于「三二」)))
也。
「低层有符右移」乃化「整数」而化「整数」而「整数」也。
「低层有符右移」者会「甲」而会「乙」而
虑「幂」者
「低层幂二」于(「低层余」于(「低层无符」于「乙」)于「三二」)而
若「小于」于「甲」于「零」则
「减」于「零」于(「除以」于(「加」于(「减」于「零」于「甲」)于(「减」于「幂」于「一」))于「幂」)
否则
「除以」于「甲」于「幂」
也。
「低层纯算二」乃
化「字符串」而
化「整数」而
化「整数」而
(「或可有」于「整数」)
也。
「低层纯算二」者会「名」而会「甲」而会「乙」而
若「串相等」于「名」于『底层_加』则
「可有」于(「低层归一」于(「加」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_减』则「可有」于(「低层归一」于(「减」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_乘』则「可有」于(「低层归一」于(「乘」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_位与』则「可有」于(「低层位合」于「零」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_位或』则「可有」于(「低层位合」于「一」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_位异或』则「可有」于(「低层位合」于「二」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_左移』则「可有」于(「低层左移」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_无符号右移』则「可有」于(「低层无符右移」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_有符号右移』则「可有」于(「低层有符右移」于「甲」于「乙」)
否则若「串相等」于「名」于『底层_有符号除』则(
若「或者」
于(「等于」于「乙」于「零」)
于(「且」
于(「等于」于「甲」于(「减」于「零」于「二一四七四八三六四八」))
于(「等于」于「乙」于(「减」于「零」于「一」)))则「可无」
否则
「可有」于(「除以」于「甲」于「乙」)
)
否则若「串相等」于「名」于『底层_有符号余』则(
若「等于」于「乙」于「零」则
「可无」
否则
「可有」于(「减」于「甲」于(「乘」于(「除以」于「甲」于「乙」)于「乙」))
)
否则若「串相等」于「名」于『底层_无符号除』则(
若「等于」于「乙」于「零」则
「可无」
否则
「可有」于(「低层归一」于(「除以」于(「低层无符」于「甲」)于(「低层无符」于「乙」)))
)
否则若「串相等」于「名」于『底层_无符号余』则(
若「等于」于「乙」于「零」则
「可无」
否则
「可有」于(「低层归一」于(「低层余」于(「低层无符」于「甲」)于(「低层无符」于「乙」)))
)
否则若「串相等」于「名」于『底层_等』则「可有」于(「低层布尔」于(「等于」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_不等』则「可有」于(「低层布尔」于(「不等于」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_有符号小于』则「可有」于(「低层布尔」于(「小于」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_有符号大于』则「可有」于(「低层布尔」于(「大于」于「甲」于「乙」))
否则若「串相等」于「名」于『底层_有符号小等』则「可有」于(「低层布尔」于(「非」于(「大于」于「甲」于「乙」)))
否则若「串相等」于「名」于『底层_有符号大等』则「可有」于(「低层布尔」于(「非」于(「小于」于「甲」于「乙」)))
否则若「串相等」于「名」于『底层_无符号小于』则
「可有」于(「低层布尔」于(「小于」于(「低层无符」于「甲」)于(「低层无符」于「乙」)))
否则若「串相等」于「名」于『底层_无符号大于』则
「可有」于(「低层布尔」于(「大于」于(「低层无符」于「甲」)于(「低层无符」于「乙」)))
否则若「串相等」于「名」于『底层_无符号小等』则
「可有」于(「低层布尔」于(「非」于(「大于」于(「低层无符」于「甲」)于(「低层无符」于「乙」))))
否则若「串相等」于「名」于『底层_无符号大等』则
「可有」于(「低层布尔」于(「非」于(「小于」于(「低层无符」于「甲」)于(「低层无符」于「乙」))))
否则
「可无」
也。
「低层纯算一」乃化「字符串」而化「整数」而(「或可有」于「整数」)也。
「低层纯算一」者会「名」而会「甲」而
若「串相等」于「名」于『底层_为零』则
「可有」于(「低层布尔」于(「等于」于「甲」于「零」))
否则
「可无」
也。
「低层纯算」乃化「字符串」而化(「列」于「整数」)而(「或可有」于「整数」)也。
「低层纯算」者会「名」而会「值们」而
鉴「值们」而
有(「列」【「甲」,「乙」】)则
「低层纯算二」于「名」于「甲」于「乙」
或有(「列」【「甲」】)则
「低层纯算一」于「名」于「甲」
或有「其他」则「可无」
也。
「:文言:名之为纯算者,二元或一元之整数运算,无副作用。汉语:判断外部调用名是否属于可编译期折叠的纯整数运算。:」
「低层是纯算名」乃化「字符串」而「爻」也。
「低层是纯算名」者会「名」而
「存在吗」授以「字符串」
于(会「他」而「串相等」于「他」于「名」)
于(「列」【
『底层_加』,
『底层_减』,
『底层_乘』,
『底层_位与』,
『底层_位或』,
『底层_位异或』,
『底层_左移』,
『底层_无符号右移』,
『底层_有符号右移』,
『底层_有符号除』,
『底层_有符号余』,
『底层_无符号除』,
『底层_无符号余』,
『底层_等』,
『底层_不等』,
『底层_有符号小于』,
『底层_有符号大于』,
『底层_有符号小等』,
『底层_有符号大等』,
『底层_无符号小于』,
『底层_无符号大于』,
『底层_无符号小等』,
『底层_无符号大等』,
『底层_为零』
】)
也。
「低层值」立「元类型」也。
「值整」立化「整数」而「低层值」也。
「值串」立化「字符串」而「低层值」也。
「:文言:模块级之状态:数据区、静态串、内存声明与顶层值。汉语:这些引用在每次生成模块前由 `低层重置状态` 清空。:」
「底层静态基」者「新引用」授以「整数」于「零」也。
「底层静态止」者「新引用」授以「整数」于「零」也。
「底层静态顶」者「新引用」授以「整数」于「零」也。
「底层静态段们」者
「新引用」授以(「列」于(「整数」合「字符串」合「字节串」))
于(「罄」授以(「整数」合「字符串」合「字节串」))
也。
「底层内存声明」者「新引用」授以(「列」于「整数」)于(「罄」授以「整数」)也。
「底层值定义表」者「新引用」授以(「列」于(「字符串」合「低层项」))
于(「罄」授以(「字符串」合「低层项」))
也。
「底层常量表」者「新引用」授以(「列」于(「字符串」合「整数」))
于(「罄」授以(「字符串」合「整数」))
也。
「底层求值中」者「新引用」授以(「列」于「字符串」)于(「罄」授以「字符串」)也。
「:文言:别名之表:顶层值定义若径为对他定义之引用(重出口),则调其名等于调其所引。汉语:总集(寻诵)会把每个名字重出口成“值=引用 原定义”;调用这些别名时应改为调用原函数。键与目标都是 文件#名。:」
「底层别名表」者「新引用」授以(「列」于(「字符串」合「字符串」))
于(「罄」授以(「字符串」合「字符串」))
也。
「低层重置状态」乃化「有」而「有」也。
「低层重置状态」者会「无」而
虑「无」者「写引用」于「底层静态基」于「零」而
虑「无」者「写引用」于「底层静态止」于「零」而
虑「无」者「写引用」于「底层静态顶」于「零」而
虑「无」者
「写引用」于「底层静态段们」于(「罄」授以(「整数」合「字符串」合「字节串」))而
虑「无」者「写引用」于「底层内存声明」于(「罄」授以「整数」)而
虑「无」者
「写引用」于「底层值定义表」于(「罄」授以(「字符串」合「低层项」))而
虑「无」者
「写引用」于「底层常量表」于(「罄」授以(「字符串」合「整数」))而
虑「无」者
「写引用」于「底层别名表」于(「罄」授以(「字符串」合「字符串」))
而
「写引用」于「底层求值中」于(「罄」授以「字符串」)
也。
「:文言:置串于数据区,同文者共其址,末附零字节。汉语:静态字符串按 UTF-8 存入数据区,以零字节结尾;相同内容只存一份。:」
「低层分配静态串」乃化「字符串」而「整数」也。
「低层分配静态串」者会「文」而
虑「已有」者
「滤」授以(「整数」合「字符串」合「字节串」)
于(会「段」而「串相等」于(「段」中「一」)于「文」)
于(「读引用」于「底层静态段们」)而
鉴「已有」而
有「缀」于「首」于「余」则(「首」中「零」)
或有「罄」则(
若「等于」于(「读引用」于「底层静态止」)于「零」则
「低层出错」授以「整数」
于『使用静态串之前须先声明数据区(声明数据区 起 止)』
否则
虑「址」者「读引用」于「底层静态顶」
而
虑「字节」者
「拼接字节串」
于(「字符串转字节串」于「文」)
于(「单字节串」于「零」)
而
虑「新顶」者「加」于「址」于(「字节串长度」于「字节」)
而
若「大于」于「新顶」于(「读引用」于「底层静态止」)则
「低层出错」授以「整数」于『静态串溢出数据区』
否则
虑「无」者「写引用」于「底层静态顶」于「新顶」
而
虑「无」者
「写引用」
于「底层静态段们」
于(「缀」于(「址」与「文」与「字节」)于(「读引用」于「底层静态段们」))
而
「址」
)
也。
「低层查串表」乃
化(「列」于(「字符串」合「整数」))而
化「字符串」而
(「或可有」于「整数」)
也。
「低层查串表」者会「表」而会「键」而
鉴「表」而
有「罄」则「可无」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于「键」则「可有」于(「首」中「一」)否则「低层查串表」于「尾」于「键」
也。
「低层查定义表」乃
化(「列」于(「字符串」合「低层项」))而
化「字符串」而
(「或可有」于「低层项」)
也。
「低层查定义表」者会「表」而会「键」而
鉴「表」而
有「罄」则「可无」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于「键」则「可有」于(「首」中「一」)否则「低层查定义表」于「尾」于「键」
也。
「低层查值环」乃
化(「列」于(「字符串」合「低层值」))而
化「字符串」而
(「或可有」于「低层值」)
也。
「低层查值环」者会「表」而会「键」而
鉴「表」而
有「罄」则「可无」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于「键」则「可有」于(「首」中「一」)否则「低层查值环」于「尾」于「键」
也。
「低层取整值们」乃
化(「列」于「低层值」)而
(「或可有」于(「列」于「整数」))
也。
「低层取整值们」者会「值们」而
鉴「值们」而
有「罄」则「可有」于(「罄」授以「整数」)
或有「缀」于「首」于「尾」则(
鉴「首」而
有「值整」于「数」则(
鉴「低层取整值们」于「尾」而
有「可有」于「余」则
「可有」于(「缀」于「数」于「余」)
或有「可无」则
「可无」授以(「列」于「整数」)
)
或有「值串」于「文」则
「可无」授以(「列」于「整数」)
)
也。
「:文言:外部调用之可于编译时求者:静态串、声明与纯算。汉语:编译期可求值的外部调用:静态串分配、内存与数据区声明、纯整数运算。:」
「低层求值外」乃化「字符串」而化(「列」于「低层值」)而「低层值」也。
「低层求值外」者会「名」而会「值们」而
若「串相等」于「名」于『底层_静态串』则(
鉴「值们」而
有(「列」【「值串」于「文」】)则
「值整」于(「低层分配静态串」于「文」)
或有「其他」则
「低层出错」授以「低层值」于『静态串的实参必须是字符串字面』
)
否则若「串相等」于「名」于『声明:内存』则(
鉴「值们」而
有(「列」【「值整」于「初」,「值整」于「大」】)则(
若(「不等于」于(「长度」授以「整数」于(「读引用」于「底层内存声明」))于「零」)则
「低层出错」授以「低层值」于『内存只能声明一次』
否则
虑「无」者
「写引用」于「底层内存声明」于(「列」【「初」,「大」】)
而
「值整」于「零」
)
或有「其他」则
「低层出错」授以「低层值」于『声明内存需要初始页数与最大页数两个整数』
)
否则若「串相等」于「名」于『声明:数据区』则(
鉴「值们」而
有(「列」【「值整」于「起」,「值整」于「止」】)则(
若(「大于」于(「读引用」于「底层静态止」)于「零」)则
「低层出错」授以「低层值」于『数据区只能声明一次』
否则
若(「或者」于(「小于」于「起」于「零」)于(「非」于(「小于」于「起」于「止」)))则
「低层出错」授以「低层值」于『数据区须满足 0 ≤ 起 < 止』
否则
虑「无」者「写引用」于「底层静态基」于「起」
而
虑「无」者「写引用」于「底层静态止」于「止」
而
虑「无」者「写引用」于「底层静态顶」于「起」而
「值整」于「零」
)
或有「其他」则
「低层出错」授以「低层值」于『声明数据区需要起止两个整数』
)
否则若「低层是纯算名」于「名」则(
鉴「低层取整值们」于「值们」而
有「可有」于「数们」则(
鉴「低层纯算」于「名」于「数们」而
有「可有」于「果」则「值整」于「果」
或有「可无」则
「低层出错」授以「低层值」于(『编译期整数运算无定义(如除以零):』附「名」)
)
或有「可无」则
「低层出错」授以「低层值」于(『编译期运算需要整数实参:』附「名」)
)
否则
「低层出错」授以「低层值」于(『不是编译期可求值的外部调用:』附「名」)
也。
「:文言:求闭项之值。汉语:在给定的值环境中求简树的编译期值;引用顶层常量时调用 `取常` 函数(由 `低层取常量` 传入自身,以便互递归)。:」
「低层求值」乃
化(化「字符串」而「整数」)而
化(「列」于(「字符串」合「低层值」))而
化「低层项」而
「低层值」
也。
「低层求值」者会「取常」而会「境」而会「项」而
鉴「项」而
有「项整」于「数」则「值整」于「数」
或有「项串」于「文」则「值串」于「文」
或有「项局」于「名」则(
鉴「低层查值环」于「境」于「名」而
有「可有」于「值」则「值」
或有「可无」则
「低层出错」授以「低层值」于(『编译期求值遇到未绑定的变量:』附「名」)
)
或有「项引」于「文件」于「名」则
「值整」于(「取常」于(「文件」附『#』附「名」))
或有「项令」于「名」于「值」于「体」则
「低层求值」
于「取常」
于(「缀」于(「名」与(「低层求值」于「取常」于「境」于「值」))于「境」)
于「体」
或有「项若」于「条」于「真」于「假」则(
鉴「低层求值」于「取常」于「境」于「条」而
有「值整」于「数」则(
若「不等于」于「数」于「零」则「低层求值」于「取常」于「境」于「真」否则「低层求值」
于「取常」于「境」于「假」
)
或有「值串」于「文」则
「低层出错」授以「低层值」于『条件不能是字符串』
)
或有「项外」于「名」于「参们」则
「低层求值外」
于「名」
于(「态射」授以「低层项」授以「低层值」于「参们」于(会「参」而「低层求值」于「取常」于「境」于「参」))
或有「其他」则
「低层出错」授以「低层值」于(『不是编译期常量:』附(「低层项表示」于「项」))
也。
「:文言:求顶层值之常量,随用随算,记之以免重算,环则止。汉语:`键` 是 文件#名。顶层值定义在 `底层值定义表` 中;求值结果必须是整数;求值中再引用自己是循环定义。:」
「低层取常量」乃化「字符串」而「整数」也。
「低层取常量」者会「键」而
鉴「低层查串表」于(「读引用」于「底层常量表」)于「键」而
有「可有」于「值」则「值」
或有「可无」则(
鉴「低层查定义表」于(「读引用」于「底层值定义表」)于「键」而
有「可无」则
「低层出错」授以「整数」
于(『引用的顶层定义不是编译期常量:』附「键」)
或有「可有」于「项」则
若「存在吗」授以「字符串」
于(会「他」而「串相等」于「他」于「键」)
于(「读引用」于「底层求值中」)则
「低层出错」授以「整数」于(『顶层常量的定义循环:』附「键」)
否则
虑「无」者
「写引用」
于「底层求值中」
于(「缀」于「键」于(「读引用」于「底层求值中」))
而
虑「结果」者
「低层求值」
于「低层取常量」
于(「罄」授以(「字符串」合「低层值」))
于「项」
而
虑「无」者
「写引用」
于「底层求值中」
于(「滤」授以「字符串」
于(会「他」而「非」于(「串相等」于「他」于「键」))
于(「读引用」于「底层求值中」))而
鉴「结果」而
有「值整」于「数」则(
虑「无」者
「写引用」
于「底层常量表」
于(「缀」于(「键」与「数」)于(「读引用」于「底层常量表」))
而
「数」
)
或有「值串」于「文」则
「低层出错」授以「整数」
于(『顶层值定义不能是字符串,请用静态串取其地址:』附「键」)
)
也。
「低层查串串」乃
化(「列」于(「字符串」合「字符串」))而
化「字符串」而
(「或可有」于「字符串」)
也。
「低层查串串」者会「表」而会「键」而
鉴「表」而
有「罄」则「可无」
或有「缀」于「首」于「尾」则
若「串相等」于(「首」中「零」)于「键」则「可有」于(「首」中「一」)否则「低层查串串」于「尾」于「键」
也。
「:文言:循别名而至其本。汉语:沿别名链找到最终的定义名;有环则止于环上某点(至多追十六步)。:」
「低层解别名」乃化「字符串」而「字符串」也。
「低层解别名」者会「名」而
递归虑「追」其化「整数」而化「字符串」而「字符串」者会「步」而会「现」而
若「小于」于「步」于「一」则「现」
否则
鉴「低层查串串」于(「读引用」于「底层别名表」)于「现」而
有「可有」于「目标」则
「追」于(「减」于「步」于「一」)于「目标」
或有「可无」则
「现」
而
「追」于「一六」于「名」
也。