郑州轻工业学院
课程设计说明书
题目:
姓
名:
赵 倩
院 (系):计算机与通信工程学院
专业班级:计算机科学与技术 10-01 班
学
号: 541007010155
指导教师:
马吉明
成
绩:
时间: 2013 年 6 月 17 日至 2013 年 6 月 21 日
郑州轻工业学院
课 程 设 计 任 务 书
题目
专业、班级计算机科学与技术 10-01 班 学号 541007010155 姓名 赵倩
主要内容、基本要求、主要参考资料等:
主要内容:
将词法、语法、代码生成等实验组合成一个大的编译程序。
完 成 期 限: 2013 年 6 月 21 日
指 导 教 师 签 名 :
课程负责人签名:
年
月
日
1
目
录
一、
实验目的 ...........................................................................................................................................3
二、
实验内容 ...........................................................................................................................................3
(一)
C 的一个子集,其语法特征如下:..............................................................................................3
(二) 过程分析图: ...............................................................................................................................4
三、
程序使用说明:..................................................................................................................................5
四、
程序的一个输出显示:......................................................................................................................7
五、
程序源代码.....................................................................................................................................13
六. 实验心得:........................................................................................................................................105
七.参考文献 ...............................................................................................................................................106
2
一、 实验目的
构造一个 C 语言的编译器,达到综合理解和运用编译原理课程所讲解的关键过程
(词法分析、语法分析、代码生成)及相关算法的目的。
二、 实验内容
(一)
C 的一个子集,其语法特征如下:
1) 基本数据类型 BasicType: int
2) 变量声明:
BasicType avariable;
3) 函数定义:
BasicType foo(BasicType param1, BasicType param2,...)
4) 四则运算:
+,-,/,*
5) 赋值:
=
6) 返回:
return, return BasicTypeValue
7) 逻辑判断:
if, else (含复合语句)
8) 循环:
while(含复合语句)
9) 复合语句块标记:
{ }
3
在由词法分析程序分析 SimpleC 产生的 token 文件、符号表文件的基础上,完
善语法和词法分析,产生相应的中间代码-四元式序列。
(二) 过程分析图:
目标代码
符号表
语义分析及代
码生成
出错检查和
处理程序
语法项构造
返回
语法分析
送单词
取单词
词法分析
源程序
整个编译程序结构以语法分析组件为中心,在语法分析组件对句子结构生成或归约
的控制下,其调用词法分析组件从输入的 SimpleC 源程序字符流中识别单词,完成语法
树的逐步构造,其间词法分析程序、语法分析程序将对符号表进行操纵。在语法树构造
完成后,调用语义分析对语法树进行静态语义分析,当通过静态语义分析(即表明源程
序无静态语义错误)后,调用代码生成组件完成中间代码(四元式)的生成。出错检查
和处理程序服务于词法分析、语法分析和代码生成组件。+
4
三、 程序使用说明:
1. 这个简单的编译器生成四元式程序是一个 EXE 执行文件, 可直接打开 EXE 文件运
行它.
1.1. 打开之后会有提示让你输入要编译的文件, 要求是文件的全名即包含路径的. 如果
输入有错即找不到文件的情况下会有错误提示, 编译文件名后缀一般为 TXT 文件.
1.1.1. 如果编译成功最后会在屏幕上输出源程序和生成的四元式, 并在同目录下生成
了一个保存四元式的 TXT 文件.
1.1.1.1. 编译过程中如果发现程序有错误, 编译不会通过, 屏幕上会有程序的错误提示.
1.1.1.1.1. key word:
0
1
2
3
4
5
6
7
8
9
10
11
const
int
char
void
main
if
else
do
while
scanf
printf
return
1.1.1.1.1.1. oprate
5
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
JME
JMC
JMP
CAS
RED
EXF
WRI
:+
:-
:*
:/
MUS
j>
j<
j==
j!=
j>=
j<=
CAL
6
24
25
BEGIN
END
四、 程序的一个输出显示:
程序一:
Test1.txt
void main()
{
int i,j,m,p;
i=2;
j=3;
p=4;
m=i+j+p;
printf("%d",m);
}
7