没有合适的资源?快使用搜索试试~ 我知道了~
CS1707_聂鸿勇_U201714785编译原理实验报告1
需积分: 0 0 下载量 111 浏览量
2022-08-08
18:08:59
上传
评论
收藏 1011KB DOCX 举报
温馨提示
试读
37页
课 程 实 验 报 告课程名称: 编 译 原 理 实 验 专业班级: CS1707 学 号: U201714785 姓 名: 聂鸿勇 指导教师: 吴海 报告
资源详情
资源评论
资源推荐
1
课 程 实 验 报 告
课程名称: 编 译 原 理 实 验
专业班级: CS1707
学 号: U201714785
姓 名: 聂鸿勇
指导教师: 吴海
报告日期: 2020 年 6 月 30 日
计算机科学与技术学院
2
目录
1 概述.........................................................................................................................3
2 系统描述.................................................................................................................4
2.1 自定义语言概述..............................................................................................4
2.2 单词文法与语言文法......................................................................................4
2.3 符号表结构定义.............................................................................................9
2.4 错误类型码定义...........................................................................................10
2.5 中间代码结构定义........................................................................................11
2.6 目标代码指令集选择....................................................................................12
3 系统设计与实现...................................................................................................13
3.1 词法分析器....................................................................................................13
3.2 语法分析器....................................................................................................14
3.3 符号表管理....................................................................................................14
3.4 语义检查........................................................................................................15
3.5 报错功能........................................................................................................17
3.6 中间代码生成................................................................................................17
3.7 汇编代码生成................................................................................................23
4 系统测试与评价...................................................................................................26
4.1 测试用例........................................................................................................26
4.2 正确性测试....................................................................................................29
4.3 报错功能测试................................................................................................33
4.4 系统的优点....................................................................................................33
4.5 系统的缺点....................................................................................................34
5 实验小结...................................................................................................................35
参考文献......................................................................................................................36
附件:源代码..............................................................................................................37
3
1 概述
本次实验是构造一个高级语言的子集的编译器,目标代码是汇编语言。按照
任务书,实现的方案可以有很多种选择。
可以根据自己对编程语言的喜好选择实现。建议大家选用 decaf 语言或 C 语
言的简单集合 SC 语言。
实验的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理
解,提高学生系统软件研发技术。
4
2 系统描述
2.1 自定义语言概述
一个简化的 C 语言的文法,不妨将其称为 mini-c,实现了基本类型 int、float、char
以及数组,能够识别五类单词:关键字(保留字)、运算符、界符、常量和标识
符,实现部分静态语义分析,单词文法与语言文法见章节 2.2。
2.2 单词文法与语言文法
单词文法:
单词符号说明
单词种类码
正则表达式
id
ID
[A-Za-z][A-Za-z0-9]*
{char}
CHAR
['][^\n][']
{int}
INT
[0-9]+
{float}
FLOAT
([0-9]*\.[0-9]+)|([0-9]+\.)
“char”
TYPE
“int”
TYPE
“float”
TYPE
return
RETURN
if
IF
else
ELSE
while
WHILE
for
FOR
“;”
SEMI
“,”
COMMA
">"|"<"|">="|"<="|"=="|"!="
RELOP
“=”
ASSIGNOP
“+”
PLUS
“-“
MINUS
“*”
STAR
“/”
DIV
“%”
MOD
++
AUTOPLUS
--
AUTOMINUS
+=
PLUSASSIGNOP
5
-=
MINUSASSIGNOP
*=
STARASSIGNOP
/=
DIVASSIGNOP
&=
MODASSIGNOP
“&&”
AND
“||”
OR
“!”
NOT
“(”
LP
“)”
RP
"["
LB
"]"
RB
“{”
LC
“}”
RC
"//"[^\n]*
//单行注释
"/*"
{BEGIN(COMMENT);}
<COMMENT>"*/"
{BEGIN(INITIAL);}
<COMMENT>([^*]|\n)+|.
/**/多行注释
语言文法:
%%
program: ExtDefList { display($1,0);} //显示语法树,语义分析
;
ExtDefList: {$$=NULL;}
| ExtDef ExtDefList
{$$=mknode(2,EXT_DEF_LIST,yylineno,$1,$2);} //每一个 EXTDEFLIST 的
结点,其第 1 棵子树对应一个外部变量声明或函数
;
ExtDef: Specifier ExtDecList SEMI
{$$=mknode(2,EXT_VAR_DEF,yylineno,$1,$2);} //该结点对应一个外部变
量声明
|Specifier FuncDec CompSt
{$$=mknode(3,FUNC_DEF,yylineno,$1,$2,$3);} //该结点对应一个函
数定义
| error SEMI {$$=NULL;}
;
Specifier: TYPE
{$$=mknode(0,TYPE,yylineno);strcpy($$->type_id,$1);$$->type=!strcmp($1,"int"
)?INT:FLOAT;}
;
剩余36页未读,继续阅读
白羊带你成长
- 粉丝: 21
- 资源: 329
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0