自上而下语法分析

合集下载

语法分析自上而下分析

语法分析自上而下分析
(), ∈V*, ∈V+ } 若S u A ,且 ε ,则#∈FOLLOW(A)
2019/9/8
中南大学软件学院 陈志刚
23
第四章 语法分析-自上而下分析
计算FIRST集
1.若XV,则FIRST(X)={X}
2.若XVN,且有产生式Xa…,则把a加入到 FIRST(X)中;若X也是一条产生式,则把也 加到FIRST(X)中.
2019/9/8
中南大学软件学院 陈志刚
20
第四章 语法分析-自上而下分析
1、LL(1)分析法的工作过程
开始往栈stack中放“#”,然后把文件开 始符号压栈。预测分析程序总是按stack栈顶符 号X和当前输入符号a行事。 ① 若X=a=”#”,则分析成功,停止分析 ② 若X=a”#”,则把X从栈顶弹出,a指向下一个
2019/9/8
中南大学软件学院 陈志刚
6
第四章 语法分析-自上而下分析
4.2 自上而下分析面临的问题
顾名思义,自上而下就是从文法的开始符号出 发,向下推导,推出句子。 • 带回溯的分析方法 • 不带回溯的递归子程序(递归下降)分析方 法
自上而下分析的主旨: 对任意输入串,试图用一切可能的办法,从文 法开始符号(根结)出发,自上而下地为输入 串建立一棵语法树。或者说,为输入串寻找一 个最左推导。
中南大学软件学院 陈志刚
10
第四章 语法分析-自上而下分析
其次,由于回溯就碰到一大堆麻烦事情。如果 我们走了一大段错路,最后必须回头,那么, 就应把已经做的一大堆语义工作推倒重来。
第三,在上述的自上而下分析过程中,当一个 非终结符用某一个候选匹配成功时,这种成功 可能仅是暂时的。
第四,当最终报告分析不成功时,我们难于知 道输入串中出错的确切位置。

编译原理张晶版 第四章 自上而下语法分析

编译原理张晶版 第四章 自上而下语法分析

1、消除左递归
•1) 什么是左递归 —左递归:文法存在产生式 P + Pa —直接左递归: P —间接左递归:P Pa Aa ,A + Pb
•2)消除左递归
—消除直接左递归 —消除间接左递归
第四章 自上而下语法分析(23)
第二节 自上而下分析法的一般问题 三、不带回溯的自上而下分析算法
2、消除直接左递归
第四章 自上而下语法分析(44)
第三节 预测分析程序与LL(1)文法 二、求串a的终结首符集和非终结符A的随符集
例:对如下文法G(已加上编号)
1. E
4. T 7. F
TE’
FT’ i
2. E’
5. T’ 8. F
+TE’
*FT’ (E)
3.E’
6.T’
e
e
求各非终结符号的终结首符集和随符集
第四章 自上而下语法分析(45)
第四章 自上而下语法分析(47)
第三节 预测分析程序与LL(1)文法 二、求串a的终结首符集和非终结符A的随符集
例:对如下文法G(已加上编号)
1. E
4. T 7. F
TE’
FT’ i
2. E’
5. T’ 8. F
+TBiblioteka ’*FT’ (E)3.E’
6.T’
e
e
求各非终结符号的终结首符集和随符集
第四章 自上而下语法分析(48)
第四章 自上而下语法分析(40)
第三节 预测分析程序与LL(1)文法 三、构造预测分析表
1. 基本思想 1)若A a是一个产生式,a ∈ First(a),那么当A 是栈顶符号且将读入a时,选择a取代A匹配成功的 希望最大,故,M[A,a]元素为A a 2)若A a而a=e,或a + e;当A是栈顶符号且将读 入a时,若a ∈ Follow(A),则栈顶的A应被e匹配; 此时读头不前进,让A的随符与读头下的符号进行 匹配,这样输入串匹配成功的可能最大,故M[A,a] 元素为A a(这里a=e或a + e)

第四章 语法分析——自上而下分析

第四章 语法分析——自上而下分析

