编译原理实验报告四:中间代码生成(PL0,词法分析,语法分析,中间代码生成)

实验报告四:中间代码生成

一、实验目的

       通过在词法分析,语法分析程序的基础上,将S语言翻译成中间代码,认识中间代码的表示形式和生成中间代码的原理和技巧,掌握对简单赋值语句的翻译过程,从而达到对编译器的编译原理有更深的理解,提高代码能力和代码修养。

二、实验要求

       根据下列S语言的语法规则,翻译S语言,生成中间代码

(1) <程序>→[<常量说明>][<变量说明>]<语句>

(2) <常量说明>→Const <常量定义>{,<常量定义>};

(3) <常量定义>→<标识符>=<无符号整数>

(4) <无符号整数>→<数字>{<数字>}

(5) <字母>→a|b|c| … |z

(6) <数字>→0|1|2| … |9

扫描二维码关注公众号,回复: 1703015 查看本文章

(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,词法分析,语法分析,中间代码生成)请访问本人博客



猜你喜欢

转载自blog.csdn.net/boss_crabe/article/details/80760471