Symbol
-2 EMPTY
0 "end of file"
1 error
2 "invalid token" (undef)
3 LF
4 NUM
5 '+'
6 '*'
7 '('
8 ')'
9 $accept # Start of nonterminal
10 program
11 expr
Grammar
0 $accept: program "end of file"
1 program: ε
2 | expr LF
3 expr: NUM
4 | expr '+' expr
5 | expr '*' expr
6 | '(' expr ')'
State 0
0 $accept: • program "end of file"
1 program: ε • ["end of file"]
2 | • expr LF
3 expr: • NUM
4 | • expr '+' expr
5 | • expr '*' expr
6 | • '(' expr ')'
NUM shift, and go to state 1
'(' shift, and go to state 2
$default reduce using rule 1 (program)
program go to state 3
expr go to state 4
State 1
3 expr: NUM • $default reduce using rule 3 (expr)
State 2
3 expr: • NUM
4 | • expr '+' expr
5 | • expr '*' expr
6 | • '(' expr ')'
6 | '(' • expr ')'
NUM shift, and go to state 1
'(' shift, and go to state 2
expr go to state 5
State 3
0 $accept: program • "end of file" "end of file" shift, and go to state 6
State 4
2 program: expr • LF 4 expr: expr • '+' expr 5 | expr • '*' expr LF shift, and go to state 7 '+' shift, and go to state 8 '*' shift, and go to state 9
State 5
4 expr: expr • '+' expr
5 | expr • '*' expr
6 | '(' expr • ')'
'+' shift, and go to state 8
'*' shift, and go to state 9
')' shift, and go to state 10
State 6
0 $accept: program "end of file" • $default accept
State 7
2 program: expr LF • $default reduce using rule 2 (program)
State 8
3 expr: • NUM
4 | • expr '+' expr
4 | expr '+' • expr
5 | • expr '*' expr
6 | • '(' expr ')'
NUM shift, and go to state 1
'(' shift, and go to state 2
expr go to state 11
State 9
3 expr: • NUM
4 | • expr '+' expr
5 | • expr '*' expr
5 | expr '*' • expr
6 | • '(' expr ')'
NUM shift, and go to state 1
'(' shift, and go to state 2
expr go to state 12
State 10
6 expr: '(' expr ')' •
$default reduce using rule 6 (expr)
State 11
4 expr: expr • '+' expr
4 | expr '+' expr • [LF, '+', ')']
5 | expr • '*' expr
'*' shift, and go to state 9
$default reduce using rule 4 (expr)
Conflict between rule 4 and token '+' resolved as reduce (%left '+').
Conflict between rule 4 and token '*' resolved as shift ('+' < '*').
State 12
4 expr: expr • '+' expr
5 | expr • '*' expr
5 | expr '*' expr • [LF, '+', '*', ')']
$default reduce using rule 5 (expr)
Conflict between rule 5 and token '+' resolved as reduce ('+' < '*').
Conflict between rule 5 and token '*' resolved as reduce (%left '*').