解二: 规定顺序:S、Q、R
则等价的无左递归的文法: SQc | c QRb| b RbcaR’ | caR’ | aR’ R’bcaR’ |
RSa | a RQca | ca | a
RRbca|bca | ca | a
RbcaR’|caR’ | aR’ R’ bcaR’|
(因为不需要试探某个候选式,而是准确地指派 某个候选式)
17
终结首符集FIRST
令文法G不含左递归,对它的所有非终结符的每 个候选式定义终结首符集 FIRST(): * FIRST()={a | a , a∈VT }
特别地 * 若 ,则规定 ∈ FIRST()
显然, FIRST()是从推导出的所有可能的开头终 结符a或 。
3
§4.2 自上而下分析面临的问题
一、带‚回溯‛的自上而下分析方法:
自上而下分析方法,就是对任何输入串,试 图用一切可能的方法,从文法的开始符号出发, 自上而下地为输入串建立一个语法树(或最左推 导)。 这种分析过程实质上是一种试探过程,即反 复使用不同的产生式以求能匹配输入串。
4
例4.1 设有文法: SxAy
解: S iCtSA | a
A | eS
C b
22
4.3.3 LL(1)分析条件 当一个文法不含左递归,并且满足每个非终结 符的所有候选首符集两两不相交,是不是一定能进 行有效的自上而下的语法分析呢?
若存在 ∈ FIRST() ,则问题较复杂,需要进 一步考虑。 定义:非终结符A的 FOLLOW 集:
* FOLLOW(A)= { a| S …Aa… ,a∈VT } 特别地, * 若S …A,则规定,构造FIRST(X)
a) 若X∈VT,则 FIRST(X)={X}。

第五章自上而下语法分析

第五章自上而下语法分析

第五章⾃上⽽下语法分析第五章⾃上⽽下语法分析1、教学⽬的及要求:本章介绍编译程序的第⼆个阶段语法分析的设计⽅法和实现原理,包括⾃上⽽下分析的⽆回朔的递归下降分析、 LL(1)分析法。

要求理解递归下降分析、LL(1)⽂法的基本概念;掌握⽆回朔的递归下降分析的设计和实现、LL(1)分析表的构造与分析⽅法。

◇能够对⼀个给定的⽂法判断是否是LL(1)⽂法;◇能构造预测分析表;◇能⽤预测分析⽅法判断给定的输⼊符号串是否是该⽂法的句⼦;◇能对某些⾮LL(1)⽂法做等价变换:①消除左递归②提取左公共因⼦可能会变成LL(1)⽂法。

这样可扩⼤⾃顶向下分析⽅法的应⽤。

2、教学内容:语法分析器的功能,⾃上⽽下语法分析(递归下降分析法,预测分析程序),LL(1)分析法,递归下降分析程序构造,预测分析程序。

3、教学重点:递归下降⼦程序,预测分析表构造,LL(1)⽂法。

4、教学难点:对⼀个⽂法如何判断是否是LL(1)⽂法,由于在判断 LL(1)⽂法时⽤到⽂法符号串的开始符号集合(FIRST集)和⾮终结符后跟符号集合(FOLLOW集)的计算,⽽⼀般学⽣往往因概念不清或不够细⼼对这两个集合的计算常常出错,导致判断和分析结果的错误。

5、课前思考为了了解⾃顶向下(⾃上⽽下)分析的⼀般过程和问题,请学⽣⾸先回顾本章之前介绍的有关基本概念:◇句⼦、句型和语⾔的定义是什么?◇什么叫最左推导?◇什么叫最右推导和规范推导?◇什么叫确定的⾃顶向下语法分析?◇⾃顶向下语法分析是从⽂法的开始符号出发,反复使⽤各种产⽣式,寻找与输⼊符号匹配的推导。

◇确定的⾃顶向下语法分析中⽤的是哪种推导?◇在确定的⾃顶向下语法分析过程中,当以同⼀个⾮终结符为左部的产⽣式有多个不同右部时,如何选择⽤哪个产⽣式的右部替换当前的⾮终结符?◇确定的⾃顶向下语法分析对⽂法有何限制?6、章节内容第⼀节概述第⼆节 LL(1)分析⽅法第三节递归下降分析法5.1 概述LL分析法确定的⾃上⽽下分析⾃上⽽下分析递归下降分析法语法分析不确定的⾃上⽽下分析——即带回溯的分析⽅法算符优先分析⾃下⽽上分析LR分析⼀、带回溯的⾃顶向下分析⽅法是⾃顶向下分析的⼀般⽅法,即对任⼀输⼊符号串,试图⽤⼀切可能的办法,从树根结点(识别符号)出发,根据⽂法⾃上⽽下地为输⼊串建⽴⼀棵语法树,或者说,从识别符号开始,根据⽂法为输⼊串建⽴⼀个推导序列,这种分析过程本质上是⼀种试探过程,是反复使⽤不同规则谋求匹配输⼊串的过程。

