交付五:五条验收
(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 贯穿的源码(接 c
批量解析时错了该怎么办
对一个目录里的一批源码文件跑 parser,某个文件有语法错误。对使用者最有用的做法是【0】。
从批量输出里抠出数字
真机上 parser.py 对每个文件打一行 prog3.toy: OK 4条语句 或 prog5.toy: 错误 期待「;」遇到「let」@2:1。要在脚本里汇总,先在这里练: lines = ["prog1.toy: OK 3
八个文件一共几条语句
场景:实验机的 ~/parser 里是这条路线的语法分析器 parser.py(开头有用法)和一个目录 src/,里面八个 .toy 源码文件。家目录有一份对照表:八个数各配一个标记。 任务:查出八个文件一共有多少条顶层语句(if / wh
哪个文件有语法错误
场景:~/parser/src 里八个 .toy 文件,其中一个有语法错误,肉眼看八个都像对的。对照表按文件名配了标记。 任务:用 parser.py 找出那个文件,到对照表里查它对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以
错误在第几行第几列
场景:~/parser/src/main.toy 有一处语法错误。对照表列了八个「行:列」位置,各配一个标记。 任务:用 parser.py 查出它报的错误位置,到对照表里查这个位置对应的标记。⚠️ 位置是 parser 报的「遇到」那个词
这条表达式的树长什么样
场景:~/parser/src/expr.toy 里只有一条赋值,右边是一个没有括号的表达式。对照表列了八种加括号的写法,各配一个标记。 任务:查出 parser 把它拼成什么样的树(parser.py 打出来的那一行),到对照表里查它对应
修好 parser 里的规则 bug
场景:~/parser/parser.py 有一个规则 bug:对 src/ 里八个文件跑出来的结果和家目录的 期望.txt 对不上。 任务:只改 parser.py,让 python3 parser.py src/*.toy 的输出和期望
给语言加一个取余运算符
场景:~/parser/parser.py 还不认识 %:跑 src/mod.toy 会报非法字符。 任务:给这门语言加上 %——和 * / 同一优先级、左结合,树里写成 (a%b)。写好后运行 ~/check:它用一份你看不到的文件跑你的
一次跑一批文件,错了别停
场景:~/parser/parser.py 现在只收一个文件,遇到语法错误就抛异常退出。 任务:让它一次收多个文件,对每个文件打一行「文件名: OK N条语句」再逐条打树,或者打一行「文件名: 错误 期待「X」遇到「Y」@行:列」然后继续下