编译步骤/类型标注擦除/模式匹配展开。豫
yuyan · 637 行 · 34644 字节 · 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 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637
「:展开模式匹配成Decision Tree:」
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
。
寻观「编译器核心」之「编译数据」之「编译配置」之「编译期输出」之书。
寻观「编译器核心」之「编译步骤」之「类型标注擦除」之「模式匹配消除」之书。
寻观「编译器核心」之「顺序标识符」之「顺序标识符」之书。
「检查模式头一致」乃化「字符串」而化「节点名称」而化「节点名称」而「爻」也。
「检查模式头一致」者会「调试」而会「名甲」而会「名乙」而
鉴「名甲」与「名乙」而
有(「展开后唯一构造器节点」于「序数甲」)与(「展开后唯一构造器节点」于「序数乙」)则
(「等」于「序数甲」于「序数乙」)
或有(「整数节点」于「数甲」)与(「整数节点」于「数乙」)则
(「等」于「数甲」于「数乙」)
或有(「字符串节点」于「串甲」)与(「字符串节点」于「串乙」)则
(「串相等」于「串甲」于「串乙」)
或有(「内建节点」于「内建爻阳」)与(「内建节点」于「内建爻阳」)则
「阳」
或有(「内建节点」于「内建爻阴」)与(「内建节点」于「内建爻阴」)则
「阳」
或有(「内建节点」于「内建爻阴」)与(「内建节点」于「内建爻阳」)则
「阴」
或有(「内建节点」于「内建爻阳」)与(「内建节点」于「内建爻阴」)则
「阴」
或有「元组构造节点」与「元组构造节点」则
「阳」
或有「其他」则
「发生事故」
于「调试」附『,67,模式不一致,检查类型检查:』附(「节点名称表示」于「名甲」)附
『,』附(「节点名称表示」于「名乙」)
也。
「收集模式头」乃
化(「列」于(「节点名称」合「整数」 「:参数个数:」
))而化(「列」于「表达式」)而「列」于(「节点名称」合「整数」)也。
「收集模式头」者会「已有」而会「待处理」而
鉴「待处理」而
有「罄」则「已有」
或有(「缀」于「当前」于「剩余」)则(
鉴「当前」而
有(「式节点」于(「模式匹配新变量」于「名」)于「参」)则
(「收集模式头」于「已有」于「剩余」)
或有(「式节点」于(「节点」)于「参数」)则(
若((「存在吗」授以(「节点名称」合「整数」))
于(会
「节名及数」而
若(「检查模式头一致」于『59』于(「节点」)于(「二对子取零」于「节名及数」))
则
(
若(「等」于(「节名及数」中「一」)于(「长度」于「参数」))
则
「阳」
否则
「发生事故」于『参数长度不匹配62』
)
否则
(「阴」))于「已有」)
则
(「收集模式头」于「已有」于「剩余」)
否则
(「收集模式头」
于((「附加」授以(「节点名称」合「整数」))
于「已有」
于(((「列」于(「节点名称」合「整数」))也((「列」【(「节点」与(「长度」于「参数」))】)))))
于「剩余」)
)
或有「其他」则
「发生事故」于『50不支持的模式匹配项』附(「表达式表示」于「当前」)
)
也。
「: 检查模式头全部统一乃化节点名称列而有也。
检查模式头全部统一者会名们而
鉴名们而
有【】则元
或有「第一名」衔「后」则
((有列也态射于(检查模式头一致于第一名)于后);元)也。 :」
「:TODO Converage
TODO 减少Code Copying:」
「展开模式匹配」乃
化「表达式」 「:报错信息:」而
化(「列」于「表达式」) 「:待匹配的:」而
化(「列」于((「列」于「表达式」)合「表达式」)) 「:可能匹配分支:」而
「表达式」 「:转换过的模式匹配表达式:」
也。
「展开模式匹配」者会「报错式」而会「待匹配」而会「可能匹配」而
虑「递归」者
(化(「列」于「表达式」)而化(「列」于((「列」于「表达式」)合「表达式」))而「表达式」也
会「后待匹配」而会「后可能匹配」而
「展开模式匹配」于「报错式」于「后待匹配」于「后可能匹配」
)而
虑「无」者
(「编译调试打印行」
于『pattern_expand』
于(会「无」而
『正在展开模式匹配:』附(「间合」于『||||』于((「态射」)于「待匹配」于「表达式表示」))附
『「:换行:」可能分支:共』附(「整数表示」于(「长度」于「可能匹配」))附『个:』附(「间合」
于
『*********』于((「打表态射」授以((「列」于「表达式」)合「表达式」)授以「字符串」)
于
「可能匹配」于(会
「可能匹配分支们」而「间合」
于『||||』
于((「态射」)
于(((「列」于「表达式」)合「表达式」也「可能匹配分支们」)中「零」)
于
「表达式表示」))))))而
鉴「待匹配」而
有「罄」则(
若(「大于」于(「长度」于「可能匹配」)于「零」)
则
((「第N个」授以((「列」于「表达式」)合「表达式」))于「零」于「可能匹配」)中「一」
否则
「报错式」
)
或有「非空待匹配」则(
虑「所有模式头」者
「收集模式头」
于「罄」
于((「态射」)
于「可能匹配」
于(会「模式」而(「第N个」授以「表达式」)于「零」于(「二对子取零」于「模式」)))
而
虑「匹配分支们」者
(「态射」授以(「节点名称」合「整数」)授以「表达式」)
于「所有模式头」
于(会
「模式头及参数长」
而
虑「符合分支」者
「滤态射」授以((「列」于「表达式」)合「表达式」)授以((「列」于「表达式」)合「表达式」)
于(会
「当前」而
鉴((「第N个」授以「表达式」)于「零」于(「二对子取零」于「当前」))而
有(「式节点」于(「模式匹配新变量」于「变量名」)于「参」)
则(
虑「新变量名」者
(「打表」授以「字符串」)
于(「二对子取一」于「模式头及参数长」)
于(会「数」而「下个字符序数」于『新参数』附(「整数表示」于「数」)附『_』)
而
(「可有」
于(((「附加」授以「表达式」)
于((「态射」)
于
「新变量名」于(会「名」而「式节点」
于(「模式匹配新变量」于「名」)
于(((「列」于「表达式」)也((「列」【(「式节点」于「待定节点」于「罄」)】))))))
于((「放」授以「表达式」)于「一」于(「二对子取零」于「当前」))
)
与(「式节点」
于
「内联虑」于((「列」【
(
鉴(「模式头及参数长」中「零」)而
有(「展开后唯一构造器节点」于「序数甲」)则(「展开展开后唯一构造器节点」
于((「式节点」
于(「模式头及参数长」中「零」)
于((「态射」)于「新变量名」于「自由变量」))))
或有「其他」则((「式节点」
于(「模式头及参数长」中「零」)
于((「态射」)于「新变量名」于「自由变量」))
)
),
(「进行抽象」于「变量名」于(「二对子取一」于「当前」))
】)))))
)
或有(「式节点」于(「其他头」)于「参数」)则(
若(「检查模式头一致」于『116』于(「二对子取零」于「模式头及参数长」)于「其他头」)则(「可有」
于(((「附加」授以「表达式」)
于「参数」
于((「放」授以「表达式」)于「一」于(「二对子取零」于「当前」))
)与(「二对子取一」于「当前」)))
否则
(「可无」)
))于「可能匹配」
而
虑「递归分支」者「符合分支」而
虑「无」者
(「编译调试打印行」
于『pattern_expand』
于(会「无」而
『递归匹配模式头:』附(「节点名称表示」于(「二对子取零」于「模式头及参数长」))附
『。。。参数长:』附(「整数表示」于(「二对子取一」于「模式头及参数长」))))
而
鉴「模式头及参数长」中「零」而
有(「展开后唯一构造器节点」于「构造序数」)则
「式节点」
于(「唯一构造器模式匹配分支」于「构造序数」)
于((「列」【
(「构造抽象」
于
『构造式元组』于(会「构造式元组」
而
虑「新待匹配」者
((「打表」授以「表达式」)
于(「模式头及参数长」中「一」)
于(会「序数」而「式节点」于(「元组解构节点」于「序数」)于((「列」【(「自由变量」于「构造式元组」)】)))
)
而
「递归」于(「附加」于「新待匹配」于(「放」于「一」于「待匹配」))于
「递归分支」))
】)
)
或有(「整数节点」于「数」)则
「式节点」
于(「常量模式匹配分支」)
于((「列」【
(「式节点」于(「整数节点」于「数」)于「罄」),
(「递归」于(「放」于「一」于「待匹配」)于「递归分支」)
】)
)
或有(「字符串节点」于「串」)则
「式节点」
于(「常量模式匹配分支」)
于((「列」【
(「式节点」于(「字符串节点」于「串」)于「罄」),
(「递归」于(「放」于「一」于「待匹配」)于「递归分支」)
】)
)
或有(「内建节点」于「内建爻阳」)则
「式节点」
于(「常量模式匹配分支」)
于((「列」【
(「式节点」于(「内建节点」于「内建爻阳」)于「罄」),
(「递归」于(「放」于「一」于「待匹配」)于「递归分支」)
】)
)
或有(「内建节点」于「内建爻阴」)则
「式节点」
于(「常量模式匹配分支」)
于((「列」【
(「式节点」于(「内建节点」于「内建爻阴」)于「罄」),
(「递归」于(「放」于「一」于「待匹配」)于「递归分支」)
】)
)
或有「元组构造节点」则
「式节点」
于(「变量模式匹配分支」)
于((「列」【
(「构造抽象」
于『构造式元组』
于(会
「构造式元组」
而
虑「新待匹配」者
((「打表」授以「表达式」)
于(「模式头及参数长」中「一」)
于(会「序数」而「式节点」于(「元组解构节点」于「序数」)于((「列」【(「自由变量」于「构造式元组」)】)))
)
而
「递归」
于(「附加」于「新待匹配」于(「放」于「一」于「待匹配」))
于
「递归分支」))
】)
))
而
虑「默认分支」者
(
虑「新变量名」者「下个字符序数」于『模式匹配默认变量名』
而
虑「递归分支参数」者
(「滤态射」授以((「列」于「表达式」)合「表达式」)授以((「列」于「表达式」)合「表达式」))
于(会「当前」而鉴((「第N个」授以「表达式」)于「零」于(「二对子取零」于「当前」))而
有(「式节点」于(「模式匹配新变量」于「变量名」)于「参」)则(「可有」
于(((「放」授以「表达式」)于「一」于(「二对子取零」于「当前」))
与(「式有名替换」于(「自由变量」于「新变量名」)于「变量名」于(「二对子取一」于「当前」))))
或有(「式节点」于(「其他头」)于「参数」)则(「可无」))
于「可能匹配」
而
(「或可有」于「表达式」也鉴「递归分支参数」而
有「罄」则「可无」
或有「其他」
则(
虑「无」者
(「编译调试打印行」
于『pattern_expand』
于(会「无」而『递归默认模式匹配:』附(「间合」
于『||||』
于((「态射」)于「待匹配」于「表达式表示」))附
『(可能分支:共』附(「整数表示」于(「长度」于「可能匹配」))
附『个)』))
而
(「可有」
于(「式节点」
于(「变量模式匹配分支」)
于((「列」【
(「进行抽象」于「新变量名」于(「递归」于(「放」于「一」于「待匹配」)于「递归分支参数」))
】))))
))
)
而
(
「:展开爻匹配,并添加默认:」
鉴「匹配分支们」而
有「罄」则(
鉴「默认分支」而
有「可无」则
「发生事故」
于
『229不应当为零,因为待匹配分支不为零,其必属于匹配分支,或必属于默认分支』
或有(「可有」于「首默认分支」)则(「式节点」
于「模式匹配」
于((「列」【((「第N个」授以「表达式」)于「零」于「待匹配」),「首默认分支」】)))
)
或有(「缀」
于(「式节点」
于(「常量模式匹配分支」)
于((「列」【(「式节点」于(「内建节点」于「内建爻阳」)于「罄」),「阳结果」】)))
于
「其余匹配分支」)则(
鉴「其余匹配分支」而
有「罄」则((
鉴「默认分支」而
有「可无」则(「式节点」
于「内联虑」
于((「列」【
((「第N个」授以「表达式」)于「零」于「待匹配」),
(「构造抽象」
于『爻式』
于(会「爻式名」而「式节点」
于「爻分支节点」
于(「列」【「自由变量」于「爻式名」,「阳结果」,「报错式」】)))
】)))
或有(「可有」于(「式节点」于(「变量模式匹配分支」)于((「列」【「阴参」】))))
则(「式节点」
于「内联虑」
于((「列」【
((「第N个」授以「表达式」)于「零」于「待匹配」),
(「构造抽象」
于『爻式』
于(会「爻式名」而「式节点」
于「爻分支节点」
于(「列」【
「自由变量」于「爻式名」,
「阳结果」,
「式替换」
于(「自由变量」于「爻式名」)于「阴参」
】)))
】)))
或有「其他分支」则(「发生事故」于『默认分支格式不正确』)
)
)
或有((「列」【
(「式节点」
于(「常量模式匹配分支」)
于((「列」【(「式节点」于(「内建节点」于「内建爻阴」)于「罄」),「阴结果」】)))
】))
则(「式节点」
于「爻分支节点」
于(「列」【(「第N个」授以「表达式」)于「零」于「待匹配」,「阳结果」,「阴结果」】))
或有「其他」则
「发生事故」于『常量匹配分支如果是爻,不应该有超过两个分支』
)
或有(「缀」
于(「式节点」
于(「常量模式匹配分支」)
于((「列」【(「式节点」于(「内建节点」于「内建爻阴」)于「罄」),「阴结果」】)))
于
「其余匹配分支」)则(
鉴「其余匹配分支」而
有「罄」则((
鉴「默认分支」而
有「可无」则(「式节点」
于「内联虑」
于((「列」【
((「第N个」授以「表达式」)于「零」于「待匹配」),
(「构造抽象」
于『爻式』
于(会「爻式名」而「式节点」
于「爻分支节点」
于(「列」【「自由变量」于「爻式名」,「报错式」,「阴结果」】)))
】)))
或有(「可有」于(「式节点」于(「变量模式匹配分支」)于((「列」【「阳参」】))))
则(「式节点」
于「内联虑」
于((「列」【
((「第N个」授以「表达式」)于「零」于「待匹配」),
(「构造抽象」
于『爻式』
于(会「爻式名」而「式节点」
于「爻分支节点」
于(「列」【
「自由变量」于「爻式名」,
「式替换」
于(「自由变量」于「爻式名」)于「阳参」,
「阴结果」
】)))
】)))
或有「其他分支」则(「发生事故」于『默认分支格式不正确』)
)
)
或有((「列」【
(「式节点」
于(「常量模式匹配分支」)
于((「列」【(「式节点」于(「内建节点」于「内建爻阳」)于「罄」),「阳结果」】)))
】))
则(「式节点」
于「爻分支节点」
于(「列」【(「第N个」授以「表达式」)于「零」于「待匹配」,「阳结果」,「阴结果」】))
或有「其他」则
「发生事故」于『常量匹配分支如果是爻,不应该有超过两个分支』
)
或有((「列」【(「式节点」于(「变量模式匹配分支」)于「分支」)】))则(「式节点」
于「模式匹配」
于(「缀」于((「第N个」授以「表达式」)于「零」于「待匹配」)于「匹配分支们」))
或有(「缀」于(「式节点」于(「变量模式匹配分支」)于「分支」)于「其他」)则
(「发生事故」于『只可以有一个变量模式匹配分支』)
或有「其他」则(
鉴「默认分支」而
有「可无」
则(
虑「报错默认分支」者
(「式节点」于(「变量模式匹配分支」)于((「列」【(「进行无名抽象」于「报错式」)】)))
而
虑「所有分支」者
「附加」于「匹配分支们」
于((「列」【「报错默认分支」】))
而
「式节点」
于「模式匹配」
于(「缀」于((「第N个」授以「表达式」)于「零」于「待匹配」)于「所有分支」)
)
或有(「可有」于(「首默认」))
则(
虑「所有分支」者
「附加」于「匹配分支们」
于((「列」【「首默认」】))
而
「式节点」
于「模式匹配」
于(「缀」于((「第N个」授以「表达式」)于「零」于「待匹配」)于「所有分支」)
)
)
)
)
也。
「:将一个归一过的模式匹配变成决策树(Decision Tree):」
「展开模式匹配内部顶层」乃化「字符串」而化「表达式」而「表达式」也。
「展开模式匹配内部顶层」者会「错误信息」而会「式」而
鉴「式」而
有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))
则(
虑「展开后结果」者
「展开模式匹配」
于(「式节点」
于(「顺序执行节点」)
于(「缀」
于(「式节点」
于(「解析后外部调用节点无类型」于『豫言_打印通用值』)
于((「列」【(「式节点」于(「字符串节点」于『模式匹配失败式』)于「罄」),「分析式」】)))
于(「缀」
于(「添加函数调用参数」
于(「式节点」于(「解析后外部调用节点无类型」于『豫言_获取当前异常处理器』)于「罄」)
于
「显式」
于(「式节点」于(「字符串节点」于(『模式匹配错误,缺少分支:』附「错误信息」))于「罄」)) 「:仅取前100字符:」
于「罄」)))
于((「列」【「分析式」】))
于((「态射」)
于「分支们」
于(会「分支式」而
鉴「分支式」而
有(「式节点」于(「模式匹配分支」)于((「列」【「模式」,「结果」】)))则
(((「列」于「表达式」)也((「列」【「模式」】))))与「结果」
或有「其他」则
「发生事故」于『期待模式匹配分支』
)
)而
虑「无」者
(「编译调试打印行」
于
『pattern_expand』
于(会「无」而『展开完成,结果:』附(「表达式表示」于「展开后结果」)附『友好表示:「:换行:」』附(「抽象语法友好表示顶层」
于
「展开后结果」)))而
虑「最终结果」者
(
鉴「展开后结果」而
有(「式节点」于「模式匹配」于「参」)则
(「模式匹配消除」于「展开后结果」)
或有「其他」则(「展开后结果」)
)而
虑「无」者
(「编译调试打印行」
于
『pattern_expand』
于(会「无」而『消除完成,结果:』附(「表达式表示」于「最终结果」)附『友好表示:「:换行:」』附
(「抽象语法友好表示顶层」于「最终结果」)))
而
「最终结果」
)
或有「其他」则
(「发生事故」于『展开模式匹配期待模式匹配』)
也。
「展开模式匹配顶层」乃化「表达式」而「表达式」也。
「展开模式匹配顶层」者会「式」而
鉴「式」而
有(「式节点」于「模式匹配」于(「缀」于「分析式」于「分支们」))
则(
虑「分支续延们」者
「新引用」授以(「列」于(「字符串」合「表达式」))于「罄」而
虑「后分支式们」者
(「打表态射」授以「表达式」授以「表达式」)
于「分支们」
于(会「分支式」而鉴「分支式」而
有(「式节点」于(「模式匹配分支」)于((「列」【「模式」,「结果」】)))
则(
虑「模式新变量们」者
(「滤」授以「字符串」)
于(会「新变量」而「自由变量在式出现」于「新变量」于「结果」)
于(「读取模式匹配新变量」于「模式」)而
虑「抽象名」
者
「下个字符序数」于
『匹配展开函数』
而
虑「无」者
(
若((「存在吗」授以「字符串」)
于(会「变量名」而「串相等」于「抽象名」于「变量名」)
于((「附加」授以「字符串」)于「模式新变量们」于(「读取式自由变量」于「结果」)))则
「发生事故」
于
『148重复名:』附「抽象名」附『,』附(「表达式表示」于「式」)
否则
「元」
)
而
虑「无」者
((「列引用前衔」授以(「字符串」合「表达式」))
于
「分支续延们」
于(「抽象名」与(
虑「分支结果」者
「式节点」
于(「拉姆达抽象」于「显式」)
于( 「:这个地方理应用续延,但因为续延无法直接返回,所以还是用函数:」
(((「列」于「表达式」)也((「列」【
(「构造抽象」
于『所有新变量』
于(会「所有新变量」而(「从左折叠带序数」授以「字符串」授以「表达式」)
于「零」
于(会「序数」而会「新变量名」而会「已有式」而「式节点」
于
「内联虑」
于(((「列」于「表达式」)也((「列」【
(「式节点」
于(「元组解构节点」于「序数」)
于(((「列」于「表达式」)也((「列」【(「自由变量」于「所有新变量」)】))
))),
(「进行抽象」于「新变量名」于「已有式」)
】)
)
)))于
「结果」于「模式新变量们」))
】)
)
)
))
而
虑「无」者
(「编译调试打印行」
于『pattern_expand_branches』
于(会「无」而『分支名:』附(「抽象名」)附『分支内容:「:换行:」』附(「抽象语法友好表示顶层」
于「分支结果」)))
而
「分支结果」
))
)
而
虑「结果」者
(「式节点」
于(「模式匹配分支」)
于(((「列」于「表达式」)也((「列」【
「模式」,
(「添加函数调用参数」
于(「自由变量」于「抽象名」)
于「显式」
于(「式节点」于「元组构造节点」于((「态射」)于「模式新变量们」于「自由变量」)))
】)
)
)))
而
「结果」
)
或有「其他」则
「发生事故」于『期待模式匹配分支』)
而
(「从左折叠」授以(「字符串」合「表达式」)授以「表达式」)
于(会「抽象名及抽象式」而会「已有式」
而
虑「抽象名」者「二对子取零」于
「抽象名及抽象式」
而
虑「抽象式」者「二对子取一」于
「抽象名及抽象式」
而
虑「出现次数」者「自由变量在式出现次数」于
「抽象名」于「已有式」
而
(
若(「等」于「出现次数」于「零」)则
(「非常粗略调试打印行」
于(会「无」而『错误警告:未使用的匹配分支式:』附(「表达式表示」于「抽象式」)附
『,模式匹配:』附(「表达式表示」于「式」));
「已有式」)
否则
(
若(「等」于「出现次数」于「一」)则
(「式有名替换」于「抽象式」于「抽象名」于「已有式」)
否则
(「式节点」
于
「内联虑」
于(((「列」于「表达式」)也((「列」【「抽象式」,(「进行抽象」于(「抽象名」)于「已有式」)】))
)))
)
))
于((「展开模式匹配内部顶层」
于(「获取子字符串」于「零」于「一零零零」于(「表达式表示」于「式」))
于(「式节点」于「模式匹配」于(「缀」于「分析式」于「后分支式们」)))
)
于(「读引用」于「分支续延们」)
)
或有「其他」则
(「发生事故」于『展开模式匹配期待模式匹配』)
也。