【编译原理】4 语义分析和中间代码生成

1 属性文法

【编译原理】4 语义分析和中间代码生成

2 三地址代码的具体实现(中间代码)

【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成

3 表达式及赋值语句的翻译

3.1 简单算术表达式和赋值语句的翻译

  • 语义子程序(在归约的同时执行)所涉及的语义变量、语义函数说明:
  1. 对非终结符E(算术表达式)定义语义变量E.place,即用E.place表示存放E值的变量名在符号表中的入口地址或临时变量名的整数码
  2. 定义语义函数newtemp(),即每次调用newtemp()时都将回送一个代表新临时变量的整数码
    临时变量名按产生的顺序可设为: T 1 、 T 2 、 ⋯ T_1 、T_2 、⋯ T1T2
  3. 定义语义函数emit(op,arg1,arg2,result):产生一个四元式并填入四元式表中
  4. 定义语义函数lookup(i.name):审查i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL

3.2 布尔表达式的翻译

【编译原理】4 语义分析和中间代码生成

  1. 计算布尔表达式的值的方式
    (1)仿照计算算术表达式的方法,按布尔表达式的运算顺序一步步地计算出真假
    (2)根据布尔运算的特点实施某种优化,省略不影响运算结果的运算
  2. 确定一个表达式的真假出口
    【编译原理】4 语义分析和中间代码生成
    【编译原理】4 语义分析和中间代码生成
  3. 处理E.tc和E.fc引入的语义变量和函数
    【编译原理】4 语义分析和中间代码生成
    【编译原理】4 语义分析和中间代码生成

4 控制语句的翻译

4.1 条件语句if的翻译

【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成

4.2 循环语句的翻译

【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成
【编译原理】4 语义分析和中间代码生成