实验报告四:中间代码生成
一、实验目的
通过在词法分析,语法分析程序的基础上,将S语言翻译成中间代码,认识中间代码的表示形式和生成中间代码的原理和技巧,掌握对简单赋值语句的翻译过程,从而达到对编译器的编译原理有更深的理解,提高代码能力和代码修养。
二、实验要求
根据下列S语言的语法规则,翻译S语言,生成中间代码
(1) <程序>→[<常量说明>][<变量说明>]<语句>
(2) <常量说明>→Const <常量定义>{,<常量定义>};
(3) <常量定义>→<标识符>=<无符号整数>
(4) <无符号整数>→<数字>{<数字>}
(5) <字母>→a|b|c| … |z
(6) <数字>→0|1|2| … |9
(7) <标识符>→<字母>{<字母>|<数字>}
(8) <变量说明>→Var <标识符>{,<标识符>};
(9) <语句>→<赋值语句>|<条件语句>|<当循环语句>|<复合语句>|ε
(10) <赋值语句>→<标识符>=<表达式>;
(11) <表达式>→[+|-]<项>{<加法运算符><项>}
(12) <项>→<因子>{<乘法运算符><因子>}
(13) <因子>→<标识符>|<无符号整数>|‘(’<表达式>‘)’
(14) <加法运算符>→+|-
(15) <乘法运算符>→* |/
(16) <条件语句>→if <条件> then <语句>| if <条件> then <语句> else
<语句>
(17) <条件>→<表达式><关系运算符><表达式>
(18) <关系运算符>→==|<=|<|>|>=|<>
(19) <当循环语句>→while <条件> do <语句>
(20) <复合语句>→begin <语句>{;<语句>} end
三、实验过程分析
中间代码生成设计思想基本与语法分析一致,其中的区别在与第二步
1. 采用多个bool类型函数:
a) 判断字符类型(大小写)
b) 判断数字
c) 判断标识符(Constant, Var等)、并更进一步,识别连续定义(形如 Constant a, b)
d) 判断表达式、赋值
e) 判断if、while循环
2. 中间代码生成
四、结果展示
1、输入样本(读入由词法分析产生的file_out.txt):
…………
具体实验报告及代码见下载链接
其他实验报告(PL0,词法分析,语法分析,中间代码生成)请访问本人博客