编译原理 第4章1

合集下载

中国科学技术大学陈意云编译原理全套参考资料chapter4

中国科学技术大学陈意云编译原理全套参考资料chapter4

中国科学技术大学陈意云编译原理全套参考资料chapter4 第四章语法制导的翻译在3.7节用Yacc写的例子中,我们看到一种有用的描述形式:语言结构的属性附加在代表语言结构的文法符号上,这些属性值由附加在文法产生式的语义动作来计算,这些语义动作在归约对应的产生式时进行计算,由此得到结果。

这种描述形式可用来描述编译器的语义分析,因此本章系统地研究这种称之为“语法制导下的语言翻译”的描述方法及其实现。

它的语义动作(有时称为语义规则)的计算可以产生代码、把信息存入符号表、显示出错信息、或完成其它工作。

语义规则的计算结果就是我们所要的记号流的翻译。

本章讨论语义规则和产生式相联系的两种方式:语法制导的定义和翻译方案。

语法制导定义是较抽象的翻译说明,它隐蔽了一些实现细节;而翻译方案陈述了一些实现细节,主要是指明了语义规则的计算次序。

在第五章说明语义检查和第七章描述中间代码生成时,大量使用这两种方法。

本章还讨论语法制导定义和翻译方案的实现方法。

概念上的方法是,首先分析输入的记号串,建立分析树,然后从分析树得到描述结点属性间依赖关系的有向图,从这个依赖图得到语义规则的计算次序,然后进行计算,最终得到翻译的结果。

实际的实现并不需要按上面步骤逐步进行,本章将讨论几种不同限制下的实现方法。

4.1 语法制导的定义语法制导的定义是上下文无关文法的推广,其中每个文法符号都有一个属性集合,它分成两个子集,分别叫做该文法符号的综合属性集合和继承属性集合。

如果我们把分析树上的结点看成是保存对应文法符号的属性的记录,那么属性对应记录的域。

属性可以表示任何东西:串、数、类型、内存单元,或其它想表示的东西。

分析树结点的属性值由该结点所用产生式的语义规则定义。

在语法制导定义中,我们把其中的文法称为基础文法。

本节介绍语法制导定义的形式及其概念上的实现模型。

4.1.1 语法制导定义的形式在语法制导定义中,每个文法符号有一组属性,每个文法产生式A , ,有一组形式为b := f (c, c, …, c )的语义规则,其中f 是函数,b和c, c, …, c 是该产生式的文法符号的12k12k属性,并且:(1) 如果b是A的属性,c , c , …, c 是产生式右部文法符号的属性或A的其它属12k性,那么b叫做文法符号A的综合属性。

蒋立源编译原理第三版第四章习题与答案.docx

蒋立源编译原理第三版第四章习题与答案.docx

第五章习题5-1设有文法G[S] :S→A/A→aA∣ AS∣/(1)找出部分符号序偶间的简单优先关系。

(2)验证 G[S] 不是简单优先文法。

5-2对于算符文法G[S] :S→E E→ E-T∣ T T→T*F∣F F→ -P∣P P→ (E)∣i(1)找出部分终结符号序偶间的算符优先关系。

(2)验证 G[S] 不是算符优先文法。

5-3 设有文法G′[E] :E→E E→E+T |T1T →T T→T*F|F F→(E)|i11111其相应的简单优先矩阵如题图5-3所示,试给出对符号串(i+i )进行简单优先分析的过程。

题图 5-3 文法 G′ [E] 的简单优先矩阵5-4设有文法G[E]:E→E+T|TT→T*F|FF→(E)|i其相应的算符优先矩阵如题图5-4 所示。

试给出对符号串(i+i )进行算符优先分析的过程。

(i*+)#(○○○○○<<<<=i○○○○>>>>○○○○○○*<<>>>>○○○○○○+<<<>>>○○○○)>>>>○○○○#<<<<题图 5-4文法 G[E] 的算符优先矩阵5-5对于下列的文法,试分别构造识别其全部可归前缀的DFA和 LR(0) 分析表,并判断哪些是LR(0) 文法。

