2218LL1文法分析器 编译原理实验报告格式.docx
- 文档编号:9138661
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:11
- 大小:213.60KB
2218LL1文法分析器 编译原理实验报告格式.docx
《2218LL1文法分析器 编译原理实验报告格式.docx》由会员分享,可在线阅读,更多相关《2218LL1文法分析器 编译原理实验报告格式.docx(11页珍藏版)》请在冰豆网上搜索。
2218LL1文法分析器编译原理实验报告格式
编译原理
实
验
报
告
班级0738-3
学号10703080326
姓名王维
一、实验目的
巩固以前学习的高级语言程序设计知识,并完成一个小型编译程序的设计。
当对高级语言不熟悉,督促了查阅相应资料,或学习查阅帮助,熟练掌握一门高级语言。
二、实验内容
用Java语言编写一个词法及语法分析器。
画出识别单词的状态转换图,然后再用程序实现的扫描器设计方法。
给定一个上下文无关文法,根据算法设计程序,生成文法中每个非终结符的First集和Follow集,并能动态展示算法的执行过程。
然后依据文法及其First集和Follow集生成LL
(1)预测分析表,再输入一个符号串,依据LL
(1)预测分析表判断句子是否正确(即符合文法)。
三、实验步骤
1、开发工具
MyEclipse7.2
2、完成工作内容概述
词法阶段:
(1)文件的输入读出,保存。
(2)表格的定义。
定义如下格式的表格,将java语言中的单词(关键字、界符、数的类型)的编码输入:
表java语言单词的编码
单词
种别码
单词
种别码
单词
种别码
byte
10
public
30
[
50
short
11
private
31
]
51
int
12
protected
32
{
52
long
13
new
33
}
53
float
14
protected
34
标识符
34
double
15
+
35
整常数
100
char
16
-
36
浮点数
101
for
17
*
37
字符串
70
while
18
/
38
注释
80
if
19
<
39
else
20
>
40
switch
21
=
41
case
22
;
42
break
23
43
default
24
‘
44
continue
25
/*
45
return
26
*/
46
void
27
(
47
static
28
)
48
class
29
.
49
(3)判别给定单词是否在表格中,如关键字,整数,字符串,多行注释,界符。
语法阶段:
(1)文法的读入。
(2)文法的拆分和显示。
(3)计算LL
(1)文法中非终结符的First集合Follow集。
(4)根据LL
(1)非终结符的First集合Follow集计算计算预测分析表。
(5)输入一个表达式根据预测分析表判断其是否正确。
3、系统特点(特色)
文件输入,或手动输入文件。
简洁明了,易操作。
能够正常实现其功能。
4、实现过程
(1)程序总体框图(ROSE或其他工具,配以必要的文字描述6.实验完成下述图中到中间代码生成
6.实验完成下述图中到中间代码生成
7.Sample语言的介绍
§1.字符集的定义
★
★
★
★
★
★
★
★
★
★
★
★
★
本次实验只做了表格管理、词法分析器、语法分析器、以及出错管理。
(2)各功能分解图(ROSE或其他工具,配以必要的文字描述)
9.词法分析程序的顶层数据流图:
词法分析程序的详细数据流图:
LL
(1)文法预测分析法交互图:
(3)核心算法实现(以图形方式展示,配以必要的文字描述)
标识符的状态转换图:
以字母开始后跟数字或字母的为标识符。
注释符的状态转换图:
First集的实现:
程序流程图
(1)若有产生式A->aB或者A->ε则把ε和a加入到First集中
(2)若有产生式A->Xa则把First(X)中非ε加入到First集中
(3)若有产生式A->X1X2X3….Xka,则当X1X2X3…Xi=>ε时,把First(Xi+1….Xk)中所有非ε加入到Firtst集中。
若有产生式A->X1X2X3….Xka,则当X1X2X3…Xk=>ε时,把First(a)加入到Firtst集中。
(4)直至First集不再扩大时结束。
Follow集实现:
程序流程图
如果A是开始符号,#∈Follow(A);若有产生式B→αAaβ,a∈VT,把a加入到Follow(A)中;若有产生式B→αAXβ,X∈VN,把First(Xβ)中非ε元素加Follow(A)中;若B→αA,或B→αAβ且β
ε,把Follow(B)加到Follow(A)中;
LL
(1)预测分析表的构造
G的每个产生式A→α,若a∈First(α),则把A→α加至Table(A,a)中;若ε∈First(α),则对任何b∈Follow(A),把A→α加至Table(A,b)中;若ε∈First(α),且#∈Follow(A),把A→α加至Table(A,#)中;
所有无定义的Table(A,a)初始为“”。
结果实现:
LL
(1)预测分析结果的实现:
#:
输入串的结束符;
S:
文法的开始符号;
X:
存放当前栈顶符号的工作单元;
a:
存放当前输入符号的工作单元。
分析过程为:
(1)若X=a="#",则宣布分析成功,停止分析过程。
(2)若X=a≠"#",则把X从栈顶弹出,让输入指针指向下一个输入符号。
(3)若X是一个非终结符,则查看分析表M。
若M[X,a]中存放着关于X的一个产生式,则首先把X从栈顶弹出,然后,把产生式的右部符号串按反序一一压入栈中(若右部符号为ε,则意味着什么也不压栈)。
若M[A,a]为空或存放着“出错标志”,则输出输入串语法错误。
词法分析器功能展示:
预测分析器功能展示:
四、实验心得
通过这次的程序设计,让我深入了解了词法分析器和LL
(1)文法预测分析法设计和实现,增强了我的自学能力和独立思考能力,也让我对程序设计有了更大的兴趣,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还对编译原理应用有了更深入的认识与掌握。
在自己独立完成二个完善的程序后,真的很开心,虽然自己做的也算不上很难,但仍然是自己独立思考的成果,也了解到编译原理的魅力所在,激发了我要解决更多更难问题的决心。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习java语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2218LL1文法分析器 编译原理实验报告格式 2218 LL1 文法 分析器 编译 原理 实验 报告 格式
![提示](https://static.bdocx.com/images/bang_tan.gif)