简单的C语言编辑器课程设计
《编译原理》课程设计简单的C语言编译器
6 -
扬 州 大 学
编译原理课程设计报告
题 目
题 目 简单的编译器
班 级 计科0802班
学 号 081202427
姓 名 张 俊
指导教师 姜 卯 生
成 绩
扬州大学信息工程学院
2011
课程设计题目
实现一个简单的编译器
课程设计目的
通过编译原理课程设计,加深对课堂中所讲授的内容的理解,设计一个
具有词法分析、语法、语义分析、错误处理的综合程序。进一步掌握编译程序常用实现的方法和技术,使学生初步具有研究、设计、编制和调试编译程序的能力。
课程设计要求
1.实现一个C语言子集或Pascal语言子集的编译器,工具任选。
2.要求实现的功能:翻译 +,-,*, / 四则运算表达式及布尔表达式,翻译包含if语句,while语句及do-while语句及相互间的嵌套。
课程设计语言及选用工具
选用语言:Java
工具 Eclipse
课程设计方法
设计过程中用到的数据结构:
//关键字数组
public static List keyWord = new ArrayList();
//自定义符号串数组
public static Eryuanshi[] valueAndClass = new Eryuanshi[100];
//目标代码数组
public static List siyuanshi = new ArrayList();
//目标代码类,存放四元式的另外一种形式
class Siyuanshi{
String op;
String str1;
String str2;
}
//二元式类,存放词法分析后的标志符,关键字及其类号
class Eryuanshi{
String word;
int classID;
}
Stack stateStack = new Stack();//状态栈
Stack symStack = new Stack();//符号栈
Stack semanticStack = new Stack();//语义栈
编译器主要分为两个模块:
(1)词法分析程序:主要功能是从文件逐个单词读取源程序,进行次词
法分析,并输出源程序的二元式列表,二元式列表保存在keyWord对象数组中。
关键字、自定义标识符和数字对应的类号列表
+
3
||
15
int
27
-
4
=
16
float
28
*
5
(
17
char
29
/
6
)
18
if
30
<
7
[
19
else
31
<=
8
]
20
while
32
==
9
{
21
do
33
!=
10
}
22
main
34
>
11
:
23
!
35
>=
12
;
24
数字
2
&
13
,
25
自定义
标识符
1
&&
14
void
26
主要函数:
1、wordAnalys(String s):对源代码进行词法分析,在其中调用lookup()函数。
2、lookup(String s):对词法分析函数中分析出的各字符串在关键字和符号 表中查找。
(2)语法分析及生成目标代码程序:采用LR表分析程序,LR表具有ACTION和GOTO 两部分。主要采用两个LR分析表:算术表达式LR表和布尔表达 LR表。根据查询LR表,判断所要采取的动作。若得到值temp=-1,则表达式识别错误,若temp=0,则表达式识别成功,若0=100,则采取用对应表达式归约。
算术表达式文法:
0) S?E
1) E?E+E
2)E?E--E
3) E?E*E
4)E?E/E
5) E?(E)
6) E?i
根据算术表达式文法构造算术表达式LR分析表:
int[][] E_L