Programming Language Technology, DAT151/DIT231
EProd. Exp ::= Exp1;
EAdd. Exp ::= Exp "+" Exp1;
EInt. Exp1 ::= Integer;
EMul. Exp1 ::= Exp1 "*" Integer;
LInt. Integer ::= int;
%start. S ::= Exp eof;
State 0
int shift to state 1
Exp goto state 2
Exp1 goto state 3
Integer goto state 4
State 1
eof reduce with rule LInt
'*' reduce with rule LInt
'+' reduce with rule LInt
State 2
eof reduce with rule %start
'+' shift to state 5
State 3
eof reduce with rule EProd
'*' shift to state 7
'+' reduce with rule EProd
State 4
eof reduce with rule EInt
'*' reduce with rule EInt
'+' reduce with rule EInt
State 5
int shift to state 1
Exp1 goto state 6
Integer goto state 4
State 6
eof reduce with rule EAdd
'*' shift to state 7
'+' reduce with rule EAdd
State 7
int shift to state 1
Integer goto state 8
State 8
eof reduce with rule EMul
'*' reduce with rule EMul
'+' reduce with rule EMul
State 0
S → . Exp eof
Exp → . Exp "*" Exp1
Exp → . Exp1
Exp1 → . Exp1 "*" Integer
Exp1 → . Integer
Integer → . int
| State | Parse item 1 | Parse item 2 |
|---|---|---|
| 0 | S → . Exp eof |
|
| 1 | Integer → int . |
|
| 2 | S → Exp . eof |
Exp → Exp . "+" Exp1 |
| 3 | Exp → Exp1 . |
Exp1 → Exp1 . "*" Integer |
| 4 | Exp1 → Integer . |
|
| 5 | Exp → Exp "+" . Exp1 |
|
| 6 | Exp → Exp "+" Exp1 . |
Exp1 → Exp1 . "*" Integer |
| 7 | Exp1 → Exp1 "*" . Integer |
|
| 8 | Exp1 → Exp1 "*" Integer . |
| State | eof | + |
* |
int |
Exp |
Exp1 |
Integer |
|---|---|---|---|---|---|---|---|
| 0 | s1 | g2 | g3 | g4 | |||
| 1 | LInt |
LInt |
LInt |
||||
| 2 | %start |
s5 | |||||
| 3 | EProd |
EProd |
s7 | ||||
| 4 | EInt |
EInt |
EInt |
||||
| 5 | s1 | g6 | g4 | ||||
| 6 | EAdd |
EAdd |
s7 | ||||
| 7 | s1 | g8 | |||||
| 8 | EMul |
EMul |
EMul |
ε . '1' '+' '2' '*' '3' -- shift
int(1) . '+' '2' '*' '3' -- reduce with rule LInt
Integer . '+' '2' '*' '3' -- reduce with rule EInt
Exp1 . '+' '2' '*' '3' -- reduce with rule EProd
Exp . '+' '2' '*' '3' -- shift
Exp '+' . '2' '*' '3' -- shift
Exp '+' int(2) . '*' '3' -- reduce with rule LInt
Exp '+' Integer . '*' '3' -- reduce with rule EInt
Exp '+' Exp1 . '*' '3' -- shift
Exp '+' Exp1 '*' . '3' -- shift
Exp '+' Exp1 '*' int(3) . -- reduce with rule LInt
Exp '+' Exp1 '*' Integer . -- reduce with rule EMul
Exp '+' Exp1 . -- reduce with rule EAdd
Exp . -- halt