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 '*').