第 5 章 自下而上的语法分析从叶结点出发,步步向上归约
若能归约到根结点,说明输入串是文法的一个句子,否则输入串存在语法错误
1 自下而上的语法分析概述㈠概述实质上是一种移进归约法,设置一个栈,将输入串符号逐个移进栈内,一旦发现栈顶形成某个产生式的候选式时,立即将栈顶这一部分符号替换(归约)成该产生式的左部符号
例给定文法G:S→aAcBeA→b | AbB→d 和输入串 abbcde,其移进归约过程如下所示:edBBbccccbAAAAAAAaaaaaaaaaS 移 移 归 移 归 移 移 归 移 归 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩因最终归约到根结点,输入串 abbcde 是文法的一个句子
㈡问题从第④步到第⑤步有二种选择,可将 b 归约成 A,栈顶成 aAA;也可将 Ab 归成 A,栈顶成 aA,显然后者是正确的,故需精确定义可归约串
㈢句柄和规范归约① 短语② 直接短语(简单短语)③ 句柄继续问题的讨论
句型 aAbcde 中存在三个短语,它们是 Ab、d 和 aAbcde,其中 Ab 和d 是直接短语,句柄是 Ab
不能因为存在规则 A→b,就断定 b 是这个句型的一个短语,b不是句柄,甚至连短语都不是
④ 规范归约(最左归约)⑤ 规范句型⑥ 规范推导⑦ 图解法5
2 LR 分析法的基本原理㈠前缀㈡活前缀㈢ LR 分析法的基本思想㈣ LR(0)项目(简称项目)在产生式右部的某个位置添加一个园点“
特例,A→ε 的项目为 A→
S'→E1
E→d这个文法的项目有S'→
ES'→E
㈤构造识别活前缀的 NFA① 将每个项目视为识别活前缀 NFA 的一个状态
② 规定状态 S'→