【编译原理】-第5章-语法分析-自下而上分析-Chapt5

合集下载

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

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

*
S A

A
则称是句型相对于非终结符A的短语。 特别是,如果有A,则称是句型
相对于规则A的直接短语 一个句型的最左直接短语称为该句型
的句柄
5.1.7 规范归约例一
▪ 例:文法G[E]:
E→E+T|T
T→T*F|F F→(E)|–F|id
考虑文法G[E]上的句子id1+id2*id3 ➢ 其最右推导和分析树如图5.1(a)、(b)所示
第五章 语法分析—自下而上分析
内容
▪ 自下而上分析基本问题 ▪ 算符优先分析
5.1 自下而上分析基本问题
▪ 自下而上分析基本问题
➢ 归约 ➢ 规范归约 ➢ 符号栈的使用 ➢ 语法树的表示
▪ 算符优先分析
5.1.1 自下而上分析
▪ 自下而上分析
abbcde aAbcde (A b)
➢ 从输入字符的角度而言 aAcde (A Ab)
➢ 最左归约
规范推导
▪ 由规范推导推出的句型称为规范句型。
▪ 规范归约的中心问题:确定句型的句柄。
5.1.2 规范归约简述
▪ 最右推导,推导的每一步结果都是一个右句 型。该推导即分析树 “剪句柄”的全过程。
S
S
S
S
S
a A B ea A B ea A B ea A B e
Ab c d
Ab c d
d
图5.1 id1+id2*id3的最右推导、分析树与短语 (a) 最右推导;(b) 分析树;(c) 短语
5.1.7.1 归约的分析树
▪ 分析树的叶子与短语、直接短语和句柄有下述关系 ➢ 短语 以非终结符为根的子树中所有从左到右排列的 叶子 ➢ 直接短语 只有父子关系的树中所有从左到右排列的叶子 树高为2 ➢ 句柄 最左边父子关系树中所有从左到右排列的叶子 句柄是唯一的

编译原理5第五章

编译原理5第五章

2011年11月7日12时4分
26
算符优先关系的定义 假设G是一个不含ε-产生式的算符文法。对于任何一对终 结符a,b: (1) x = y 当且仅当文法G中含有形如P→…ab…或 P → …aQb…的产生式; …aQb… ; (2) x < y 当且仅当文法G中含有形如P→ …aR…的产生式, + + b…或R⇒Qb…; 而R ⇒ + + (3) x>y 当且仅当文法G中含有形如P→…Rb…的产生式, + + 而R⇒…a或R⇒…aQ; 。
2011年11月7日12时4分
7
S
α
A
δ
β
根据短语的定义可知,以非终结符A为根的子树的叶结 点从左到右排列就是相对于非终结符A的短语β ;如果 子树只有两代,则短语就是直接短语;最左边的两代 子树的所有叶结点从左到右排列,就是该句型的句柄。
2011年11月7日12时4分
例 5.1 考虑文法G[E] E→E+T E→T T→T*F E→F F→(E) E→i 的一个句型i1*i2+i3。
第五章
语法分析--自下而上分析 语法分析--自下而上分析 --
自下而上语法分析就是从输入串开始,逐步进行“归约”, 直至归约到文法的开始符;或者说,从语法树的末端开始, 逐步向上进行“归约”,直到根结点。 5.1 自下而上分析基本问题 归约 自下而上分析法是一种“移进-归约”法。这种方法是用 一个符号栈,把输入符号一个一个移进到栈里,当栈顶形 成某个产生式的一个候选式时,即把栈顶的这一部分替换 成(归约)该产生式的左部符号。
2011年11月7日12时4分
6
规范归约 令G是一个文法,S是文法的开始符,假设α,β,δ是文法G的 句型,如果有 S⇒αAδ 且 A ⇒β

《编译原理》第5章自上而下语法分析

《编译原理》第5章自上而下语法分析

