交付三:四种语句

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

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

玩具语言的文法(八节共用):program := stmt*stmt := "let" IDENT "=" expr ";" | IDENT "=" expr ";" | "if" "(" expr ")" block ("else" block)? | "while" "(" expr ")" blockblock := "{" stmt* "}"expr := comparisoncomparison := sum ((">=" | "<=" | "==" | "!=" | "<" | ">") sum)?sum := term (("+" | "-") term)*term := factor (("*" | "/") factor)*factor := NUMBER | STRING | IDENT | "(" expr ")"

从零写出 stmt:看开头分 let / if / while / 赋值四路(block 已给)。

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

                        
👩‍🏫
AI
💬 题目评论

全部评论