(1)S →aSb∣ aSc∣ ab(2)S →aSSb∣ aSSS∣c(3)S →AA→Ab∣ a5-6下列文法是否是SLR(1)文法?若是,构造相应的SLR(1) 分析表,若不是,则阐明其理由。

(1) S →Sab∣ bR R→S∣a(2) S →aSAB∣ BA A→aA∣ B B→ b(3) S →aA∣bB A→cAd∣εB→cBdd∣ε5-7对如下的文法分别构造LR(0) 及 SLR(1) 分析表,并比较两者的异同。

S→cAd∣ b A→ASc∣a5-8对于文法G[S]:S→A A→BA∣εB→ aB∣ b(1)构造 LR(1) 分析表;(2)给出用LR(1)分析表对输入符号串abab 的分析过程。

编译原理课后习题答案ch4

编译原理课后习题答案ch4

注意:本题应该理解为对图(a)进行确定化和对图(b)进行最小化。提供的答案没有对图(a)确 定化。
盛威网()专业的计算机学习网站 14
《编译原理》课后习题答案第四章
第5题 构造一个 DFA,它接收 Σ={0,1}上所有满足如下条件的字符串:每个 1 都有 0 直接跟在 右边。并给出该语言的正规式。 答案: 按题意相应的正规表达式是(0*10)*0*, 或 0*(0 | 10)*0* 构造相应的 DFA, 首先构造 NFA 为
7
《编译原理》课后习题答案第四章
注意:这个题,也可以这样构造 NFA(用最少的ε,但注意不能出错) :
a,b 0 a a 2 a,b 1 a b 3
盛威网()专业的计算机学习网站
8
《编译原理》课后习题答 ε X b A ε F B a C b ε b G b H ε ε D ε E a I b Y
除 X,A 外,重新命名其他状态,令 AB 为 B、AC 为 C、ABY 为 D,因为 D 含有 Y(NFA 的终态),所以 D 为终态。 . X A B C D DFA 的状态图:: 0 . A C A C 1 A B B D B
(2)先构造 NFA: 0 ε X 1 A ε ε F B 1 C 1 0 ε 0 D 1 E 1 0 ε 用子集法将 NFA 确定化 ε X T0=X A T1= ABFL Y CG T2= Y T3= CGJ DH K T4= DH EI T5= ABFKL T6= ABEFIL EJY T7= ABEFGJLY EHY CGK T8= ABEFHLY EY CGI T9= ABCFGJKL DHY T10= ABEFLY T11= CGJI DHJ T12= DHY T13= DHJ EIK T14= ABEFIKL ABEFIKL EJY CG DHJ ?正确 DHJG EI EIK DHY EY DHJ CG K ABEFLY CGJI DHY CGK ABEFHLY ABCFGJKL EY CGI ABEFGJLY EHY CGK ABEFIL Y EJY CG CG DH ABFKL EI DH K Y CGJ ABFL Y CG X A 0 1 1 ε L ε K ε J 0 Y

编译原理龙书第四章答案

编译原理龙书第四章答案

编译原理龙书第四章答案编译原理是计算机科学中的一门基础课程,是用于教授计算机程序的设计、构建和优化的学科,常常被用于编写编译器和解释器。

在编译原理课程中,龙书(Compilers: Principles, Techniques, and Tools)是一本经典的教材,其中第四章主要讲述了词法分析器的设计和实现。

以下是第四章的答案,按照列表划分:1. 什么是词法分析器?词法分析器(Lexical Analyzer)是编译器的组成部分之一,它用于将程序中的字符序列转换为一系列单词或词法单元(Lexeme),以便后续的语法分析和语义分析使用。

2. 词法分析器的工作流程是什么?词法分析器的工作流程如下:(1)读入字符序列。

(2)将字符序列划分为一个个词法单元,或者检查字符序列是否合法。

(3)生成一个词法单元序列,并将其传递给语法分析器。

3. 词法单元的定义是什么?词法单元是编程语言中的一个基本单元,它是对代码中的一个单一概念进行编码的基本方式。

例如,在C语言中,词法单元包括关键字(如int,if,while等)、标识符(Identifier,即自定义变量名)、运算符和特殊符号等。

4. 有哪些方法可以实现词法分析器?可以使用正则表达式、自动机等方法实现词法分析器。

