Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 7

Grammar:

Rule 0 S' -> lst


Rule 1 lst -> lst expr
Rule 2 lst -> empty
Rule 3 expr -> - expr [precedence=left, level=4]
Rule 4 expr -> ( expr )
Rule 5 expr -> expr / expr [precedence=left, level=3]
Rule 6 expr -> expr * expr [precedence=left, level=3]
Rule 7 expr -> expr - expr [precedence=left, level=2]
Rule 8 expr -> expr + expr [precedence=left, level=2]
Rule 9 expr -> VAR = expr [precedence=right, level=1]
Rule 10 expr -> VAR
Rule 11 expr -> NUMBER
Rule 12 empty -> <empty>

Terminals, with rules where they appear:

( : 4
) : 4
* : 6
+ : 8
- : 3 7
/ : 5
= : 9
NUMBER : 11
VAR : 9 10
error :

Nonterminals, with rules where they appear:

empty : 2
expr : 1 3 4 5 5 6 6 7 7 8 8 9
lst : 1 0

state 0

(0) S' -> . lst


(1) lst -> . lst expr
(2) lst -> . empty
(12) empty -> .
- reduce using rule 12 (empty -> .)
( reduce using rule 12 (empty -> .)
VAR reduce using rule 12 (empty -> .)
NUMBER reduce using rule 12 (empty -> .)
$end reduce using rule 12 (empty -> .)

lst shift and go to state 1


empty shift and go to state 2

state 1

(0) S' -> lst .


(1) lst -> lst . expr
(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 3

state 2

(2) lst -> empty .


- reduce using rule 2 (lst -> empty .)
( reduce using rule 2 (lst -> empty .)
VAR reduce using rule 2 (lst -> empty .)
NUMBER reduce using rule 2 (lst -> empty .)
$end reduce using rule 2 (lst -> empty .)

state 3

(1) lst -> lst expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
! shift/reduce conflict for - resolved as shift
( reduce using rule 1 (lst -> lst expr .)
VAR reduce using rule 1 (lst -> lst expr .)
NUMBER reduce using rule 1 (lst -> lst expr .)
$end reduce using rule 1 (lst -> lst expr .)
/ shift and go to state 8
* shift and go to state 9
- shift and go to state 10
+ shift and go to state 11

state 4

(3) expr -> - . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 12


state 5

(4) expr -> ( . expr )


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 13

state 6

(9) expr -> VAR . = expr


(10) expr -> VAR .
= shift and go to state 14
/ reduce using rule 10 (expr -> VAR .)
* reduce using rule 10 (expr -> VAR .)
- reduce using rule 10 (expr -> VAR .)
+ reduce using rule 10 (expr -> VAR .)
( reduce using rule 10 (expr -> VAR .)
VAR reduce using rule 10 (expr -> VAR .)
NUMBER reduce using rule 10 (expr -> VAR .)
$end reduce using rule 10 (expr -> VAR .)
) reduce using rule 10 (expr -> VAR .)

state 7

(11) expr -> NUMBER .


/ reduce using rule 11 (expr -> NUMBER .)
* reduce using rule 11 (expr -> NUMBER .)
- reduce using rule 11 (expr -> NUMBER .)
+ reduce using rule 11 (expr -> NUMBER .)
( reduce using rule 11 (expr -> NUMBER .)
VAR reduce using rule 11 (expr -> NUMBER .)
NUMBER reduce using rule 11 (expr -> NUMBER .)
$end reduce using rule 11 (expr -> NUMBER .)
) reduce using rule 11 (expr -> NUMBER .)

state 8

(5) expr -> expr / . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 15

state 9

(6) expr -> expr * . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 16

state 10

(7) expr -> expr - . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 17

state 11

(8) expr -> expr + . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 18

state 12

(3) expr -> - expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
/ reduce using rule 3 (expr -> - expr .)
* reduce using rule 3 (expr -> - expr .)
- reduce using rule 3 (expr -> - expr .)
+ reduce using rule 3 (expr -> - expr .)
( reduce using rule 3 (expr -> - expr .)
VAR reduce using rule 3 (expr -> - expr .)
NUMBER reduce using rule 3 (expr -> - expr .)
$end reduce using rule 3 (expr -> - expr .)
) reduce using rule 3 (expr -> - expr .)

state 13

(4) expr -> ( expr . )


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
) shift and go to state 19
/ shift and go to state 8
* shift and go to state 9
- shift and go to state 10
+ shift and go to state 11

state 14

(9) expr -> VAR = . expr


(3) expr -> . - expr
(4) expr -> . ( expr )
(5) expr -> . expr / expr
(6) expr -> . expr * expr
(7) expr -> . expr - expr
(8) expr -> . expr + expr
(9) expr -> . VAR = expr
(10) expr -> . VAR
(11) expr -> . NUMBER
- shift and go to state 4
( shift and go to state 5
VAR shift and go to state 6
NUMBER shift and go to state 7

expr shift and go to state 20

state 15
(5) expr -> expr / expr .
(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
/ reduce using rule 5 (expr -> expr / expr .)
* reduce using rule 5 (expr -> expr / expr .)
- reduce using rule 5 (expr -> expr / expr .)
+ reduce using rule 5 (expr -> expr / expr .)
( reduce using rule 5 (expr -> expr / expr .)
VAR reduce using rule 5 (expr -> expr / expr .)
NUMBER reduce using rule 5 (expr -> expr / expr .)
$end reduce using rule 5 (expr -> expr / expr .)
) reduce using rule 5 (expr -> expr / expr .)

state 16

(6) expr -> expr * expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
/ reduce using rule 6 (expr -> expr * expr .)
* reduce using rule 6 (expr -> expr * expr .)
- reduce using rule 6 (expr -> expr * expr .)
+ reduce using rule 6 (expr -> expr * expr .)
( reduce using rule 6 (expr -> expr * expr .)
VAR reduce using rule 6 (expr -> expr * expr .)
NUMBER reduce using rule 6 (expr -> expr * expr .)
$end reduce using rule 6 (expr -> expr * expr .)
) reduce using rule 6 (expr -> expr * expr .)

state 17

(7) expr -> expr - expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
- reduce using rule 7 (expr -> expr - expr .)
+ reduce using rule 7 (expr -> expr - expr .)
( reduce using rule 7 (expr -> expr - expr .)
VAR reduce using rule 7 (expr -> expr - expr .)
NUMBER reduce using rule 7 (expr -> expr - expr .)
$end reduce using rule 7 (expr -> expr - expr .)
) reduce using rule 7 (expr -> expr - expr .)
/ shift and go to state 8
* shift and go to state 9

state 18

(8) expr -> expr + expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
- reduce using rule 8 (expr -> expr + expr .)
+ reduce using rule 8 (expr -> expr + expr .)
( reduce using rule 8 (expr -> expr + expr .)
VAR reduce using rule 8 (expr -> expr + expr .)
NUMBER reduce using rule 8 (expr -> expr + expr .)
$end reduce using rule 8 (expr -> expr + expr .)
) reduce using rule 8 (expr -> expr + expr .)
/ shift and go to state 8
* shift and go to state 9

state 19

(4) expr -> ( expr ) .


/ reduce using rule 4 (expr -> ( expr ) .)
* reduce using rule 4 (expr -> ( expr ) .)
- reduce using rule 4 (expr -> ( expr ) .)
+ reduce using rule 4 (expr -> ( expr ) .)
( reduce using rule 4 (expr -> ( expr ) .)
VAR reduce using rule 4 (expr -> ( expr ) .)
NUMBER reduce using rule 4 (expr -> ( expr ) .)
$end reduce using rule 4 (expr -> ( expr ) .)
) reduce using rule 4 (expr -> ( expr ) .)

state 20

(9) expr -> VAR = expr .


(5) expr -> expr . / expr
(6) expr -> expr . * expr
(7) expr -> expr . - expr
(8) expr -> expr . + expr
( reduce using rule 9 (expr -> VAR = expr .)
VAR reduce using rule 9 (expr -> VAR = expr .)
NUMBER reduce using rule 9 (expr -> VAR = expr .)
$end reduce using rule 9 (expr -> VAR = expr .)
) reduce using rule 9 (expr -> VAR = expr .)
/ shift and go to state 8
* shift and go to state 9
- shift and go to state 10
+ shift and go to state 11

Conflicts:

shift/reduce conflict for - in state 3 resolved as shift

You might also like