【编译原理】4 语义分析和中间代码生成
第4章 语义分析和中间代码生成
1 属性文法
2 三地址代码的具体实现(中间代码)
3 表达式及赋值语句的翻译
3.1 简单算术表达式和赋值语句的翻译
- 语义子程序(在归约的同时执行)所涉及的语义变量、语义函数说明:
- 对非终结符E(算术表达式)定义语义变量E.place,即用E.place表示存放E值的变量名在符号表中的入口地址或临时变量名的整数码
- 定义语义函数newtemp(),即每次调用newtemp()时都将回送一个代表新临时变量的整数码
临时变量名按产生的顺序可设为: T 1 、 T 2 、 ⋯ T_1 、T_2 、⋯ T1、T2、⋯ - 定义语义函数emit(op,arg1,arg2,result):产生一个四元式并填入四元式表中
- 定义语义函数lookup(i.name):审查i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL
3.2 布尔表达式的翻译
- 计算布尔表达式的值的方式
(1)仿照计算算术表达式的方法,按布尔表达式的运算顺序一步步地计算出真假
(2)根据布尔运算的特点实施某种优化,省略不影响运算结果的运算 - 确定一个表达式的真假出口
- 处理E.tc和E.fc引入的语义变量和函数