编译原理武汉大学计算机学院编译原理课程组第5章自上而下语法分析·基本思想·存在的问题·解决方法·LL(1)方法·递归子程序法5.0 语法分析的功能及基本思想依据语法规则,逐一分析词法分析时得到的单词,把单词串分解成各类语法单位,即确定它们是怎样组成说明和语句,以及说明和语句又是怎样组成程序的。

分析时如发现有不合语法规则的地方,便将出错的位置及出错性质打印报告给程序员;如无语法错误,则用另一种中间形式给出正确的语法结构,供下一阶段分析使用。

1. 语法分析的功能5.0 语法分析的功能及基本思想2.自上而下语法分析的基本思想从识别符号出发,不断建立直接推导,试图构造一个最左推导序列,最终由它推导出与输入符号串相同的符号串。

从语法树的角度看,自顶向下分析过程将以识别符号为根结点,试图向下构造一棵语法树,其末端结点符号串正好与输入符号串相同。

相应于高级语言的编译过程,自上而下语法分析就是从该高级语言文法的开始符号——<程序>出发,试图推导得到该文法的句子——源程序或与其等价的单词串。

3. 自上而下语法分析遇到的问题5.0 语法分析的功能及基本思想在分析的过程中,匹配失败后,必须退回到出错点,选择其它可能的产生式重新推导,这个过程称为回溯。

如果文法中存在如下形式的产生式A →α1|α2|…|αn那么在自上而下的语法分析过程中,当要对A 展开时,应按哪一个后选式展开呢?即如何确定替换A 的αi 。

如果选择错误,将导致回溯。

5.0 语法分析的功能及基本思想3. 自上而下语法分析遇到的问题当文法中出现左递归时(存在非终结符号U,对于它有+⇒U→U…或U U…),会使分析过程陷入无限循环。

例如对文法G[S]:S→ABA→bB|AaB→Sb|a5.0 语法分析的功能及基本思想4.自上而下语法分析中问题的解决方法·避免回溯·消除左递归5.1 消除左递归的方法1.直接左递归的消除•采用扩充BNF表示[x]——x可以出现零次或一次{x}——x可以出现零次到多次x(y|z)——等价于xy或xz5.1 消除左递归的方法1.直接左递归的消除•采用扩充BNF表示•引进新的非终结符号,将左递归改写为右递归。

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

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

