交付:让语言认得一元负号

场景:~/parser/parser.py 还不认一元负号:src/neg.toy 里的 - a 会报「期待表达式」。 任务:在 factor 里加一支「- factor」,树里写成 (-x):- a * 2 要拼成 ((-a)*2),-

开始练习 →

树建好了,还可能错在哪

上一站的贯穿源码第三句 total = rate >= 3 ; 语法完全合法,parser 建出了树。可它有个问题:total 从来没有声明过。这一类问题叫【0】。

开始练习 →

哪一条是语义错

下面四种毛病里,parser 查不出、要靠语义分析才能发现的是【0】。

开始练习 →

parser 为什么查不出

一句句往下读,读到一个名字停住 ? parser 建 total = rate >= 3 的树时,手边只有当前的 token。它查不出 total 未声明,根本原因是【0】。

开始练习 →

语义分析的输入

语义分析拿到手的东西是【0】。

开始练习 →

语义分析交出什么

语义分析走完整棵树之后,交给下一站的是【0】。

开始练习 →

定义过的和用到的

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 用 compiler_03 留下的 names() 摘出上一站那段源码里「let 定义的名字」和「用

开始练习 →

符号表里存什么

语义分析边走边维护一张「符号表」。表里每一项至少要存【0】。

开始练习 →

什么时候登记

一句句往下读,读到一个名字停住 ? 符号表里的一项是在【0】的时候登记进去的。

开始练习 →

查表查不到

走到 total = 0 ;,在符号表里查 total 查不到。这意味着【0】。

开始练习 →