【编译原理复习专题3】语法分析的例子整理
文章目录
SLR(1)
考虑文法:
$E\rightarrow E+T|T$
$T\rightarrow T*F|F$
$F\rightarrow (E) |id$
1.扩展文法:
$E’\rightarrow E$
$E\rightarrow E+T|T$
$T\rightarrow T*F|F$
$F\rightarrow (E) |id$
2.LR(0)项:
3.绘制LR(0)自动机:
4.由状态1、2、9可发现,这个语法有移进归约冲突,因此不是LR(0)文法,
而在状态1中,Follow(E’)={$},+不在E’的Follow集里面的,因此无歧义,在状态2和9中,Follow(E)={+,(,$},*不在E的Follow集里,也无歧义,该文法是SLR(1)文法。
5.构建SLR(1)分析表。
6.串(id+id)*id的分析过程:
stack | input | action | |
---|---|---|---|
1 | $0 | (id+id)*id$ | S4 |
2 | $0(4 | id+id)*id$ | S5 |
3 | $0(4id5 | +id)*id$ | $r(F\rightarrow id)$ |
4 | $0(4F3 | +id)*id$ | $r(T\rightarrow F)$ |
5 | $0(4T2 | +id)*id$ | $r(E\rightarrow T)$ |
6 | $0(4E8 | +id)*id$ | S6 |
7 | $0(4E8+6 | id)*id$ | S5 |
8 | $0(4E8+6id5 | )*id$ | $r(F\rightarrow id)$ |
9 | $0(4E8+6F3 | )*id$ | $r(T\rightarrow F)$ |
10 | $0(4E8+6T9 | )*id$ | $r(E\rightarrow E+T)$ |
11 | $0(4E8 | )*id$ | S11 |
12 | $0(4E8)11 | *id$ | $r(F\rightarrow (E))$ |
13 | $0F3 | *id$ | $r(T\rightarrow F)$ |
14 | $0T2 | *id$ | S7 |
15 | $0T2*7 | id$ | S5 |
16 | $0T2*7id5 | $ | $r(F\rightarrow id)$ |
17 | $0T2*7F10 | $ | $r(T\rightarrow T*F)$ |
18 | $0T2 | $ | $r(E\rightarrow T)$ |
19 | $0E1 | $ | accept |
因此该串被接受。
原文作者: Ruoting Wu
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议