B d
e
SaAcBeaAcdeaAbcdeabbcde SS→aAcBeB→d A→Ab A→b
每次归约的都是句型中的句柄。
22
算符优先分析法
LR分析法
23
1. LR分析法介绍
2. LR(0)分析表的构造
3. SLR分析表的构造
24
从左(Left,L)向右扫描输入串,构造一 个最右推导(Rightmost,R)的逆过程 进行规范归约(最左归约),每次归约 的都是真正的句柄; 对文法限制最少,是识别效率较强的方 法; 出错处理能力较强; 采用自动构造技术(构造LR分析表)
B
e
A
b
d
S → aAcBe A → Ab A→b B→d
b
分 析 树
输入串:abbcde
7
短语 直接短语 句柄
8
定义:设文法G的开始符号为S,是文法 *则称β是 的一个句型,若有SA且Aβ, + 相对于非终结符A的一个短语。 句型
短语是指句型中的某个部分,这部分可以由某 个非终结符推出。 可以利用语法树来找出句型中的所有短语。
查表 A[0,a]=s2,进栈 A[2,a]=s2,进栈 A[2,b]=s5,进栈 A[5,b]=r2,按第2条产生式归约 G[2,A]=3,进入状态3 A[3,b]=s4,进栈 A[4,#]=r1,归约 G[0,A]=1,进入状态1 A[1,#]=acc 31
对于一个文法,如果能够构造一张分析表, 使得它的每个入口均是唯一确定的,则我们 把这个文法称为LR文法。
33
前缀:字的任意首部。即移去符号尾
部零个或多于零个符号得到的一个符
号串。 例:abc的前缀有ε,a, ab, abc

编译原理第5章

编译原理第5章

语法分析-自下而上分析 语法分析-
E E T | E+T T F | T*F F i | (E) E + T 短语有:i, T * F, E+T * F, E + T * F + i 直接短语有: i, T * F 句柄是:T * F
第7页
E + T F
T *
F
i
编译原理
语法分析-自下而上分析 语法分析-
接短语
*
位于一个句型最左边的直接短语称为句柄. 句型最左边的直接短语称为 位于 句型---> 短语 ---> 直接短语 --->句柄 句型 句柄
注: 每次归约的部分必须是称之为句柄 句柄的字符串(最右 句柄 推导)。 关键的问题是如何识别句柄 如何识别句柄
第6页
编译原理
例:下述文法的另一个句型: 下述文法的另一个句型: E+T * F + i 其短语、直接短语、句柄分别是? 其短语、直接短语、句柄分别是?
第17页
T *
F
i
编译原理 算符优先分析法小结
优点 简单、效率高 能够处理部分二义性文法 缺点 文法书写限制大 占用内存空间大 不规范、存在查不到的语法错误
语法分析-自下而上分析 语法分析-
第18页
编译原理
语法分析-自下而上分析 语法分析-
LR分析法 LR分析法
L表示从左到右扫描输入串,R表示构造一个 表示从左到右扫描输入串, 表示构造一个 表示从左到右扫描输入串 最右推导的逆过程。 最右推导的逆过程。 大多数用上下文无关文法描述的程序语言都 可用LR分析器予以识别 分析器予以识别。 可用 分析器予以识别。 能用I.R分析器分析的文法类 包含能用LL(1) 分析器分析的文法类, 能用 分析器分析的文法类,包含能用 分析器分析的全部文法类, 分析法在自左 分析器分析的全部文法类,LR分析法在自左 至右扫描输入串时就能发现其中的任何错 并能准确地指出出错地点。 误.并能准确地指出出错地点。

编译原理-第五章习题答案

编译原理-第五章习题答案

上一页
下一页
11
例:5.3 文法:SaAcBe A bAb B d 句子:abbcde
步骤 (1) (2) (3) (4) (5) (6)

# #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S
输入 abbcde# bbcde# bcde# bcde# cde# cde#
上一页
下一页
20
5)构造算符优先文法G的优先表的算法
思路:对文法中的每一个产生式的候选式检查,判断句型中相邻符号之间 的关系 来构造优先表; 具体算法: FOR 每条产生式P→X1X2…Xn FOR i=1 TO n-1 IF Xi,Xi+1∈VT,THEN Xi=Xi+1; IF i ≤n-2且Xi,Xi+2∈VT,Xi+1∈VN THEN Xi=Xi+2; IF Xi∈VT,Xi+1∈VN THEN FOR FIRSTVT(Xi+1)中的每个a Xi <. a; NEXT IF Xi∈VN,Xi+1∈VT THEN FOR LASTVT(Xi)中的每个a DO a .> Xi+1; NEXT NEXT NEXT

上一页
下一页
8
例:5.1 P85 文法: E→T|E+T T→F|T*F F→i|(E) 句型:i1*i2+i3其中:短语有i1、i2、i3、i1*i2、 i1*i2+i3 直接短语:i1、i2、i3;句柄:i1 例:5.2 P85 文法如上 E 句型:E+T*F+i 短语:E+T*F+i,E+T*F,T*F,i 直接短语:T*F和i E + 句柄:T*F

编译原理:第五章-语法分析——自下而上分析

