没有合适的资源?快使用搜索试试~ 我知道了~
课设报告-刘博谦1
需积分: 0 0 下载量 123 浏览量
2022-08-08
23:24:22
上传
评论
收藏 288KB DOCX 举报
温馨提示
试读
55页
课设报告-刘博谦1
资源推荐
资源详情
资源评论
1 / 55
课 程 实验 报 告
题目: C 语言编译器的设计与实现
课程名称: 编译技术
专业班级: 软件工程 1504 班
学 号: U201517070
姓 名: 刘博谦
指导教师: 徐丽萍
报告日期: 2017.01.24
软件学院
2 / 55
目录
1 选题背景 ........................................................................................................................................1
2 系统关键定义 ................................................................................................................................2
2.1 单词文法描述....................................................................................................................2
2.2 语句文法描述....................................................................................................................3
2.3 符号表结构描述...............................................................................................................3
2.4 错误类型码描述...............................................................................................................4
2.5 中间代码描述....................................................................................................................4
2.6.汇编代码的描述.............................................................................................................6
3 系统设计与实现 ..........................................................................................................................10
3.1 编译程序符号表结构......................................................................................................10
3.2 编译程序报错功能..........................................................................................................10
3.3 词法分析器设计与实现..................................................................................................13
3.4 语法语义分析器设计与实现..........................................................................................17
3.5 中间代码生成功能..........................................................................................................19
3.6 汇编代码生成功能..........................................................................................................20
4 系统测试与评价 ..........................................................................................................................23
4.1 测试用例..........................................................................................................................23
4.2 正确性测试......................................................................................................................24
4.3 报错功能测试..................................................................................................................25
4.4 系统的优点......................................................................................................................25
4.5 系统的缺点......................................................................................................................26
5 实验小结或体会 ..........................................................................................................................27
参考文献 .........................................................................................................................................28
附件:源代码 .................................................................................................................................29
1 / 55
1 选题背景
本次课程设计是构造一个高级语言的子集的编译器,目标代码可以是汇编语言业也可以
是其他形式的机器语言。按照任务书,实现的方案可以有很多种选择。
可以根据自己对编程语言的定义选择实现语言的特定功能。
编译器的语法和词法分析采用教材相关章节的内容进行相应修改,重点在语义分析、符
号表结构设计、中间代码、目标代码存储结构设计等阶段的实现。
实验的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理解,提高自
己对系统软件编写的兴趣。
2 / 55
2 系统关键定义
2.1 单词文法描述
组织输入、扫描、分析、输出;
接收字符串形式的源程序,按照源程序输入的次序依次扫描源程序,在扫描的同时根据语言
的词法规则识别出具有独立意义的单词,并产生与源程序等价的属性字(Token)流 .
单词符号
种别编码
单词值
main
1
int
2
float
3
double
4
char
5
if
6
else
7
do
8
while
9
l(l|d)*
10
内部字符串
( +|-|ε ) dd*(.dd* | ε)( e
( +|-|ε ) dd*|ε)
20
二进制数值表示
=
21
+
22
-
23
*
24
/
25
(
26
)
27
{
28
}
29
,
30
;
31
>
32
>=
33
<
34
<=
35
==
36
!=
37
#
0
3 / 55
2.2 语句文法描述
在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”
等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.
<程序> ::= main()<语句块>
<语句块> ::= ‘{‘<语句串>’}’
<语句串>::=<语句>{;<语句>};
<语句>::=<赋值语句>|<条件语句>|<循环语句>
<赋值语句>::=ID=<表达式>
<条件语句>::=if<条件><语句块>[else <语句块>]
<循环语句>::=do <语句块>while <条件>
<条件>::=<表达式><关系运算符><表达式>
<表达式> ::= <项>{ +<项>|-<项>}
<项> ::= <因子>{*<因子>|/<因子>}
<因子> ::=ID|num|(<表达式>)
num::= ( +|-|ε ) 数字数字*(.数字数字* | ε)( e ( +|-|ε ) 数字数字*|ε)
ID::=字母(字母|数字)*
字母::=a|b|c…|z|A|B|C…|Z
数字::=0|1|2…|9
<关系运算符> ::= <|<=|>|>=|==|!=
2.3 符号表结构描述
符号表结构采用结构体的方式。
typedef struct Variable
{
string var; //变量
string value; //初始化值
}Variable;
typedef struct IDwords
{
int id; //标志
string word; //单词
}IDwords;
vector<Variable> var_table;
剩余54页未读,继续阅读
资源评论
销号le
- 粉丝: 25
- 资源: 289
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功