其中,正则表达式可以表示字符串的集合,因此可以将其用于识别单词类别;自动机是根据输入字符序列转换状态的一种计算模型,因此可以用于实现有限自动机(Deterministic Finite Automaton)和非确定有限自动机(Nondeterministic Finite Automaton)等。

5. DFA和NFA分别是什么?DFA和NFA都是有限自动机的一种,但在转换动作上有所不同。

DFA 是确定的有限自动机,即在状态转换时只有唯一的一个选择;而NFA 是非确定的有限自动机,即在状态转换时可以有多个选择。

6. DFA和NFA之间有什么关系?DFA和NFA虽然在转换动作上不同,但它们可以互相转化。

编译原理第4章答案

编译原理第4章答案

第四章 词法分析1.构造下列正规式相应的DFA :(1) 1(0|1)*101(2) 1(1010*| 1(010)*1)*0 (3) a((a|b)*|ab *a)*b (4) b((ab)*| bb)*ab 解:(1)1(0|1)*101对应的NFA 为下表由子集法将NFA 转换为DFA :(2)1(1010*| 1(010)*1)*0对应的NFA 为 10,1下表由子集法将NFA转换为DFA:(3)a((a|b)*|ab *a)*b (略) (4)b((ab)*| bb)*ab (略)2.已知NFA=({x,y,z},{0,1},M,{x},{z})其中:M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)=φ,M(z,1)={y},构造相应的DFA 。

解:根据题意有NFA 图如下下表由子集法将NFA 转换为DFA :0,1下面将该DFA最小化:(1)首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F}(2)区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。

由于F(B,0)=F(C,0)=C,F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。

有P21={C,F},P22={B}。

(3)区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。

(4)由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。

(5)综上所述,DFA可以区分为P={{A},{B},{D},{E},{C,F}}。

所以最小化的DFA如下:3.将图确定化:1101111解:下表由子集法将NFA 转换为DFA :4.把图的(a)和(b)分别确定化和最小化:(a) (b)解: (a):下表由子集法将NFA 转换为DFA :0,1a可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除B ,将原来引向B 的引线引向与其等价的状态A ,有图(a2)。

wsx(编译原理第04章)词法分析

wsx(编译原理第04章)词法分析

VT={a,d} VN={S,A,B}
第19页,共152页
• 2. 将正规文法转换成正规式 文法产生式 正规式 (1)AxB, By A=xy
(2)AxAy (3)AxБайду номын сангаасy
G[s]:SaA AaA AdA Sa Aa Ad
A=xy A=xy
S=aAa A =aAdA a d =(ad)A(ad) =(ad)(ad) S=a(ad)(ad)a =a((ad)(ad)) =a(ad) R=a(ad)
第24页,共152页
• 标识符和保留字的转换图
id letter (letter | digit )* letter或digit 开始
9
letter
10
other
*
11
return(install_id( ))
第25页,共152页
• 无符号数的转换图
num digit+ (.digit+) (E (+ | ) digit+)
•本章目的:讨论词法分析程序的设计原则,单词的描述技术,识 别机制及词法分析程序的自动构造原理。
第2页,共152页
本章重点 • 单词的描述工具
• 单词的识别系统
• 设计和实现词法分析程序 – 首先需要描述和刻画程序设计语言中的原子 单位——单词,其次需要识别单词和执行某 些相关的动作。 – 描述程序设计语言的词法的机制是正则表达 式,识别机制是有穷状态自动机。
E digit 开始 digit 12 13 .
14
digit digit
15
digit E +/ digit
digit
18
16

编译原理(第三版)第4章课后练习及参考答案中石大版第4章课后练习及参考答案

编译原理(第三版)第4章课后练习及参考答案中石大版第4章课后练习及参考答案

第4章练习P72作业布置:P723,7,9,11提示1:判断两个正规式是否相等,应判断两个正规式所产生的正规集是否一样。

完成此项任务需要经过四个阶段:第一,画出正规式的NFA;第二,由NFA变换到DFA;第三,将DFA最小化;第四,画出最小化DFA的有限自动机。

如果要判断的正规式的最小化DFA的有限自动机是一样的,则正规式等价;反之,则不等价。