• 约定:
• a、b代表任意终结符; • P、Q、R代表任意非终结符; • ‘…’代表由终结符和非终结符组成的任意序列,包括空字。
• 假定G是一个不含-产生式的算符文法。对于任 何一对终结符a、b,我们说: 1. a b 当且仅当文法G中含有形如P→…ab…
或P→…aQb…的产生式
2. a b 当且仅当G中含有形如P→…aR…的产
栈 输入 #S #
考虑文法G(E): E T | E+T T F | T*F F (E) | I
输入串为i1*i2+i3 ,分析步骤为:
步骤 符号栈
0
#
1
#i1
2
#F
3
#T
4
#T*
输入串 i1*i2+i3# *i2+i3# *i2+i3# *i2+i3# i2+i3#
动作 预备 进 归,用F→i 归,用T→F 进
(1) E→E+T | T (2) T→T*F | F (3) F→P F | P (4) P→(E) | i
• 由第(4)条规则,有 ‘(’ ‘)’; • 由规则E→E+T和TT*F, 有 + *; • 由(2) T→T*F 和(3) F→P F ,可得* ↑; • 由(1)E→E+T和E E+T,可得+ +; • 由(3)F→PF和F PF,可得↑ ↑。 • 由(4)P→(E)和 EE+TT+TT*F+TF*F+T
编译原理
第五章 语法分析—自下而上分析
• 自下而上分析法(Bottom-up)
• 基本思想:
• 从输入串开始,逐步进行“归约”,直到文法的开始符 号。所谓归约,是指根据文法的产生式规则,把产 生式的右部替换成左部符号。

编译原理第三版 第五章 自下而上语法分析

3. 归 (2) 4. 进 b 5. 归 (3) 6. 进 c 7. 进 d 8. 归 (4) 9. 进 e 10. 归 (1)
a
b a
A a
b A A a a
c A a
d c A a
e B B c c A A a a
S
(2) 分析树: 用树表示“移进 - 归约 ”过程
A A B S
b
A
b
b
d
a
A
直接短语
T i F
句柄
T
T * F F ( E ) i
E + T T F
规范归约
设α是文法G的一个句子, 若序列αn, αn-1, …, α0,满足: (1)αn = α; (2) α0 = S; (3)对任 意i , 0< i ≤n , αi-1 是从αi 将句柄替换成 相应产生左部符号而得到的;则称该序列是一个 规范归约。
1、归约与分析树
(1)移进-归约法: 使用符号栈, 把输入符号逐一移 进栈, 栈顶出现某个产生式右部时归约为左部。
例 :给定文法 G: (1) S→aAcBe (2) A→b (3) A→Ab (4) B→d 输入串 abbcde是否为句子? 归约过程如下: 步骤: 1. 2. 进 进 动作: a b
例:文法G: G[E]: E→E+E|E*E |(E) |i (1) E→E+T│T (2) T→T*F│F (3) F→P↑F│P (4) P→(E)│i 算符优先关系为: 由(4): P→(E) ∴( =) 由(1) (2): E→E+T, T => T*F ∴+<* 由(2) (3): T→T*F, F => P↑F ∴ *<↑ 由(1): E→E+T, E => E+T ∴ +>+ 由(3): F→P↑F, F=> P↑F ∴ ↑ <↑ 由(4): P→(E), E => E+T ∴ ( < +, +>) ... ∴ G为算符优先文法(优先关系表如表5.1所示,P90) #看作终结符号

编译原理 第五章 语法分析-自下而上分析


