- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
题目:编写识别由下列文法所定义的表达式的预测分析程序。
EàE+T | E-T | T
TàT*F | T/F |F
Fà(E) | i
输入:每行含一个表达式的文本文件。
输出:分析成功或不成功信息。
?? (题目来源:编译原理实验(三)--预测(LL(1))分析法的实现)
?
解答:
?
(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
对于以上改进的方法。可得:
对于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)文法。
?
b) 由Select集构造文法LL(1)的预测分析表 (表1)
非终
结符
终结符
i
+
-
*
/
(
)
#
ε
E
E TE’[0]
E-TE’[5]
E’
E’- + T E’[11]
E’- - TE’[12]
E’-ε[16]
E’-ε[17]
E’-ε[18]
T
T-FT’[20]
T-FT’[25]
T’
T’-ε[31]
T’-ε[32]
T’-*FT’[33]
T’-/FT’[34]
T’-ε[36]
T’-ε[37]
T’-ε[38]
F
F-i[40]
F-(E)[45]
表1. LL(1)预测分析表
?
(2)设计
算法的主要流程图(如:图1)。
图1.流程图
?
(3)程序代码如下
/************************************************************************
* 文件名 :test3.c
* 文件描述:预测分析法实现的语法分析器。分析如下文法:
* E-E+T | E-T | T
* T-T*F | T/F |F
* F-(E) | i
* 输入:每行含一个表达式的文本文件(#号结束)。
* 输出:分析成功或不成功信息。
* 创建人:余洪周 niccublog.cn 2006-12-16
* 版本号:1.0?
* 说明 :为了表示的方便采用了如下的所示表示方法:
*? A=E B=T
?* 非终结符:0=E 1=E 2=T 3=T 4=F?
?* 终结符 :0=i 1=+
文档评论(0)