补全:登记一个名字
(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 declare(sym, name, typ, lin
阅读更多 →
三句 let 建出的表
(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 贯穿的源码: let rate = 12 ; let msg
阅读更多 →
为什么用字典
符号表用字典而不是列表来存,最直接的原因是【0】。
阅读更多 →
查表查不到
走到 total = 0 ;,在符号表里查 total 查不到。这意味着【0】。
阅读更多 →
什么时候登记
一句句往下读,读到一个名字停住 ? 符号表里的一项是在【0】的时候登记进去的。
阅读更多 →
符号表里存什么
语义分析边走边维护一张「符号表」。表里每一项至少要存【0】。
阅读更多 →
定义过的和用到的
(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 用 compiler_03 留下的 names() 摘出上一
阅读更多 →
语义分析交出什么
语义分析走完整棵树之后,交给下一站的是【0】。
阅读更多 →
语义分析的输入
语义分析拿到手的东西是【0】。
阅读更多 →
parser 为什么查不出
一句句往下读,读到一个名字停住 ? parser 建 total = rate >= 3 的树时,手边只有当前的 token。它查不出 total 未声明,根本原因是【0】。
阅读更多 →