编译原理-第四章 语法解析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理-第四章 语法解析

为了避免回溯,我们对文法要求是 FIRST(αi)∩ FIRST(αj)=?(i≠j) 即对文法中的任意一个非终结符号,其规则右部有多个选择时, 若由各个选择所推出的终结符号串首符号集合要两两不相交。 这样就可能根据当时读进的符号是属于哪个选择的FIRST(αi),来唯一地确定该选用哪个选择来匹配输入串。 一般地说,如果有规则 U∷=aβ1|aβ2|…|aβn|γ 则可以将这些规则写成 U ∷=aU|γ U∷=β1|β2|…|βn 其中a称为左公因子,经过反复提取公因子即可将每个非终结符的所有选择首符号集变成两两不相交。 注意: 举例: 举例: 在自顶向下分析过程中,假定现在轮到要用非终结符U去匹配输入串, 而在文法中第一条规则是 U∷=U… 它是一条直接左递归规则,这种左递归文法将使上述自顶向下的分析过 程陷入无限循环,即: 当试图用U去匹配输入串时会发现,在没有吃进任何输入符号的情况下,又得重新要求U去匹配,如此循环下去而无终止。 若文法具有间接左递归,即有 U?+U… 那么,也会发生上述问题。 举例: 1)用重复表示法(扩充的BNF表示法)改写语法规则 假定一个文法中有关于非终结符的规则为 A∷=Aα|β 其中α非空,β不以A开头,则等价地改写为 A∷=β{α} 1)用重复表示法(扩充的BNF表示法)改写语法规则 例如,下述直接左递归规则: E∷=E+T|T 可改写为 E∷=T{+T} 1)用重复表示法(扩充的BNF表示法)改写语法规则 再例如,下述直接左递归规则: T∷=T*F|T/F|F 可改写为 T∷=T(*F|/F)|F 再改写为 T∷=F{*F|/F} 这样,改写后的文法消除了直接左递归。 且改写前后的文法是等价的。 2)消除直接左递归 文法规则 A ∷= Aα|β 1 对A引入一个新的非终结符A 2 将A∷=Aα|β等价写成 A ∷= βA A∷= αA|ε 由于β不以A开头,α不以A开头,因此改写后两条规则不是直接 左递归。同样可以证明这种形式和原来形式是等价的。 2)消除直接左递归 A ∷= Aα|β  A ∷= βA A∷= αA|ε 2)消除直接左递归-》一般性方法描述 关于A的规则具有下面形式: A∷=Aα1|Aα2|…|Aαn|β1|β2|…|βn 这时可改写成如下形式: A∷=A(α1|α2|…|αn) |β1|β2|…|βn 由消除直接左递归方法,得 A ∷= (β1|β2|…|βn)A  A∷= (α1|α2|…|αn )A|ε 2)消除直接左递归-》例子 2)消除直接左递归-》例子 注意 例如 A ∷= aB|Bb (1) B ∷= Ac|d (2) 先将(1)代入(2)中,得 B ∷= Bbc|aBc|d (3) 由此将(3)改写为: B ∷=(aBc|d)B’ B’∷= bcB’|? 消除左递归后的等价文法为: A ∷= aB|Bb B ∷= (aBc|d)B’ B’∷= bcB’|? 其中“输入”就是待分析的符号串,它以右界符#作为结尾。 分析表M可用一个矩阵(或二维数组)来表示。它概括了相应文法的全部信息。 分析表的每一行与文法的一个非终结符A相关联,而每一列则与文法的一个终结符号或#相关联。 分析表元素M[A,a](a∈VT U{#})或者指示了当前推导所应使用的产生式,或者指出了输入串中含有语法错误。 分析器对每个输入串的分析在总控程序控制下进行。 1)分析开始时,首先将符号#及文法的开始符号S依次置于分析栈的底部,并把各指示器调整至起始位置,即分别指向分析栈的栈顶元素和输入串的首字符。然后反复执行第2)步 2)设在分析的某一步,分析栈及余留的输入符号串处于如下格局: #X1X2…Xm-1Xm aiai+1…#

文档评论(0)

花开一城 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档