个性化阅读
专注于IT技术分析

赋值语句的翻译

在语法定向翻译中, 赋值语句主要处理表达式。表达式的类型可以是实数, 整数, 数组和记录。

考虑语法

S  →    id := E
E    →  E1 + E2
E   →   E1 * E2
E   →   (E1)
E   →   id

以上语法的翻译方案如下:

生产规则 语义动作
S→id:= E {p = look_up(id.name);如果p≠nil, 则发射(p = E.place)其他错误; }
E→E1 + E2 {E.place = newtemp();发射(E.place = E1.place’+’E2.place)}
E→E1 * E2 {E.place = newtemp();发射(E.place = E1.place’*’E2.place)}
E→(E1) {E.place = E1.place}
E→ID {p = look_up(id.name);如果p≠nil, 则发射(p = E.place)其他错误; }
  • p返回符号表中id.name的条目。
  • Emit功能用于将三个地址代码附加到输出文件。否则它将报告错误。
  • newtemp()是用于生成新的临时变量的函数。
  • E.place持有E的值。
赞(0)
未经允许不得转载:srcmini » 赋值语句的翻译

评论 抢沙发

评论前必须登录!