语法分析—自上而下分析

语法分析—自上而下分析
是一种试探过程,是反复使用不同产生 式谋求匹配输入串的过程。
9
§4.2 自上而下面临的问题
例:文法 SxAy A**|*
输入串α :x*y
S x Ay
S x Ay **
S x Ay
*
10
注:
• 回溯法也称试探法,它的基本思想是:从问题的 某一种状态(初始状态)出发,搜索从这种状态 出发所能达到的所有“状态”,当一条路走到“ 尽头”的时候(不能再前进),再后退一步或若 干步,从另一种可能“状态”出发,继续搜索, 直到所有的“路径”(状态)都试探过。这种不 断“前进”、不断“回溯”寻找解的方法,就称 作“回溯法”。
三、分析条件
1.当一个文法不含左递归,并且满足每个非终结符的 所有候选首符集两两不相交的条件,是不是就一定能 进行有效的自上而下分析了呢?
28
§4.3 LL(1)分析法
例:文法
EE+T|T TT*F|F F(E)|i
E T E’
经消去直接左递归后变成 ETE’ E’+TE’|ℇ TFT’ T’*FT’|ℇ F(E) |i
FIRST(A)
2.A→ε
3.A→X1 X2......XK
*
(1) * a..X2....... FIRST(X1)/{ε}
(2) * ε X2.......
FIRST(X2)/{ε}
ε
(3) * εε......ε
36
FIRST集
1.First(X)集合构造,X∈VT∪VN
例:求下题的FIRST集
25
§4.3 LL(1)分析法
3.提取公共左因子 A.事实上,许多文法均存在这样的非终结符,
其所有候选的终结首符集并非两两不相交。

编译原理-自上而下的语法分析

编译原理-自上而下的语法分析

高效性
由于从文法的最顶端开始分析, 一旦发现不匹配,就可以立即终 止当前分支的搜索,避免不必要 的计算,提高了编译器的效率。
易于处理左递归文

自上而下的分析方法可以很方便 地处理含有左递归的文法,而左 递归是许多实际编程语言的重要 特征。
局限性
无法处理左边界问题
自上而下的分析方法在处理某些含有左边界的文法时可能 会遇到问题,因为这种方法会优先匹配最左边的符号,而 左边界问题需要从右往左匹配符号。
案例三
在编译器优化中,自上而下的语法分析被用 于识别和修改源代码中的冗余和低效的语法 成分。例如,在C编译器的实现中,自上而 下的语法分析可以用于优化循环结构,减少 不必要的循环次数,提高程序的执行效率。
自上而下的语法分析还可以用于代码生成和 代码生成器的实现。通过识别和解析源代码 中的语法成分,可以生成更高效、更安全的 机器代码或字节码,提高程序的执行效率和
安全性。
THANKS
感谢观看
详细描述:递归下降分析算法易于理解,每个产生式规 则对应一个函数,函数的实现相对简单明了。
详细描述:对于每个产生式规则,需要编写相应的递归 函数,可能会导致代码冗余。
移入-规约分析算法
总结词
基于栈的算法
详细描述
移入-规约分析算法是一种自上而下的语法分 析算法,它将目标语句从左到右依次读入, 并根据文法的产生式规则进行移入或规约操 作,直到找到目标语句的语法结构。
词法分析
词法分析是编译过程的第一步,也称为扫描或词法扫描。它的任务是从左 到右读取源代码,将其分解成一个个的记号或符号。
词法分析器通常使用正则表达式或有限自动机来识别和生成记号,这些记 号可以是关键字、标识符、运算符、标点符号等。

语法分析最常用的两类方法

语法分析最常用的两类方法

LL分析法和LR分析法。

1、自上而下语法分析方法(LL分析法)
给定文法G和源程序串r。

从G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r 。

是一种产生的方法,面向目标的方法。

分析的主旨为选择产生式的合适的侯选式进行推导,逐步使推导结果与r匹配。

2、自下而上语法分析方法(LR分析法)
从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号S。