5.2.2 算符优先分析算法
• 素短语:
–是一个短语,它至少含有一个终结符,并且,除 它自身之外不再含任何更小的素短语。
• 最左素短语:
–最左边的素短语是最左素短语。
• 例子:
– 对文法(5.3)p*p和i是句型p*p+i的素短语,而p*p+i 本身也是素短语。
பைடு நூலகம்
• 算符优先文法:
算符优先文法,我们把句型(括在两个#之间) 的一般形式写成: #N1a1N2a2…NnanNn+1# 其中,每个ai都是终结符,Ni是可有可无的非终结 符。 文法G的任何短语是满足如下条件的最左子串 Njaj…NiaiNi+1 aj-1⋖ aj aj ≖ aj+1 , …,aj-1 ≖ ai ai ⋗ ai+1
– 对于每个终结符a(包括#)令其对应两个符号fa 和ga ,画一张以fa 和ga 所有符号为结点的方向图, 如 果 a⋗≖b, 那 么 , 就 从 fa 画 一 箭 弧 至 gb ; 如 果 a ⋖≖b,就画一条从gb到fa的箭弧。 – 对每个结点都赋予一个数,此数等于从该结点能 到达结点(包括出发结点自身在内)的个数。赋 给fa的数作为f(a),赋给gb的数作为g(b)。 –检查所构造出来的函数f和g,看它们 同原来的关 系表是否有矛盾。如果没有矛盾,则f和g就是所 要的优先函数。如果有矛盾,那么,就不存在优 先函数。
• 例子:假定文法G
S→aAcBe A→b A→Ab B→d 输入串abbcde归约到S过程。
图5.1 规约中符号栈的变迁
步骤 动作
1 进 a
2 进 b
3 归 (2)
4 进 b
5 归 (3)
6 进 c
7 进 d d

编译原理讲义(第五章语法分析--自底向上分析技术)


优先关系
• 和书上的写法不一样,凑合用。 SiSj Si Sj Si Sj • 注意: , , 之间不同于=,>和<。 由Si Sj不能导出Sj Si。
优先关系的例子
• 文法:Z::=bMb M::=(L|a L::=Ma) • 语言:{bab, b(aa)b, b((aa)a)b, …} • 可以从语法树里面导出部分优先关系。
关系闭包和Warshall算法
• Warshall算法是利用矩阵计算关系传递闭包的方法。计 算B的传递闭包的算法伪代码如下: 对于外层循环,当 A = B; i=K的循环结束的时 for (i = 1; i<=n; i++) 候,满足:如果Si和 for (j=1; j<=n; j++) Sj满足Si R Si1, Si1 R { Si2, … Sin R Sj, 并 if (A[j,i]==1) 且im<K, 那么现在 for(k=1; k<=n; k++) A[i,j] = 1; A[j,k] = A[j,k]+A[i,k] }
基本方法(续)
• 归约中的动作有4类
– 移入:读入一个符号并把它归约入栈。 – 归约:当栈中的部分形成一个句柄(栈顶的 符号序列)时,对句柄进行归约。 – 接受:当栈中的符号仅有#和识别符号的时 候,输入符号也到达结尾的时候,执行接受 动作。 – 当识别程序觉察出错误的时候,表明输入符 号串不是句子。进行错误处理。
计算优先关系的例子P136
• 文法:S::=Wa W::=Wb W::=a • 将文法中的符号按照S,W,a,b排列。
0100 BHEAD= 0110 0000 0000
0010 0011 0000 0000
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

G(E): : E → T | E+T T → F | T*F F → (E) | i 步骤 9 10 11 12 13 14 符号栈 #E+ #E+i3 #E+F #E+T #E #E 输入串 i3# # # # # # 动作 进 进 归,用F→i → 归,用T→F → 归,用E→E+T → 接受
< · < ·
>a ·
5.2.1 算符优先文法及优先表构造
一个文法,如果它的任一产生式的右部都不含两个 一个文法, 相继(并列 的非终结符, 并列)的非终结符 相继 并列 的非终结符,即不含如下形式的产生式 右部: 右部: …QR… 则我们称该文法为算符文法 算符文法。 则我们称该文法为算符文法。 约定: 约定:
第五章 语法分析——自下而上分析 自下而上分析 语法分析 自下而上
语法分析的方法: 语法分析的方法:
自下而上分析法(Bottom自下而上分析法(Bottom-up) (Bottom 自上而下分析法(Top (Top自上而下分析法(Top-down)
语法分析的方法: 语法分析的方法:
自上而下分析法(Top自上而下分析法(Top-down) (Top
例如: i+i例如:句子 i+i-i*(i+i)
E E E i + E i E i E * ( E i E E + ) E i
i+i-i*(i+i) i+i错误的语法树:
E * E i E ( E i E + ) E i
E E E i + E i
句子i+i-i*(i+i)的归约过程是: 的归约过程是: 句子 的归约过程是 (1) i+i-i*(i+i) (2) E+i-i*(i+i) E (3) E+E-i*(i+i) E (4) E-i*(i+i) E (5) E-E*(i+i) E + E E * E (6) E-E*(E+i) (7) E-E*(E+E) i i i ( E ) (8) E-E*(E) (9) E-E*E E + E (10) E-E i i (11) E
句型 abbcde aAbcde aAcde aAcBe S 归约规则 (2) A → b (3) A → Ab (4) B → d (1) S → aAcBe
S a A b A c b B d e
定义:假定α是文法 的一个句子 的一个句子, 定义:假定α是文法G的一个句子,我们称 序列α 是一个规范归约 规范归约, 序列αn,αn-1,… ,α0 是一个规范归约,如 果此序列满足: 果此序列满足: 是一个要归约的句子) 1. αn= α (即:αn是一个要归约的句子) 为文法的开始符号, 2. α0为文法的开始符号,即α0=S (即:是一 的归约过程) 个句子到α0 的归约过程) 对任何i 是从α 3. 对任何i,0≤i≤n,αi-1是从αi经把句柄 替换成为相应产生式左部符号而得到的。 替换成为相应产生式左部符号而得到的。
考虑文法G(E): : 考虑文法 E → T | E+T T → F | T*F F → (E) | i 和句型i 和句型 1*i2+i3:
E T T F i1 *
E + T F F i2 i3
E ⇒ E+T ⇒ E+F ⇒ E+i3 ⇒ T+i3 ⇒ T*F+i3 ⇒ T*i2+i3 ⇒ F*i2+i3 ⇒ i1*i2+i3 短语: 短语: i1,i2,i3, i1*i2, i1*i2+i3 直接短语: 直接短语: i1,i2,i3 句柄: 句柄: i1
用一个寄存符号的先进后出栈, 用一个寄存符号的先进后出栈,把输入符号一 个一个地移进到栈里, 个一个地移进到栈里,当栈顶形成某个产生式 的候选式时,即把栈顶的这一部分替换成( 的候选式时,即把栈顶的这一部分替换成(归约 该产生式的左部符号。 为)该产生式的左部符号。
例:设文法G(S): 设文法 : (1) S → aAcBe (2) A → b (3) A → Ab (4) B → d 试对abbcde进行“移进-归约”分析。 abbcde进行 试对abbcde进行“移进-归约”分析。 e B d B b c c A b A S a a
a、b代表任意终结符; 、 代表任意终结符 代表任意终结符; P、Q、R代表任意非终结符; 代表任意非终结符; 、 、 代表任意非终结符 代表由终结符和非终结符组成的任意序列, ‘…’代表由终结符和非终结符组成的任意序列,包括空 代表由终结符和非终结符组成的任意序列 字。
S a A A c b B d e
b 分析树和语法树不一定一致。 分析树和语法树不一定一致。 自下而上分析过程: 自下而上分析过程: 边输入单词符号,边归约。 边输入单词符号,边归约。 核心问题:识别可归约串 核心问题:识别可归约串
5.1 关于识别可归约串的问题) 5.1.2 规范归约(关于识别可归约串的问题)
G(E): : E → T | E+T T → F | T*F F → (E) | i 步骤 0 1 2 3 4 符号栈 # #i1 #F #T #T* 输入串 i1*i2+i3# *i2+i3# *i2+i3# *i2+i3# i2+i3# 动作 预备 进 归,用F→i → 归,用T→F → 进
归约的基本思想 例:
G(E): E → i| E+E | E-E | E*E | E/E | (E) :
i*i+i E*i+i E*E+i E+i E+E E
E E E i + E i * E i
5.1.1 归约
采用“移进-归约”思想进行自下而上分析。 采用“移进-归约”思想进行自下而上分析。 基本思想: 基本思想:
定义: 定义:令S是文法G的开始符号,假定αβδ是 是文法G的开始符号,假定αβδ是 αβδ 文法G的一个句型,如果有: 文法G的一个句型,如果有: * + S ⇒αAδ 且 A⇒β
则β称是句型αβδ相对于非终结符A的短语。 称是句型αβδ相对于非终结符A 短语。 αβδ相对于非终结符 特别是,如果有A 特别是,如果有A⇒β,则称β是句型αβδ相对 则称β是句型αβδ相对 αβδ 于规则A 直接短语。 于规则A→ β的直接短语。一个句型的最左 句柄。 直接短语称为该句型的句柄 直接短语称为该句型的句柄。
回顾: 回顾:语法分析的方法
自下而上分析法(Bottom-up) 自下而上分析法
基本思想: 基本思想: 从输入串开始,逐步进行“归约” 从输入串开始,逐步进行“归约”,直到文法的开始 符号。即从树末端开始,构造语法树。 符号。即从树约:指根据文法的产生式规则,把产生式的右部替 换成左部符号。 换成左部符号。 算符优先分析法: 算符优先分析法: 按照算符的优先关系和结合性质进行语法分析。适合 按照算符的优先关系和结合性质进行语法分析。 优先关系 进行语法分析 分析表达式。 分析表达式。 LR分析法:规范归约 分析法: 分析法
G(E): : E → T | E+T T → F | T*F F → (E) | i
步骤 4 5 6 7 8 9 符号栈 #T* #T*i2 #T*F #T #E #E+ 输入串 i2+i3# +i3# +i3# +i3# +i3# i 3# 动作 进 进 归,用F→i → 归,用T→T*F → 归,用E→T → 进
由规范推导推出的句型称为规范句型。 由规范推导推出的句型称为规范句型。 规范句型
S a A b A c b S A c B d e a A B d A b e
S a A c B d S c B e e
a
5.1.3 符号栈的使用和分析树的表示
栈是语法分析的一种基本数据结构。 栈是语法分析的一种基本数据结构。’#’作 作 为栈底符号。 为栈底符号。 考虑文法G(E): : 考虑文法 E → T | E+T T → F | T*F F → (E) | i 输入串为i1*i2+i3 ,分析步骤为: 输入串为 分析步骤为:
用语法树较容易识别
在一个句型对应的语 法树中, 法树中,以某非终结 符为根的两代以上的 子树的所有末端结点 从左到右排列就是相 对于该非终结符的一 个短语, 个短语,如果子树只 有两代, 有两代,则该短语就 是直接短语。 是直接短语。
E E T T F i1 * F i2 + T F i3
可用句柄来对句子进行归约 可用句柄来对句子进行归约 句柄
每一个步骤都是对句柄做归约) (即:每一个步骤都是对句柄做归约)
把上例倒过来写,则得到: 把上例倒过来写,则得到: aAcBe⇒ S ⇒ aAcBe⇒ aAcde ⇒ aAbcde ⇒ abbcde 显然这是一个最右推导。 显然这是一个最右推导。
规范归约是关于是一个最右推导的逆过程 最左归约 规范推导
归约过程中起决定作用的是相邻的两个算符 归约过程中起决定作用的是相邻的两个算符 起决定作用的是相邻的两个 之间的优先关系 优先关系。 之间的优先关系。 所谓算符优先分析法就是定义算符之间的某 所谓算符优先分析法就是定义算符之间的某 算符优先分析法 种优先关系,借助于这种关系寻找“ 种优先关系,借助于这种关系寻找“可归约 和进行归约。 串”和进行归约。
首先必须定义任何两个可能相继出现的终结符a 首先必须定义任何两个可能相继出现的终结符a 的优先关系(三种关系): 与b的优先关系(三种关系):
a b a b a b
注意: 注意:与数学上的 < > = 不同
++ 并不意味着b a b并不意味着b
相关文档
最新文档