赋值语句的翻译

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 的值。

下一个主题解析器