某储备粮的“学习笔记” - parse
http://blog.gregwym.info/tag/parse/
-
LR(1) Parser Example
http://blog.gregwym.info/lr-1--parser-example.html
2011-04-19T05:24:08+08:00
Terminal Symbols: 6个BOF, EOF, id, -, (, )Nonterminal Symbols: 3个S, expr, termStart Symbol:SProduction Rules: 5个
0
S BOF expr EOF
1
expr term
2
expr expr - term
3
term id
4
term ( expr )
Total State: 11个 (0 to 11)Total Transitions: 28个
State
Symbol
Action
0
BOF
shift to state 6
1
(
shift to state 3
1
id
shift to state 2
1
term
shift to state 8
3
(
shift to state 3
3
expr
shift to state 7
3
id
shift to state 2
3
term
shift to state 4
6
(
shift to state 3
6
expr
shift to state 10
6
id
shift to state 2
6
term
shift to state 4
7
)
shift to state 9
7
-
shift to state 1
10
-
shift to state 1
10
EOF
shift to state 5
2
)
reduce by rule 3
2
-
reduce by rule 3
2
EOF
reduce by rule 3
4
)
reduce by rule 1
4
-
reduce by rule 1
4
EOF
reduce by rule 1
8
)
reduce by rule 2
8
-
reduce by rule 2
8
EOF
reduce by rule 2
9
)
reduce by rule 4
9
-
reduce by rule 4
9
EOF
reduce by rule 4
String to Parse:BOF id - ( id ) - id EOFParse Step:蓝色的行是Shift, 灰色的行是ReduceReduce的次数取决于Production Rule RHS的长度当前Symbol所对应的State,
State Stack
(At EOL)
Description
S0
0
Start
BOF
S6
0 6
S0 BOF S6
id
S2
0 6 2
S6 id S2
R3
-
0 6
S2 - Reduce by rule #3
(replace id with term)
term
S4
0 6 4
S6 term S4
R1
-
0 6
S4 - Reduce by rule #1
(replace term with expr)
expr
S10
0 6 10
S6 expr S10
-
S1
0 6 10 1
S10 - S1
(
S3
0 6 10 1 3
S1 ( S3
id
S2
0 6 10 1 3 2
S3 id S2
R3
)
0 6 10 1 3
S2 ) Reduce by rule #3
(replace id with term)
term
S4
0 6 10 1 3 4
S3 term S4
R1
)
0 6 10 1 3
S4 ) Reduce by rule #1
(replace term with expr)
expr
S7
0 6 10 1 3 7
S3 expr S7
)
S9
0 6 10 1 3 7 9
S7 ) S9
R4
R4
R4
-
0 6 10 1
S9 - Reduce by rule #4
(repace "( expr )" with term)
term
S8
0 6 10 1 8
S1 term S8
R2
R2
R2
-
0 6
S8 - Reduce by rule #2
(replace "expr - term" with expr)
expr
S10
0 6 10
S6 expr S10
-
S1
0 6 10 1
S10 - S1
id
S2
0 6 10 1 2
S1 id S2
R3
EOF
0 6 10 1
S2 EOF Reduce by rule #3
(replace id with term)
term
S8
0 6 10 1 8
S1 term S8
R2
R2
R2
EOF
0 6
S8 EOF Reduce by rule #2
(replace "expr - term" with expr)
expr
S10
0 6 10
S6 expr S10
EOF
S5
Final S5
S10 EOF S5
原题来源: http://www.student.cs.uwaterloo.ca/~cs241/parsing/lr1.html