赋值语句的翻译2025年1月12日 | 1分钟阅读 在语法制导翻译中,赋值语句主要处理表达式。表达式可以是实数、整数、数组和记录类型。 考虑以下语法 上述语法的翻译方案如下 产生式规则 | 语义动作 |
---|
S → id :=E | {p = look_up(id.name); 如果 p ≠ nil 那么 Emit (p = E.place) 否则 Error; } | E → E1 + E2 | {E.place = newtemp(); Emit (E.place = E1.place '+' E2.place) } | E → E1 * E2 | {E.place = newtemp(); Emit (E.place = E1.place '*' E2.place) } | E → (E1) | {E.place = E1.place} | E → id | {p = look_up(id.name); 如果 p ≠ nil 那么 Emit (p = E.place) 否则 Error; } |
- p 返回符号表中 id.name 的条目。
- Emit 函数用于将三地址代码附加到输出文件。否则它将报告一个错误。
- newtemp() 是一个用于生成新的临时变量的函数。
- E.place 保存 E 的值。
|