没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1. 课程设计要求
1. 1 课程目的
编译原理讲述构造高级程序设计语言的编译程序的基本原理和方法,是计算机软件的
核心技术之一。通过这个小型编译器的设计与实现,加深学生对所学的关于编译原理的理
论知识的理解,增强学生对所学知识的综合应用能力,并通过实际的编写程序达到对所学
的知识进行验证,使学生掌握词法分析的实现技术,深入了解语自底向上及具体实现方法
掌握语义分析的实现技术及具体实现方法,了解代码优化和代码生成的实现技术及具体实
现方法,明确编译各阶段之间的关系,熟悉符号表的建立及在编译过程中的作用。
1. 2 课程要求
、编译程序的基本功能
词法分析
语法分析
语义分析和汇编代码生成
符号表管理和存储分配
、编译程序所处理的源程序的主要成分
声明语句,包括变量声明和函数声明;
赋值语句;
布尔表达式;三种典型的控制流语句(顺序,循环、分支);
一维数组的声明和引用;
输入、输出语句;
算术表达式的运算包括加、减、乘、除;
函数调用语句。
3、编译程序首先能将源程序生成汇编代码,再经过汇编器的编译生成可执行程序,要求
生成的可执行程序能够正确运行。
1. 3 整体结构图
1. 源语言的形式描述
2. 1 词法规则形式化描述
正则文法 ,,,,其中
):文法的各种非终结符
):终结符如下
· 关键字、标识符、整常数、浮点常数、字符常数
· 单界符:+,-,×,;,…
· 双界符:/*,:=,>=,<=,!=,…
· 注释
c)P:产生式
d)S:S’
2.1.1 文法非终结符号
.语法起始:
.表达式计算:、、
.语句:、 、!"、#!、$"%
&.表达式:'("#、)'("#、()'("#、#!)'("#
#*)'("#、("#!)'("#、!)'("#、
$)'("#、 %)'("#
+.定义等:,-、.(、,#/#、#,)0
1.赋值:)2*、!"))2*、!
34其他:(、/,,"
2.1.2 文法终结符号表
种编码 单词 种编码 单词
5 6 7
8#*,9,#4
:;
& <
0# +
;
!" 1
:
& =:# 3 9
+ #! > ;
1 ? 9
3 ("#! 5 ;
> !
? "*"
5 # @
& @
:" + A!
B 1 A,
& C 3 D
+ E >
,
1 F ? #,
3 BB &5 ,#/#
> CC & !
?
(
& :"*
5
)
& "#/
G && "".
H
2. 2 语法规则形式化描述
产生式的形式化描述如下:
)IC;J
)IC;JK
)IC;JL
,)IC;=J
)IC;=MJL
其中,M、LNO
+
,
I、J、KN,
=N
2.2.1 文法产生式
4C;
扩展文法
4C;.(0#7 <
起始文法
4.(C;#
定义整型
&4.(C;P
定义浮点型
+. C; 块由基本语句组成
14 C;
块由基本语句和块组成
34C;7 <
基本语句由块组成
>4C;Q
基本语句产生表达式
?4C;B
加法表达式
54C;C
减法表达式
4C;
改变优先级
4C;E
乘法表达式
4C;F
除法表达式
&4C;
改变优先级
+4C;
括号表达式
14C;,#/#
整常熟
34C;#,
标示符
>4C;"".GH
数组元素
?4C;"*"Q
基本语句生成返回语句
54C;,-
基本语句生成定义语句
4,-C;.(#,)0
定义语句由基本类型和变量名组成
4#,)0C;#,R#,Q
变量名由一些标示符组成
4#,)0C;#,Q
变量名由一个标示符组成
&4#,)0 C; "". G ,#/# H
7"".)2*<Q
数组元素赋值
+4"".)2*C;*0"
数组元素由一系列数值组成
14*0"C;,#/#R*0"
数值由一些常数组成
34*0"C;,#/#
数值由一个常数组成
>4C;)2*Q
基本语句产生赋值语句
?4)2*C;!
赋值语句由左部、等号、表达式组成
54!C;#,
左部由标示符组成
4!C;"".GH
左部由数组元素组成
4C;()'("#
基本语句产生循环语句
4()'("#C;!" )2* Q
)'("#Q$"%
循环语句结构
&4)'("#C;(
J 表达式结构
+4(C;9
比较符9
14(C;;
比较符;
34(C;9
比较符9
>4(C;;
比较符;
?4$"%C;$)'("#
自增表达式
&54$"%C;%)'("#
自减表达式
&4$)'("#C;#,BB
自增表达式结构
&4%)'("#C;#,CC
自减表达式结构
&4C;#!)'("#
基本语句产生 #! 表达式
&&4#!)'("#C;#!)'("#
$! 语句结构
&+4C;#*)'("#
基本语句产生输入F输出语句
&14#*)'("# C;
("#!)'("#
输出表达式
&34#*)'("# C;
!)'("#
输入表达式
&>4("#!)'("#C;("#!"#/Q
输出表达式结构
&?4("#!)'("#C;("#!"#/R
'("#Q
输出表达式结构
+54'("#C;#,R'("#
输出由一系列标示符组成
+4'("#C;#,
输出由一个标示符组成
+4!)'("#C;!"#/R
/,,"Q
输入表达式结构
+4/,,"C;D#,
按地址引用
3. 整体结构设计
概述:
1. 首先,了解源语言的语法结构及其文法分析,并用正则文法表示。
2. 其次,通过词法分析器对源语言进行分析,并转换为 序列。
由词法分析器完成,输入时组成源程序的字符串,即词法分析器将源程序看作是一个
平滑的字符流。按照组成 的规则,通过分析,提出多余的空白符、注解等,切
分出一个个的 ,并请求符号表管理器将这些几号中的标示符登记到符号表中。
在分析过程中,如果发现错误,则进行相应的处理。
3. 再次,构造 ST语法分析器,生成 *" 集、# 表及 / 表,对 序
列进行语法分析。
ST()语法分析器将句柄的识别过程划分为若干个状态,分析其根据当前的状态确
定是否找到了句柄,如找到句柄,则按相应的产生时进行规约,并进入下一个状态;
如过未能找到句柄,则移近输入符号,也进入下一个状态。直至最终进入 IKK 状态为
止,或进入 """ 为出错。
4. 最后,进行语义分析,生成目标代码。
首先进行静态语义检查,及类型检查、控制流检查、唯一性检查及关联名检查,将其
和中间代码生成结合到语法分析中即为语法制导翻译。即对应每一个产生式编制一个
语义子程序,当某个产生式获得匹配时就调用相应的语义子程序进行语义检查与翻译 ,
最终生成目标代码。
剩余25页未读,继续阅读
资源评论
- 丨brokenYouth2014-04-14写的很不错~~。帮助很大~!!
- xiaonian19932014-04-11高手啊,但是我的visual studio跑不了···
- hehe_cola2015-03-31不好,没有给完整的代码
cappuccino_dan
- 粉丝: 2
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功