自底向上的语法分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b
A
A b c
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde(再读入d) a
b
A
A b c d
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe(归约) a
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
E rm E E rm E E + E rm E Βιβλιοθήκη Baidu + id3 rm E id2 + id3 rm id1 id2 + id3
自底向上的语法分析
4.5
1. 移进归约的概念
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde(读入ab)
a
b
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde(归约) a
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$
动
作
移进 按E id归约 移进 移进
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$
A
A b b
B
c
d
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe(再读入e) a
A
A b b
B
c
d
e
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe a S(归约)
动
作
移进 按E id归约 移进
4.4 自下而上分析
栈
$ $ id1 $E $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约 移进 移进
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2
S
A
A b b
B
c
d
e
4.4 自下而上分析
4.4.1 归约 例 S aABe S A Abc | b Bd abbcde A B aAbcde A aAde aABe a b b c d S S rm aABe rm aAde rm aAbcde rm abbcde
e
4.4 自下而上分析
动
作
移进 按E id归约 移进 移进 按E id归约
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2 $EE
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$ + id3$
2. 用栈实现移进归约
用栈实现移进归约分析
移进
把下一个输入符号移进栈
归约
分析器知道句柄的右端已在栈顶,然后确定句柄的左
端在栈中的位置,再决定用什么样的非终结符代替句 柄
接受
分析器宣告分析成功
报错
分析器发现语法错误,调用错误恢复例程
4.4 自下而上分析
4.4.3 用栈实现移进归约分析 先通过
4.4 自下而上分析
栈
$ $ id1 $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约 移进
4.4 自下而上分析
栈
$ $ id1 $E $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$
4.4.2 句柄
句型的句柄是和某产生式右部匹配的子串,并且, 把它归约成该产生式左部的非终结符代表了最右推 导过程的逆过程的一步
S aABe A Abc | b Bd S rm aABe rm aAde rm aAbcde rm abbcde
句柄的右边仅含终结符 如果文法二义,那么句柄可能不唯一
动
作
移进
4.4 自下而上分析
栈
$ $ id1
输 入 id1 id2 + id3$ id2 + id3$
动
作
移进 按E id归约
4.4 自下而上分析
栈
$ $ id1 $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
E rm E E E rm E + E rm E E + E rm E + id3 rm E E + id3 rm E E + id3 rm E id2 + id3 rm E id2 + id3 rm id1 id2 + id3 rm id1 id2 + id3 在句型E E + id3中,句柄不唯一
b
A
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde(再读入bc) a
b
A b c
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde(归约) a
移进归约分析器在分析输入串id1 id2 + id3时 的动作序列
来了解移进归约分析的工作方式
4.4 自下而上分析
栈
$
输 入 id1 id2 + id3$
动
作
4.4 自下而上分析
栈
$
输 入 id1 id2 + id3$
动
作
移进
4.4 自下而上分析
栈
$ $ id1
输 入 id1 id2 + id3$ id2 + id3$
A
A b c
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde(再读入d) a
b
A
A b c d
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe(归约) a
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
E rm E E rm E E + E rm E Βιβλιοθήκη Baidu + id3 rm E id2 + id3 rm id1 id2 + id3
自底向上的语法分析
4.5
1. 移进归约的概念
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde(读入ab)
a
b
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde(归约) a
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$
动
作
移进 按E id归约 移进 移进
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$
A
A b b
B
c
d
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe(再读入e) a
A
A b b
B
c
d
e
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde aABe a S(归约)
动
作
移进 按E id归约 移进
4.4 自下而上分析
栈
$ $ id1 $E $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约 移进 移进
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2
S
A
A b b
B
c
d
e
4.4 自下而上分析
4.4.1 归约 例 S aABe S A Abc | b Bd abbcde A B aAbcde A aAde aABe a b b c d S S rm aABe rm aAde rm aAbcde rm abbcde
e
4.4 自下而上分析
动
作
移进 按E id归约 移进 移进 按E id归约
4.4 自下而上分析
栈
$ $ id1 $E $E $Eid2 $EE
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$ + id3$ + id3$
2. 用栈实现移进归约
用栈实现移进归约分析
移进
把下一个输入符号移进栈
归约
分析器知道句柄的右端已在栈顶,然后确定句柄的左
端在栈中的位置,再决定用什么样的非终结符代替句 柄
接受
分析器宣告分析成功
报错
分析器发现语法错误,调用错误恢复例程
4.4 自下而上分析
4.4.3 用栈实现移进归约分析 先通过
4.4 自下而上分析
栈
$ $ id1 $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约 移进
4.4 自下而上分析
栈
$ $ id1 $E $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$ id2 + id3$
4.4.2 句柄
句型的句柄是和某产生式右部匹配的子串,并且, 把它归约成该产生式左部的非终结符代表了最右推 导过程的逆过程的一步
S aABe A Abc | b Bd S rm aABe rm aAde rm aAbcde rm abbcde
句柄的右边仅含终结符 如果文法二义,那么句柄可能不唯一
动
作
移进
4.4 自下而上分析
栈
$ $ id1
输 入 id1 id2 + id3$ id2 + id3$
动
作
移进 按E id归约
4.4 自下而上分析
栈
$ $ id1 $E
输 入 id1 id2 + id3$ id2 + id3$ id2 + id3$
动
作
移进 按E id归约
4.4 自下而上分析
例 句柄不唯一 E E + E | E E | (E ) | id
E rm E E E rm E + E rm E E + E rm E + id3 rm E E + id3 rm E E + id3 rm E id2 + id3 rm E id2 + id3 rm id1 id2 + id3 rm id1 id2 + id3 在句型E E + id3中,句柄不唯一
b
A
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde(再读入bc) a
b
A b c
4.4 自下而上分析
4.4.1 归约 例 S aABe A Abc | b Bd abbcde aAbcde aAde(归约) a
移进归约分析器在分析输入串id1 id2 + id3时 的动作序列
来了解移进归约分析的工作方式
4.4 自下而上分析
栈
$
输 入 id1 id2 + id3$
动
作
4.4 自下而上分析
栈
$
输 入 id1 id2 + id3$
动
作
移进
4.4 自下而上分析
栈
$ $ id1
输 入 id1 id2 + id3$ id2 + id3$