交付三:四种语句

👁️ 1 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。)

类型只有 num / str / bool:数字是 num,字符串是 str;+ - * / 两边都是 num 得 num,+ 两边都是 str 得 str;比较运算两边同类得 bool;其余是类型不匹配。let 把名字登记进当前作用域,类型取右边;同一作用域重复 let 是重复声明;赋值要求名字已登记、右边类型等于登记的类型;if / while 的条件必须是 bool,块开新作用域。

贯穿的源码:

let rate = 12 ;
let msg = "hi" ;
let total = rate * 3 ;
if ( total >= 30 ) { let big = 1 ; total = total - big ; } else { total = 0 ; }

从零写出 check_stmt(n, scope):let 推断并登记;assign 查表(查不到「未定义「名字」」)、比类型(不等「类型不匹配「登记的」「右边的」」);if / while 条件必须 bool(不是就「条件不是bool「类型」」)、块开新 Scope(check_block 已给)。四种错误文案都和 n04 写过的一字不差。

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论