- 14
- 0
- 约9.26万字
- 约 359页
- 2017-03-23 发布于江苏
- 举报
编译原理第四语法分析
为了避免回溯,我们对文法要求是 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…#
您可能关注的文档
最近下载
- RB308A-rev1.7-晶准-恒佳盛一级代理.pdf VIP
- 小学奥数 较复杂的乘法原理.pdf VIP
- 2024年陕西省中考数学真题(学生版+解析版).docx
- 小学奥数 加乘法原理.docx VIP
- 2025烟台南山学院单招《数学》复习提分资料(含答案详解).docx VIP
- 湖南省湘一名校2026届高三上学期12月质量检测物理试卷(含答案).pdf VIP
- 2025年上海高考数学二轮复习:热点题型4 统计与概率(六大题型)原卷版+解析.pdf VIP
- WordExcel2010中文版办公专家从入门到精通.pdf VIP
- 新教材人教A版高中数学选择性必修第三册习题答案.docx VIP
- 专题08 古诗鉴赏(解析版)备战2024年中考语文真题题源解密(全国通用.docx VIP
原创力文档

文档评论(0)