提示2:构造正规表达式的最小化的DFA方法是:首先,按规则将正规表达式用NFA表示;其次,使用ε-closure(Move())将NFA转变为DFA;最后使用子集法将DFA最小化。

对于这类题目要多做练习,熟能生巧。

3.将下图确定化:解:下表由子集法将NFA 转换为DFA :7、给文法G[S]: S →aA|bQ A →aA|bB|bB →bD|aQ0,10,1Q →aQ|bD|b D →bB|aA E →aB|bFF →bD|aE|b构造相应的最小的DFA 。

解:由于从S 出发任何输入串都不能到达状态E 和F ,所以,状态E ,F 为多余的状态,不予考虑。

这样,可以写出文法G[S]对应的NFA M :NFA M={k, Σ, f, S, Z}K={S, A, B, Q, D, Z} S={S} Z={Z} F(S, a)=A f(S, b)=Q F(A, a)=A f(A, b)=B f(A,b)=ZF(B, b)=D f(B, a)=QF(Q, a)=Q f(Q, b)=D f(Q,b)=Z F(D, b)=B f(D, a)=A NFA M 的状态转换图为:下表由子集法将NFA 转换为DFA :a由上表可知:(1)因为C、D是DFA的终态,其他是非终态,可将状态集分成两个子集:P1={S, A, B, E, F},P2={C, D}。

(2)因为{A, B}b={C, D}为终态,{S, E, F}b={B, E, F}为非终态,所以P1可划分为:P11={S, E, F},P12={A, B}。

编译原理 第4章 语法分析—自顶向下分析

编译原理 第4章 语法分析—自顶向下分析

