小型C语言编译器设计
实验项目指导书
实验目的
1. 构造一小型C语言SimpleC的编译器软件,达到综合理解和运用编译原理课程所讲解的关键过程(词法分析、语法分析、静态语义分析、代码生成)及相关算法的目的。
2. 通过本实验理解和掌握一般编译程序的程序组织方法和测试方法。
实验环境
硬件环境:1台Pentium PC机/人
软件环境:Windows XP/2000/2003、Linux操作系统、Visual C++ 6.0/7.0 C/C++ IDE或Eclipse IDE for GCC
实验内容和要求
1. 语法分析以下小型C语言SimpleC并实现中间代码生成:
SimpleC为标准C的一个子集,其语法特征如下:
基本数据类型BasicType: int
变量声明: BasicType avariable;
函数定义: BasicType foo(BasicType param1, BasicType param2,...)
四则运算: +,-,/,*
赋值: =
返回: return, return BasicTypeValue
逻辑判断: if, else (含复合语句)
循环: while(含复合语句)
复合语句块标记: { }
在由词法分析程序分析SimpleC产生的token文件、符号表文件的基础上,完善语法和词法分析,产生相应的中间代码-四元式序列。
2. 编译程序组织的参考结构:
本编译程序组织的参考结构,如图1-1所示。
图1-1本编译程序组织的参考结构
在图1-1中,整个编译程序结构以语法分析组件为中心,在语法分析组件对句子结构生成或归约的控制下,其调用词法分析组件从输入的SimpleC源程序字符流中识别单词,完成语法树的逐步构造,其间词法分析程序、语法分析程序将对符号表进行操纵。在语法树构造完成后,调用语义分析对语法树进行静态语义分析,当通过静态语义分析(即表明源程序无静态语义错误)后,调用代码生成组件完成中间代码(四元式)的生成。出错检查和处理程序服务于词法分析、语法分析和代码生成组件。
3. SimpleC的参考EBNF文法
SimpleC的参考EBNF文法如下:
->
-> (void|int)main
-> (|void)
-> ’(’’)’
-> {,|}
-> ’{’’}’
-> int={,=}
-> {,}
-> int
-> {}
-> ||’}’|
;|;|;|
;|;|
-> =
-> if’(’’)’|
else’(’’)’
-> while
-> scanf’(’’)’
-> printf’(’’)’
-> return ’(’’)’
-> (|void)
->{+|-}{}
-> {}
-> |’(’’)’||
-> {|}
-> a|b|………..|z
-> 0|
-> 1|2|3|4|5|6|7|8|9
-> ”{|}”
-> +|-
-> *|/
-> |>=|!=|= =
4. 四元式的参考操作码
SimpleC编译器后端所产生的四元式的参考操作代码及其解释如下:
操作码
Op1
Op2
Result
+
X
Y
X和Y相加
-
X
Y
X和Y相减
*
X
Y
X和Y相乘
/
X
Y
X和Y相除
=
Y
Y 赋值
<
X
Y
X小于Y
>
X
Y
X大于Y
!=
X
Y
X不等于Y
<=
X
Y
X小于等于Y
>=
X
Y
X大于等于Y
==
X
Y
X等于Y
J