是一种辨认的方法,基于目标的方法。

分析的主旨为寻找合适的子串与P的侯选式进行匹配,直到归约到G的S为止。

扩展资料
LALR分析器可以对上下无关文法进行语法分析。

LALR即“Look-AheadLR”。

其中,Look-Ahead为“向前看”,L代表对输入进行从左到右的检查,R代表反向构造出最右推导序列。

LALR分析器可以根据一种程序设计语言的正式语法的产生式而对一段文本程序输入进行语法分析,从而在语法层面上判断输入程序是否合法。

实际应用中的LALR分析器并不是由人手工写成的,而是由类似于yacc和GNU Bison之类的LALR语法分析器生成工具构成。

由机器自动生成的代码相比较于程序员手工的代码,拥有更好的运行效率而且减少了程序员的工作量。

自上而下语法实验报告

自上而下语法实验报告

自上而下语法分析自上而下语法分析一、实验目的:1、根据某一文法编制调试递归下降分析程序,对任意输入的符号串进行分析。

、根据某一文法编制调试递归下降分析程序,对任意输入的符号串进行分析。

2、根据某一文法编制调试LL LL((1)分析程序,对任意输入的符号串进行分析。

)分析程序,对任意输入的符号串进行分析。

3、本次实验的目的主要是加深对自上而下分析法的理解。

、本次实验的目的主要是加深对自上而下分析法的理解。

