- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理语法分析实验报告概要
院 系:
专 业:
年 级:
课 程 名 称: 编译原理
组 号:
姓名(学号):
指 导 教 师:
2016年 6 月 16 日
年级 班号 组号 专业 计算机科学与技术 实验名称 语法分析 实验室 实
验
目
的
和
要
求 一、实验目的:
根据算术表达式文法编制调试语法分析程序,以便对输入的符号串进行分析,
二、实验要求:
任给一个表达式(含括号嵌套),判断是否合法,如果非法,给出提示(含出错位置)。
算法表达式文法如下:
E - E+T | E-T | T
T - T*F | T/F | F
F - (E) | I
3. 实现方法:
可以采用LL(1)分析、递归下降分析、优先分析、LR(1)分析这四种分析方法中的任意一种方法。如果用LL(1)分析,则首先需要消除左递归(改写文法),然后自行构造LL(1)分析表;如果用递归下降分析,也首先需要消除左递归;优先分析和LR(1)分析则无需消除左递归。
4. 语言环境要求:
可以用任何一种可视化编程的平台开发,基于WEB的也可,要求有界面。
三、算法思想
1 .分析
a)?E=E+T=E+T*F=E+T*(E)即有E=E+T*(E)存在左递归。用直接改写法消除左递归,得到如下:
E? -?TE’
E’??-?+TE’ | ?TE’|ε
概
要
设
计
(
整
体
流
程
) T???-?FT’
T’??-?*FT’ | /FT’|ε
F??-?(E) | i
b)?对于以上改进的方法。可得:
对于E’:??FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,?,ε}?
对于T’:??FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε}?
而且: FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }
由此我们容易得出各非终结符的FOLLOW集合如下:
FOLLOW( E )= { ),#}
FOLLOW(E’)= FOLLOW(E)={ ),#}
FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,?,),#}
FOLLOW( T’ ) = FOLLOW( T ) ={+,?,),#}
FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,?,),#}
由以上FOLLOW集可以我们可以得出SELECT集如下:
对E????????SELECT(E-TE’)=FIRST(TE’)=FIRST(T)={ (,i }
对E’???????SELECT(E’?-+TE’)={ + }?
????? ?SELECT(E’-??TE’)={ ? }
?????? SELECT(E’?-ε)={ε,),#}
对T????????SELECT(T-FT’)={(,i}
对T’?? ????SELECT(T’?-*FT’)={ * }??
SELECT(T’?-?∕FT’)={ ∕ }
SELECT(T’?-ε)={ε,+,?,),#}
对F????????SELECT(F-(E)?)={ ( }
SELECT(F-i)={ i }
∴???SELECT(E’?-+TE’)∩SELECT(E’?-??TE’)∩SELECT(E’?-ε)=F
SELECT(T’?à*FT’)∩SELECT(T’?à?∕FT’)∩SELECT(T’?àε)=F
SELECT(Fà(E)?)∩SELECT(Fài)=?F
由上可知,有相同左部产生式的SELECT集合的交集为空,所以文法是LL(1)文法。因此,转化后的文法可以用递归下降分析法作语法分析。?
?
?
概
要
设
计
(
整
体
流
程
)
流程图:
?
?
?
详
细
设
计
(
算
法
实
现
) 四、详细设计1.public boolean isContainsIllegalSymbol(String s)
判断输入字符是否是合法字符,正确返回true,错误返回false
for (int i = 0; i s.length(); i++) {
char ch=s.charAt(i);
if(!(ch==i||ch==(||ch==)||ch==+||ch==-||ch==*||ch
您可能关注的文档
最近下载
- 25题固定收益分析岗位常见面试问题含HR问题考察点及参考回答.pdf
- 韶关市2025届高三一模(综合测试一) 英语试卷(含答案).docx
- 工作报告及设计心得20160831.pdf VIP
- SPC导入的钢箱截面在生成变截面时,消隐显示各板件连接错乱.pdf VIP
- Lessonsinlifesaving英国短片剧本.docx VIP
- 2019年注册土木工程师(道路工程)考前培训南京班文件-李 雪.pdf VIP
- 上海市2018-2022年近五年中考数学试卷附答案.pdf VIP
- 城轨车站施工与维护——开挖作业.pptx VIP
- 城轨车站施工与维护——围护结构施工及基坑开挖.pptx VIP
- 铁道概论——单元7.7铁路专用通信系统.pptx VIP
文档评论(0)