CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
考虑以下文法
写出每个非终端符号的 FIRST 集和 FOLLOW 集
FIRST | FOLLOW | |
---|---|---|
构造识别这一文法所有活前缀(viable prefixes)的 LR(0) 自动机(参照课本 4.6.2 节图 4.31)
使用增广文法增加新的开始符号 和产生式 。
flowchart TB
I0--E-->I1
I0--T-->I2
I0--F-->I3
I0--a-->I4
I0--b-->I5
I1--$-->AC
I1--+-->I6
I2--a-->I4
I2--b-->I5
I2--F-->I7
I3--*-->I8
I6--F-->I3
I6--a-->I4
I6--b-->I5
I6--T-->I9
I7--*-->I8
I9--a-->I4
I9--b-->I5
I9--F-->I7
AC["accept"]
I0["
I0
E'#rarr;#middot;E
E#rarr;#middot;E+T
E#rarr;#middot;T
T#rarr;#middot;TF
T#rarr;#middot;F
F#rarr;#middot;F*
F#rarr;#middot;a
F#rarr;#middot;b
"]
I1["
I1
E'#rarr;#middot;E
E#rarr;E#middot;+T
"]
I2["
I2
E#rarr;T#middot;
T#rarr;T#middot;F
F#rarr;#middot;F*
F#rarr;#middot;a
F#rarr;#middot;b
"]
I3["
I3
T#rarr;F#middot;
F#rarr;F#middot;*
"]
I4["
I4
F#rarr;a#middot;
"]
I5["
I5
F#rarr;b#middot;
"]
I6["
I6
E#rarr;E+#middot;T
T#rarr;T#middot;F
F#rarr;#middot;F*
F#rarr;#middot;a
F#rarr;#middot;b
"]
I7["
I7
T#rarr;TF#middot;
"]
I8["
I8
F#rarr;F*#middot;
"]
I9["
I9
E#rarr;E+T#middot;
T#rarr;T#middot;F
F#rarr;#middot;F*
F#rarr;#middot;a
F#rarr;#middot;b
"]
构造这一文法的 SLR 分析表(参照课本 4.6.3 节图 4.37)
STATE | ACTION | ACTION | ACTION | ACTION | ACTION | GOTO E | GOTO T | GOTO F |
---|---|---|---|---|---|---|---|---|
0 | s4 | s5 | 1 | 2 | 3 | |||
1 | s6 | accept | ||||||
2 | s4 | s5 | r2 | r2 | 7 | |||
3 | r4 | r4 | r4 | s8 | r4 | |||
4 | r6 | r6 | r6 | r6 | r6 | |||
5 | r7 | r7 | r7 | r7 | r7 | |||
6 | s4 | s5 | 9 | 3 | ||||
7 | r3 | r3 | r3 | s8 | r3 | |||
8 | r5 | r5 | r5 | r5 | r5 | |||
9 | s4 | s5 | r1 | r1 | 7 |
给出 SLR 分析器识别输入串 的过程(参照课本 4.6.4 节图 4.38)
STACK | SYMBOLS | INPUT | ACTION |
---|---|---|---|
0 | shift | ||
04 | reduce | ||
03 | reduce | ||
02 | reduce | ||
01 | shift | ||
016 | shift | ||
0164 | reduce | ||
0163 | reduce | ||
0169 | shift | ||
01695 | reduce | ||
01697 | shift | ||
016978 | reduce | ||
01697 | reduce | ||
0169 | reduce | ||
01 | accept |