二、实验内容:(一)程序的功能描述(一)程序的功能描述LL LL((1)分析法的功能是利用LL LL((1)控制程序根据显示栈栈顶内容、向前看符号以及LL LL((1)分析表,对输入符号串自上而下的分析过程。

具体描述如下:)分析表,对输入符号串自上而下的分析过程。

具体描述如下: 对下列文法,对任意输入的符号串进行分析:对下列文法,对任意输入的符号串进行分析:(1)E->TG (2)G->+TG (3)G->ε(4)T->FS (5)S->*FS (6)S->ε (7)F->(E) (8)F->i输入一以输入一以##结束的符号串结束的符号串((包括包括++—*/*/()()()i#)i#)i#)::输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:分析栈分析栈 剩余输入串剩余输入串 所用产生式所用产生式 E i+i*i# E->TG其中有如下两点要求:其中有如下两点要求: 1.1.表达式中允许使用运算符(表达式中允许使用运算符(表达式中允许使用运算符(+-*/+-*/+-*/))、分割符(括号)、字符I ,结束符,结束符##; 2.2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);(二)(二)LL LL LL((1)分析法实验设计思想及算法)分析法实验设计思想及算法三、程序设计的过程以及关键函数的功能 (一)模块结构:(一)模块结构:1、定义部分:定义常量、变量、数据结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 其中规则1、2、3根据前面的规则②构造,4 根据规则① 构造。
使用例5.2分析句子
给定输入串00c11,所构造的PDA用下面的 移动序列来接收它(注意,我们可从构形 中省掉状态,因为它总是相同的): (q,00c11,S)├4a(q,00c11,0S1)├1(q,0c1 1,S1) ├4a(q,0c11,0S11)├1(q,c11,S11) ├4b(q,c11,c11)├3(q,11,11) ├2(q,1,1)├2(q,ε,ε) (接收)
M=(Q,∑′,H,δ,q0, Z0,F) 它只有一个状态q和下面的转换规则: • ① 对P中每一个形如A→w的产生式,δ(q,ε,A)包含(q,w); • ② 对每个a∈∑,δ(p,a,a)包含(q,ε) 且
– Q={q}
– ∑′=∑ – H=N∪∑
– q0=q – Z0=S – F为终态集(可空)。 这个PDA停止于空栈。
号;
• H 是有穷的下推栈字符表,它的每个元素称为一 个栈符号。
• q0∈Q 是该PDA的初态; • Z0∈H 是下推栈的初始符号; • F Q 是一个终态集(或接收状态集);它的每个
元素称为终态;(可空)。
5.1.1 PDA形式定义
• δ 是描述PDA动作与状态变化的。 PDA的动作可用δ定义式来表示为:
方括号用来表示可选项。[x] = x或,表示符号串x可出现一 次或不出现。可以用来定义某些高级语言中的“条件语句”。
• ③ 圆括号( )
利用圆括号可提出一个非终结符的多个产生式右部的公共因 子。例如,
A→xy|xw|…|xz 可写成 A→x(y|w|…|z)
利用下面的两条规则,可把包含直接左递归的产生式 转换成用扩展BNF表示法表示的产生式。 • ① 提公因子 每当一条产生式中有公因子可提的时候,就把它提出 来,若原产生式是 A→x|xy 则可写成 A→x(y|ε),这里把ε当作最后一个候选式。 • ② 若 A→x|y|…|z|Av 是一组产生式,且它只有一个直接左递归的右部位于 最后,则可把这组产生式变换成如下形式:
δ(q,a,z)={(p1,h1),(p2,h2)…(pn,hn)} 它的含义为: • 在控制器当前状态为q,下推栈顶符号为z ,输
入符号为a的情况下,把控制器的状态改为 pi,用hi 替换栈顶的z,并让读头右移一格。
5.1.2 PDA的 构形和移动
PDA的一个构形是一个三元组:(q,w,h)
• 其中,q∈Q;w∈∑*是尚待扫描的输入串,包括读 头当前所指的符号;h∈H*是栈的内容。
5.1.2 PDA的 构形和移动
• PDA M 所识别的语言L(M)可表示为: L(M)= {ω*︱(P0,ω,Z0)├*(P,,)}(空栈接收)
或者 L(M)= {ω*︱(P0,ω,Z0)├*(P,,h) &pF}
(终态接收)
例5.1 考虑下表定义的两状态PDA,其的两个状态分别是p和 Q,δ(p,a,Z)={(p1,h1),(p2,h2),…},输入符号是0和1,栈符 号是R,B和G。该PDA识别由符号0和1组成的所有回文 (Palindrome) 。
• 回溯现象:在回溯之前,编译程序实 际已经做了大量薄记工作,包括语义 翻译工作在内。在回溯时,要清除这 些内容,然后开始重新薄记,这就降 低了分析效率。
• 左递归现象:回溯使语法分析器的动 作不稳定,左递归会使分析程序进入 到无穷的循环之中,这些问题都和描 述语言的文法有直接关系。
5.2.2 用扩展的BNF表示法消除左递归
• PDA的一次移动可看作是从一种构形变换成另一种 构形的一种方式。反过来,构形又为定义PDA的移 动提供了一种更简单的手段。我们称
(q,ax,Zh′)├(p,x,hh′)
是一次可能的移动,当且仅当(p,h)∈δ(q,a,Z) 。 • 常用├+表示由一次或多次移动组成的序列。用├*表
示由零次或多次移动组成的序列。注意“零”次移 动并不改变当前的构形。
例5.2 考虑文法
S→0S1|c 该文法描述语言0*c1*,其中0的个数和1的个 数相等。转换规则是:
• 1.δ(q,0,0)=(q,ε) • 2.δ(q,1,1)=(q,ε) • 3.δ(q,c,c)=(q,ε) • 4.δ(q,ε,S)={(q,0S1) ,(q,c)}(其中ε可
与任何合法输入符号匹配)
由行1
• (p,00,GGBBR) ├
或 ├(Q,001100,ε) 由行7(阻
(p,0,BGGBBR) 由行4
塞)
• (p,0,BGGBBR) ├
• (p,01100,BR) ├
(p,ε,BBGGBBR) 由行3a(阻塞)
(p,1100,BBR) 由行3a
或 ├(Q,ε,GGBBR) 由行
或 ├(Q,1100,R) 由行3b
A→Ay 称之为直接左递归产生式。
5.2.1 文法的左递归性
• 若其中y=ε,则有 A→xA
称之为直接右递归产生式。 • 若一文法中至少含有一条递归产生式,
或在用该文法推导符号串的过程中, 存在AA…或A…A或A…A…形式 的推导,则称该文法是(直接)递归的。
非确定的自顶向下分析存在的问题
• .非确定的自上而下的分析法:对任何输入 串W试图用一切可能的办法,从文法的开始 符号出发,自上而下地为它建立一棵语法 树。或者说,为输入串寻找一个最左推导, 如果试探成功,则W为相应文法的句子,否 则W就不是文法的句子。这种分析过程本质 上是一种穷举试探过程,反复使用不同的 规则,谋求匹配输入串的过程。
• 本章中,我们通过讨论一个一般的非确定的自 上而下分析器来讨论上下无关语言的自上而 下分析器的设计。
5.1 非确定的下推自动机
• 下面所要构造的非确定的自上而下分析器 属于一般的下推自动机(PDA)类。
• 所谓一个下推或栈自动机(Stack Automaton),非形式地说,应包含:
–①一个输入符号串;
• (Q,ε,R) ├(Q,ε,ε) 由行 10(接收)
5.1.3 上下文无关语言与PDA
联系PDA和上下文无关语言的一个重要 定理是: • 定理5.1 对每一个上下文无关语言L, 存在一个恰好识别L的非确定的PDA M, 反之亦然。 • 这个定理在编译系统中的实际重要性 在于:现有的大多数高级程序设计语 言都可用上下文无关文法描述。因此 定理5.1隐含了:识别这个语言的机械 识别器必是PDA。
A→(x|y|…|z){v} • 也就是说,使用上述规则①,可把产生式改写成相对
于某个非终结符而言,至多只含一个直接左递归的右 部;然后,利用上述规则②消除这个直接左递归。
5.2.3 直接改写文法
• 设产生式 U→ Uxy
此产生式称为直接左递归形式。其中,x和y 是两个符号串,y的首字符不是U。 • 产生式为直接左递归形式,可直接改写为一 个等价的非直接左递归形式
如果x是一个终结符串,而且h中至多最左符号是
终结符,那么,(q,y,h)是该NDPDA的一个构形,
而且
(q,xy,S)├*(q,y,h)
5.2 消除左递归方法
5.2.1 文法的左递归性
• 文法的左递归性属文法递归性的一种, 在一文法中,所有形如
A→xAy x,y ∈(∑∪N) *,A∈N
称为递归产生式(或自嵌入产生式)。 • 若其中x=ε,则有
输入串,栈和句型
由算法5.1构造的非确定的PDA的一个有趣
特性是由下面的定理表示出来的。
• 定理5.2 令(q,y,h)是某个文法G相关的 NDPDA的任意构形,其中输入串是xy,如果
(q,xy,S)├*(q,y,h)
• 那么xh是G的一个最左句型,换言之,S=* >xh(S是G的开始符号)。
• 上述定理反过来也成立:给定G中的任何句型xh,
U→ y1U y2U…ynU U → x1U x2U…xmU
• 消除左递归举例。
例如 :有文法:
S→Sa 可改写为:S→bSˊ
S→b
Sˊ→aSˊ|ε
表达式文法: 消除左递归后:
E→E+T|T
E→TEˊ Eˊ→+TEˊ|ε
T→T*F|F
T→FTˊ Tˊ→*FTˊ|ε
F→(E)|i
F→(E)|i
• 消除间接左递归
U→ yU U → xU • 其中U是新引进的非终结符号。显然,这种 形式与原形式是等价的,即从A推出的符号串 是相同的。
• 直接左递归更一般的形式 U→ Ux1Ux2…Uxmy1y2…yn
其中,xi (i=1, 2, …, m) yi (i=1, 2, …, n), yj的头字符都不是U, xi 都不 是,则有
5.1.3 上下文无关语言与PDA
• 定理5.1包含两方面含义: –给定一个上下文无关语言,存 在一个识别它的PDA M; –反过来,给定一个PDA M,可以 根据它构造出一个等价的上下文 无关文法。 前者对编译程序的构造很有吸引 力,但后者则不然。
算法5.1 从CFG到NDPDA
• 给定 CFG G=(N,∑,P,S) 可以构造 一个相应的非确定的PDA M:
1.重新改写文法
2.先将间接左递归变为直接左递归,然后再按上述方法消 除。
例(1)A→aB 用(1)(2)去替换(3)中的A可得:
(2)A→Bb
(1)B→aBc
(3)B→Ac
(2)B→Bbc
(4)B→d
(3)B→d
消除左递归后可得:
B→(d|aBc)Bˊ
Bˊ→bcBˊ|ε
最终文法为:
(1)A→aB
(2)A→Bb
第五章 自上而下语法分析
• 语法分析是继词法分析之后编译过程的第2阶 段。它的主要任务是对词法分析的输出结 果——单词序列进行分析,识别合法的语法 单位。
• 语法分析最常用的方法有:优先方法、递归 下降法、LL方法和LR方法。
相关文档
最新文档