没有合适的资源?快使用搜索试试~ 我知道了~
16281002-杜永坤-专题3实验报告1
需积分: 0 0 下载量 19 浏览量
2022-08-08
20:21:42
上传
评论
收藏 1.13MB DOCX 举报
温馨提示
试读
33页
2、LL1分析程序设计说明2.1设计要求:(1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题1”的输出结果 3、程序功能描述 (1)、能够录入一个.
资源推荐
资源详情
资源评论
编译原理专题训练 2 计算机 1601 班 杜永坤 16281002
1
《编译原理》研究性学习专题实验报告
实验 3: LL(1)语法分析设计原理与实现
学 院:计算机与信息技术学院
专 业: 计算机科学与技术
学生姓名: 杜永坤
学 号: 16281002
班 级: 计算机 1601 班
指导教师: 于双元
北京交通大学
2019 年 05 月 09 日
编译原理专题训练 2 计算机 1601 班 杜永坤 16281002
2
目录
实验要求:........................................................................................................................4
1.[实验项目]......................................................................................4
2.[设计说明]......................................................................................4
3.[设计要求]......................................................................................4
实验过程:........................................................................................................................4
1、文法扩充修改......................................................................................................4
1.1、修改文法:...............................................................................................4
1.2、扩充后 E 表示的表达式可以识别逻辑表达式 ......................................5
1.3、if 语句文法设计说明 ...............................................................................5
2、LL1 分析程序设计说明......................................................................................6
2.1 设计要求:..................................................................................................6
2.2 设计说明:..................................................................................................6
3、程序功能描述......................................................................................................7
4、主要的数据结构描述..........................................................................................7
4.1 主要使用的 java 数据结构类型.................................................................7
4.1.1 List ....................................................................................................7
list 中添加,获取,删除元素..........................................................7
list 中是否包含某个元素..................................................................8
list 中根据索引将元素数值改变(替换)...........................................8
list 中查看(判断)元素的索引......................................................8
根据元素索引位置进行的判断........................................................9
利用 list 中索引位置重新生成一个新的 list(截取集合)...........9
对比两个 list 中的所有元素.............................................................9
判断 list 是否为空...........................................................................10
4.1.2 Map .................................................................................................10
HashMap ..........................................................................................10
常用 API ..........................................................................................10
4.2 二元式文件结构.......................................................................................11
4.3 文法............................................................................................................12
4.4 非终极符号与终结符号...........................................................................13
4.5 FIRST 集...................................................................................................14
4.6 FOLLOW 集.............................................................................................15
4.7 LL(1)分析表..............................................................................17
5、程序结构描述....................................................................................................18
5.1Java 主类:LL(1)语法分析主类 LL1PredictionAnalysisMain ....18
5.2 Java 副类:LL(1)语法分析副类类 LL1PredictionAnalysis...................18
5.2.1 私有变量:.....................................................................................19
5.2.2 副类的构造函数.............................................................................19
5.2.3 副类的方法.....................................................................................20
5.3 Java 副类 构造文法的 First 集和 Follow 集类 FirstAndFollow ...........21
5.3.1 私有变量........................................................................................21
5.3.2 构造函数 FirstAndFollow() ....................................................21
5.3.3 FirstAndFollow 副类的方法..........................................................24
5.4 JAVA 类之间关系 ....................................................................................25
5.4.1 类之间的关系................................................................................25
6、程序测试............................................................................................................25
6.1 正确用例...................................................................................................25
6.2 错误用例...................................................................................................29
6.2.1 缺少 ‘;’符号................................................................................29
编译原理专题训练 2 计算机 1601 班 杜永坤 16281002
3
6.2.1 缺少 ‘)’符号................................................................................29
6.2.3 缺少 if 语句程序体:.......................................................................30
实验过程总结..................................................................................................................30
1、LL(1)分析器分析步骤......................................................................................30
1.1 FIRST 集....................................................................................................30
1.2 FOLLOW 集..............................................................................................30
1.3 LL(1)分析表构建......................................................................................31
1.4 LL(1)分析过程..........................................................................................31
2、 实验输出分析过程的完善,print_indexp(int i) ............................................32
编译原理专题训练 2 计算机 1601 班 杜永坤 16281002
4
实验要求:
1.[实验项目]
实现 LL(1)分析中控制程序(表驱动程序);完成以下描述赋值语句的 LL(1)文法的LL(1)
分析过程。
G[A]:A→V=E
E→TE′
E′→ATE′|ε
T→FT′
T′→MFT′|ε
F→ (E)|i
A→+|-
M→*|/
V→i
2.[设计说明]
终结符号 i 为用户定义的简单变量,即标识符的定义。
3.[设计要求]
(1)输入串应是词法分析的输出二元式序列,即某算术表达式“专题 1”的输出结果。
输出为输入串是否为该文法定义的算术表达式的判断结果;
(2)LL(1)分析过程应能发现输入串出错;
(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果;
(4)考虑根据 LL(1)文法编写程序构造 LL(1)分析表,并添加到你的 LL(1)分析程
序中。
实验过程:
1、文法扩充修改
1.1、修改文法:
文法与专题 2 修改相同,基本可以识别 c 语言 if 语句、判断语句和赋值语句:
G[P]:
P→S|Q|;
S→V=E;
V→i
E→TR
R→ATR|$
T→FY
Y→MFY|$
F→CZ
编译原理专题训练 2 计算机 1601 班 杜永坤 16281002
5
Z→OCZ|$
C→BI
I→XBI|$
B→(E)|i
A→+|-
M→*|/
X→a|o //a表示逻辑符号&&,o表示逻辑符号||
O→t|d|g|l|u|e //t表示>=,d表示<=,g表示>,l表示<,e表示==,u表示!=
Q→8JKH //8表示if在符号表中序号
H→fJKH|9K|$ //f 表示 else if符号的组合、9表示else在符号表中的序号
J→(E) //逻辑语句
K→S|{U}|; //if语句程序体
U→PU|{U}U|$
1.2、扩充后 E 表示的表达式可以识别逻辑表达式
规则:
F→CF′
F′→OCF′|ε
C→BC′
C′→XBC′|ε
X→a|o//a表示逻辑符号&&,o表示逻辑符号||
O→t|d|g|l//t表示>=,d表示<=,g表示>,l表示<
将逻辑与(&&)和逻辑或(||)加入到表达式中,将关系运算符(<=、>=、==、!=、<、>)
加入到表达式中。
1.3、if 语句文法设计说明
Q→8JKH//8表示if在符号表中的序号
H→89JKH|9K|ε//9表示else在符号表中的序号
J→(E) //逻辑语句
K→S|{U}|; //if 语句程序体
U→PU|{U}U|$
这部分规则,表示的是 if 语句的识别规则:
Q→if<判断语句><IF语句程序体><ELSE IF 或者 ELSE语句程序体>
<ELSE IF 或者 ELSE语句程序体>→else if<判断语句><IF语句程序体><ELSE IF 或者
ELSE语句程序体>|else<IF语句程序体>|$
<判断语句>→(E) //逻辑语句
<IF语句程序体>→S|{U}|; //if语句程序体
U→PU|{U}U|$ //U这个部分保证了if语句程序体中能够出现赋值语句和if
语句的闭包,并且能识别普通的程序体
剩余32页未读,继续阅读
资源评论
茶啊冲的小男孩
- 粉丝: 26
- 资源: 326
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功