- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LL_综合练习
第4章 语法分析 —— 自顶向下分析法 综合练习 已知文法G[E]如下: E→E+T | E-T | T T→T*F | T/F | F F→(E) | i 请用LL(1)分析法识别符号串: # ((i+i)*i-i)/i # 一、判断G[E]是否为LL(1)文法 1. 消除递归,得到文法G’[E] : 基本步骤如下: (1)首先建立一个以文法非终结符为元素的一维数组X,对应每个非终结符设置一个标志位,以记录能否推出ε。其值有三种情况:“未定”、“是”、“否”。 例如,本例中: (2)其次,按下述步骤逐步更新标志位: 依次扫描文法每一条产生式 删除所有右部含终结符的产生式。若因此使得以某非终结符为左部的所有产生式都被删除,则置该非终结符的标记为“否”。 若某非终结符存在一条右部为ε的产生式,则置该非终结符的标志为“是”,并删除以该非终结符为左部的所有产生式。同时将对应标识改为“是”。 扫描产生式X→Y1Y2…Yn的右部的每一符号Yi: 若某非终结符Yi标志为“是”,则从X右部删去该非终结符Yi ,若进而使得X产生式右部为空,则置X的标志为“是”,并删除以X为左部的所有产生式。 若某非终结符Yi标志为“否”,则删去X产生式。若因此而使得左部为X的有关产生式都被删去,则置X的标志为“否”。 重复步骤②,直到扫描完一遍文法的产生式,非终结符标志位不再改变为止。 结果如下页所示。 (1)单个文法符号的FIRST 对于文法中的每一个符号X?(VN∪VT),构造FIRST(X)时,只要连续使用下列步骤,直至FIRST集不再扩大为止。 若X?VT,则FIRST(X)={X}; 若X?VN,存在X→?产生式,则??FIRST(X); 若X?VN,存在X→a…产生式,a ?VT ,则a?FIRST(X); 若X→Y1Y2…Yn是产生式,当Y1, …, Yi-1都?VN且都能 ?(其中1≤i≤n),则 FIRST(X) =: (FIRST(Y1)-{?})∪(FIRST(Y2)-{?})∪…∪(FIRST(Yi-1)-{?})∪FIRST(Yi) 若所有的Yi均 ?,i=1, 2, …, k,则: FIRST(X)= FIRST(Y1)∪FIRST(Y2)∪…∪FIRST(Yn)∪{?} 本例中,非终结符的FIRST集如下: FIRST(E)={(,i} FIRST(E‘)={+,-,ε} FIRST(T)={(,i} FIRST(T’)={*,/, ε} FIRST(F)={(,i} (2)符号串的FIRST 对符号串?=X1X2…Xn,可按下示步骤构造FIRST (?): 若?=?,则FIRST(?)={?}; 若X1不能 ? ,则FIRST(?)=FIRST(X1) ; 若对任何1≤j≤i-1,2≤i≤n,有??FIRST(Xj),则 特别地,若所有FIRST(Xj)均含有?(1≤j≤n),则 本例中各个候选式的FIRST集如下: FIRST(+TE’)={+} FIRST(-TE’)={-} FIRST(TE’)={(,i} FIRST(*FT’)={*} FIRST(/FT’)={/} FIRST(FT’)={(,i} FIRST((E))={(} FIRST(i)={i} 4. 判断是否存在回溯,若存在,则消除回溯 本例中得非终结符的FOLLOW集 FOLLOW(E)={#,)} FOLLOW(T)={+,-,#,)} FOLLOW(F)={*,/,+,-,#,)} FOLLOW(E‘)={#,)} FOLLOW(T’)={+,-,#,)} 本例中的LL(1)分析表如下: 【解】按如下步骤进行: 一、判断G[E]是否为LL(1)文法 判断是否存在左递归,若存在,则消除左递归; 确定每一个非终结符能否?ε; 求解所有非终结符、所有候选式的FIRST集; 判断是否存在回溯,若存在,则消除回溯; 求所有非终结符的FOLLOW集; 构造LL(1)分析表; 判断是否为LL(1)文法。 二、使用LL(1)分析法识别指定符号串; 三、根据识别过程,绘出语法分析树。 E’→+TE’ E’ →-TE’ E →TE’ T’ →*FT’ T’ →/FT’ T →FT’ F →(E) F →i E’ →ε T’ →ε P83~85 未定 未定 未定 未定 未定 初值 T E F T E 2. 确定每一个非终结符能否推出ε 是 是 未定 未定 T 观察右部符号 是 否 否 否 4 右部含ε的产生式 是 否 未定 未定 3 删除右部含终结符的产生式 未定 否 未定 未定 2 初始化 未定 未定 未定 未定 1 备注 E F T E 遍序 非终结符能否推出ε的情况: 3. 求FIRST集
文档评论(0)