liu-第四章语法分析1.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 语法分析 语法分析是编译程序的核心部分 本章主要介绍语法分析的处理过程 语法分析的任务:识别由词法分析给出的单词符号序列是否是给定文法的正确句子。 即确定语法结构,检查语法错误。 语法分析的方法: 自顶向下分析法 确定的(不带回溯的) 递归子程序(递归下降)分析方法 LL分析法 不确定的(带“回溯”的) 自底向上分析法 算符优先分析法: LR分析法: 自顶向下分析法(Top-down) 基本思想:它从文法的开始符号出发,反复使用各种产生式,寻找“匹配”的推导,推导出与输入的单词串完全匹配的句子。 (一)常用的终结符号集 为了讨论语法分析方法,定义三种终结符号集:First集合 Follow集合 Select集合 1 首符号集合(First集合) 定义:设有文法G,字汇表V,则符号串?的首符号集合(First集合)为 First (?)={a|? =* ay,a∈VT, y, ?∈V*} 若? =* ε则规定ε∈ First(?) 例 有文法G[E] E→T | E+T T→F | T*F F→i | (E) 求First集合 计算First集 1.若X?V?,则First(X)={X} 2.若X?VN,且有产生式X?a…, a∈VT,则把a加入到 First (X)中;若X??也是一条产生式,则把?也加到First (X)中. 3.若X?Y…是一个产生式且Y?VN,则把First(Y)中的所有非?元素都加到First(X)中;若X ? Y1Y2…YK 是一个产生式,Y1,Y2,…,Y(i-1)都是非终结符,而且,对于任何j,1≤j ≤i-1, First(Yj)都含有? (即Y1..Y(i-1) =* ? ),则把First(Yj)中的所有非?元素和First(Yi)中的所有元素都加到First(X)中;特别是,若所有的First(Yj , j=1,2,…,K)均含有?,则把?加到First(X)中. 例 对于文法G(E) E→TE? E?→+TE? | ? T→FT? T?→*FT? | ? F→(E) | i 构造每个非终结符的First集 First(E) ={ (,i } First(E?)={ +, ? } First(T) ={ (,i } First(T?)={ *, ? } First(F) ={ (,i } 2 向前看集(Follow集合) 定义:设有文法G,字汇表V,则非终结符号U的Follow集合为 Follow (U)={a?S=* …Ua…,a∈VT∪{ # }} “#”作为输入串的结束符号 例 有文法G[E] E→T | E+T T→F | T*F F→i | (E) 求Follow集合 计算Follow集 对文法中每一个A,B ∈Vn,计算Follow(B) 连续使用下面的规则,直至每个Follow不再增大为止: 1. 对于文法的开始符号S,置#于Follow(S)中; 2. 若A→?B?是一个产生式,则把First (?)-{?}加至Follow(B)中; 3. 若A→?B或A??B?是一个产生式且? =* ? 则把Follow(A)加至Follow(B)中。 例 对于文法G(E) E→TE? E?→+TE? | ? T→FT? T?→*FT? | ? F→(E) | i 构造每个非终结符的Follow集 Follow (E) ={ ),# } Follow(E?)={ ),# } Follow(T) ={ +,),# } Follow(T?)={ +,),# } Follow(F)={ *,+,),# } 3 可选集(Select集合) 定义:设有文法G,字汇表V,并有规则A-?,则该规则的可选集为 Selcct(A-?)= First(?) 当?不为空? Follow(A) 当?为空? 例 有文法 G[S]: S-aBc|bB B-bB|d| ? 求每条规则的可选集 (二)句子的分析 自上而下分析也称面向目标的分析方法,也就是从文法的开始符号出发企图推导出与输入的符号串完全匹配的句子,若能构造出推导则表明输入串是给定文法的句子,否则表

文档评论(0)

js1180 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档