例 S::=aABbcd|ε,A::=ASd|ε,B::=SAh|eC|ε,
C::=Sf|Cg|ε,求此文法的每一个非终结符号的
FOLLOW集。
解:FOLLOW(S)={#}∪FIRST(d) ∪(FIRST(Ah)-{ε}) ∪FIRST(f)
={#}∪{d}∪{a,d,h}∪{f} = {a,d,h,f,#}
4)若对于一切1≤i≤n,ε∈FIRST(Xi),则将ε符号加 进FIRST(α)。
例4-1(P62) 有文法: E→TE′ E′→+TE′ E′→ε T→FT′ T′→*FT′ T′→ε F→(E)|i 求文法中非 终结符号以及各 产生式右部符号 串的FIRST集。
解:该文法的非终结符号有E、E′、 T、T′和F。 FIRST(E)=FIRST(TE′) =FIRST(FT′E′)={ ( ,i } FIRST(+TE′)={ + } FIRST(ε)={ε} FIRST(E′)=FIRST(+TE′) ∪FIRST(ε)={+ ,ε} FIRST(T)=FIRST(FT′)={ ( ,i } FIRST(*FT′)={ * } FIRST(T′)=FIRST(*FT′) ∪FIRST(ε)={* ,ε} FIRST((E))={ ( } FIRST(i)={ i } FIRST(F) =FIRST((E)) ∪FIRST(i)={( ,i}
分析法算符优先分析法简单优先分析法优先分析法自底向上带回溯递归下降分析法分析法不带回溯自顶向下语法分析lr回溯示例41p61自顶向下的分析方法就是从文法的开始符号出发按最左推导方式向下推导试图推导出要分析的输开始符号输入符号串自底向上的分析方法从输入符号串开始按最左归约方式向上归约到文法的开始符号
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LL(1)文法的判断条件
例 设有文法G[S]:
S → Ap | Bq A → cA | a B → dB | b
FIRST(Bq) = { b, d }
Bq bq Bq dBq
FIRST(Ap) = { c, a }
AP cAp AP ap
LL(1)文法的判断条件
(2) 设文法G的开始符号为S,对于G的任 何非终结符A,定义非终结符A的后 继符号的集合 * …Aa …且a∈V } FOLLOW(A) ={ a | S
LL(1)文法定义 一个上下文无关文法 G是LL(1)文法, 当 且仅当对 G 中每个非终结符A的任何两 个不同的规则 A→ α | β,满足
SELECT(A→ α)∩SELECT(A→β) = Φ
其中α 、β中至多只有一个能推出ε串。
LL(1)文法的判断条件
LL(1)中的第一个L表明自上而下的 分析是从左到右扫描输入串,第二个L 表明分析过程中使用最左推导,1表示 分析时每一步只需向前看一个符号即可 决定所选用的规则,而且这种选择是准 确无误的。
例4 对下列文法用扩充BNF表示法对其 进行改写。
A→ Ac | Aad | bd | e 分析 规则 A→ Ac | Aad | bd | e 表示了A 所生成的符号串是bd或e开头的后 面跟0个或多个c或 ad 组成。
4.2.2 文法的左递归性和回 溯的消除
所以原文法可以改写成如下形式
A→ ( bd | e) { c | ad }
分析 规则 E→E+T | E-T | T表示了E所生 成的符号串是T开头的后面跟0个或多个+T 或-T组成, 对T规则类似。
4.2.2 文法的左递归性和回 溯的消除
文法G[E]可以改写为:
E→T{ +T | -T }
T→F{ *F | / F } F→(E) | id
4.2.2 文法的左递归性和回 溯的消除
LL(1)文法的判断条件
SELECT(B→bBA ) = FIRST(bBA) = { b } SELECT(B→ε) = FIRST(ε)/{ε} ∪FOLLOW(B)
= { $, d, a }
FOLLOW(B) ={ $, d, a }
A→aB | d B→bBA | ε
LL(1)文法的判断条件
4.1 语法分析程序的功能
2. 自下而上的分析法
从给定的输入串开始,根据文法规 则逐步进行归约,直至归约到文法开始 符号的一种方法;或者说,从语法树的 未端开始,步步向上归约,直至根结点 的分析方法。
4.2 自上而下语法分析法
非确定的自上而下分析法的基本思想是: 对任何输入串W试图用一切可能的 办法,从文法的开始符号出发,自上而 下地为它建立一棵语法树。或者说,为 输入串寻找一个最左推导。如果试探成 功,则W为相应文法的一个句子,否则 W就不是文法句子。
试探分析过程如下图所示:
Aห้องสมุดไป่ตู้
B x B
A
x
A→ Bx B→ x |ε W=x
x
ε
匹配失败
匹配成功
4.2.2 文法的左递归性和回 溯的消除
综上所述,在自上而下分析过程 中,为了避免回溯, 对描述语言的 文法有一定的要求:
4.2.2 文法的左递归性和回 溯的消除
对文法的某个非终结符A,当它有多 个侯选式时:
LL(1)文法的判断条件
为了建立LL(1)文法的判断条件,需引 进三个相关集: FIRST集
FOLLOW集
SELECT集
LL(1)文法的判断条件
(1) 设α是文法G的任一符号串,定义文 法符号串α的首符号集合。 * FIRST(α) = { a | α a…且 a∈V }
T
* ε ,则规定 ε∈ FIRST(α) 若α
FIRST(α) SELECT(A→ α) = FIRST(α)/{ε}∪FOLLOW (A) * 若αε
* 若α / ε
LL(1)文法的判断条件
例 设有文法G[A]: A→aB | d B→bBA | ε
SELECT(A→aB ) = FIRST(aB) = { a } SELECT(A→d ) = FIRST(d) = { d }
A → α1 | α2 | α3 |∙∙∙∙∙∙| αn
若用A匹配输入串时,能根据当前读到 的输入符号a唯一地选择一条规则去匹 备输入串。或者说,能唯一地选择一条 规则进行推导。
4.2.2 文法的左递归性和回 溯的消除
这也就是说,在自上而下分析过程 中,为了避免回溯,要求描述语言的 文法是LL(1)文法。
第四章 语法分析
本章讨论程序语言的语法分析方 法,以及语法分析程序的设计原理 和实现技术。
第四章 语法分析

语法分析程序的功能和语法分析方法


自顶向下语法分析法
自底向上算符优先分析法 LR分析法
4.1 语法分析程序的功能
语法分析程序的功能
语 法 分 析 器
词法分析后 的单词串
语法成分构 成的语法树 或错误表
4.2.2 文法的左递归性和回 溯的消除
一般情况下,设文法中关于A的规则为 A → Aα1| Aα2| …| Aαm| β1| β2| …| βn 其中每个α都不等于ε,而每个都不 以A开头,消除直接左递归后改写为: A → β1A' | β2A' |…| βnA'
A' → α1A' | α2A' |…| αmA' | ε
4.2.2 文法的左递归性和回 溯的消除
例如,定义C语言中条件语句的文法是
<条件语句>if <布尔表达式> <语句>
if <布尔表达式> <语句>; else <语句>
用扩充BNF表示可改写成如下形式
<条件语句>if <布尔表达式> <语句>[;else<语句>]
4.2.2 文法的左递归性和回 溯的消除
在扩充的BNF表示中
(a) 使用花括号{ α }表示符号串α的 出现可0次或多次,即表示 α*
4.2.2 文法的左递归性和回溯 的消除
例如 定义标识符的文法 <标识符>l<标识符>l<标识符>d 使用扩充BNF表示可改写成 <标识符> l { l | d } (b) 使用方括号[ α ]表示 α 的出现可有可 无,它用来表示可供选择的符号串。
4.2.2 文法的左递归性和回 溯的消除
例2 设有文法G[A]:
A→ Ac | Aad | bd | e
消去直接左接左递归后文法G[A]改写为 A → bdA' | eA' A' → cA' | adA' | ε
4.2.2 文法的左递归性和回 溯的消除
(2) 采用扩充BNF表示法改写含直接左 递归的规则:
LL(1)文法的判断条件
S → aAb A → de | d ∵ SELECT(A→de)= FIRST(de)={d} SELECT(A→d)= FIRST(d)={d} ∴ SELECT(A→de)∩SELECT(A→d) ≠Φ
4.2.2 文法的左递归性和回 溯的消除
A→ Aα | β 其中α 、β是任意的符号串, α不等于 ε , β 不以A开头 对A的规则可改写成如下右递归形式: A → βA' A'→ αA' | ε
4.2.2 文法的左递归性和回 溯的消除
改写以后的形式和原来形式是等价 的。也就是说,从A推出的符号串的集 合是相同的。
4.2.2 文法的左递归性和回 溯的消除
例1 设有文法G[E]: E→ E+T | E–T | T T→ T*F | T/F | F F→ (E) | id
消去非终结符E, T 的直接左递归后, 文法G[E]改写为: E→TE' E' → +TE' | –TE' | ε T→ FT' T' → *FT' | /FT' | ε F→ (E) | id
遇到用A去匹配当前输入符号a时, 无法确定选用唯一的一个候选式,而只 能逐一进行试探,从而引起回溯。具体 表现在下面两种情况。
4.2.2 文法的左递归性和回 溯的消除
第一种情况: 文法中相同左部的 规则,其右部左端第一个符号相同而 引起回溯。 例 设有文法G[S]: S→ aAb A→ de | d
4.2.2 文法的左递归性和回 溯的消除
2. 回溯的消除 在自上而下分析过程中,由于回 溯,需要推翻前面的分析,包括已做 的一大堆语义工作,重新去进行试探, 这样大大降低了语法分析器的工作效 率,因此,需要消除回溯。
4.2.2 文法的左递归性和回 溯的消除
我们分析发现引起回溯的原因是: 在 文法中,当某个非终结符A有多个候选式时: A → α1 | α2 | α3 |∙∙∙∙∙∙| αn
例 设有文法G[A]: A→aB | d B→bBA | ε FOLLOW(B) = { $, d, a } A aB A aB abBA abBd A aB abBA abBaB
LL(1)文法的判断条件
(3) 定义规则的选择集合SELECT,设 A→ α是文法G的任一条规则,其中 A∈VN , α∈(VN∪VT)* ,定义
4.2.2 文法的左递归性和回 溯的消除
用非终结符A去匹配输入串时,使当前句 型的最左非终结符仍然为A。 也就是说,在没有读进任何输入符号的 情况下,又重新要求A去进行新的匹配。 于是,造成无穷循环。
4.2.2 文法的左递归性和回 溯的消除
对含直接左递归的规则进行等价变换, 消除左递归 (1) 引进一个新的非终结符,把含左递归 的规则改写成右递归。 设关于非终结符A的直接左递归的 规则为
相关文档
最新文档