减法为什么从左往右

1 - 2 - 3 解析成 (1-2)-3 而不是 1-(2-3)。sum 函数里做到这一点靠的是【0】。

开始练习 →

括号怎么改变结合

玩具语言的文法(八节共用):program := stmt*;stmt := "let" IDENT "=" expr ";" | IDENT "=" expr

开始练习 →

四个运算符各在哪一层

(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 用完整 parse

开始练习 →

补全:term 层

(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 补全 term:先

开始练习 →

补全:sum 层要左结合

(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 补全 sum_:先

开始练习 →

补全:factor 里的括号

(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 补全 factor

开始练习 →

补全:comparison 层

(每道题开头都有同一段:T() 是上一站 lexer 的替身——源码里 token 之间用空格分开,它切成 (kind, text, line, col);show() 把树写成一行:二元运算全加括号,语句之间用 |。) 补全 compar

开始练习 →

语句和表达式差在哪

rate >= 3 是表达式,total = rate >= 3 ; 是语句。语句和表达式的差别是【0】。

开始练习 →

块为什么要花括号

玩具语言的文法(八节共用):program := stmt*;stmt := "let" IDENT "=" expr ";" | IDENT "=" expr

开始练习 →

else 是可选的

玩具语言的文法(八节共用):program := stmt*;stmt := "let" IDENT "=" expr ";" | IDENT "=" expr

开始练习 →