LR(1) derivation example

Grammar

S -> if E then S else S
S -> if E then S
S -> read
E -> x

Input

if x then if x then read else read

STEP 1

Stack  :

Input  : if x then if x then read else read <eof>

Action : shift

STEP 2

Stack  :
if

Input  : x then if x then read else read <eof>

Action : goto

STEP 3

Stack  :
if

Input  : x then if x then read else read <eof>

Action : shift

STEP 4

Stack  :
if
x

Input  : then if x then read else read <eof>

Action : goto

STEP 5

Stack  :
if
x

Input  : then if x then read else read <eof>

Action : reduce E -> x . {then}

STEP 6

Stack  :
if
E
└── x

Input  : then if x then read else read <eof>

Action : goto

STEP 7

Stack  :
if
E
└── x

Input  : then if x then read else read <eof>

Action : shift

STEP 8

Stack  :
if
E
└── x
then

Input  : if x then read else read <eof>

Action : goto

STEP 9

Stack  :
if
E
└── x
then

Input  : if x then read else read <eof>

Action : shift

STEP 10

Stack  :
if
E
└── x
then
if

Input  : x then read else read <eof>

Action : goto

STEP 11

Stack  :
if
E
└── x
then
if

Input  : x then read else read <eof>

Action : shift

STEP 12

Stack  :
if
E
└── x
then
if
x

Input  : then read else read <eof>

Action : goto

STEP 13

Stack  :
if
E
└── x
then
if
x

Input  : then read else read <eof>

Action : reduce E -> x . {then}

STEP 14

Stack  :
if
E
└── x
then
if
E
└── x

Input  : then read else read <eof>

Action : goto

STEP 15

Stack  :
if
E
└── x
then
if
E
└── x

Input  : then read else read <eof>

Action : shift

STEP 16

Stack  :
if
E
└── x
then
if
E
└── x
then

Input  : read else read <eof>

Action : goto

STEP 17

Stack  :
if
E
└── x
then
if
E
└── x
then

Input  : read else read <eof>

Action : shift

STEP 18

Stack  :
if
E
└── x
then
if
E
└── x
then
read

Input  : else read <eof>

Action : goto

STEP 19

Stack  :
if
E
└── x
then
if
E
└── x
then
read

Input  : else read <eof>

Action : reduce S -> read . {<eof>, else}

STEP 20

Stack  :
if
E
└── x
then
if
E
└── x
then
S
└── read

Input  : else read <eof>

Action : goto

STEP 21

Stack  :
if
E
└── x
then
if
E
└── x
then
S
└── read

Input  : else read <eof>

Action : conflict shift/reduce


First, Follow, Nullable sets

first    (E) = {x}
follow   (E) = {then}
nullable (E) = false

first    (S) = {if, read}
follow   (S) = {else}
nullable (S) = false

first    (else) = {else}
follow   (else) = {if, read}
nullable (else) = false

first    (if) = {if}
follow   (if) = {x}
nullable (if) = false

first    (read) = {read}
follow   (read) = {else}
nullable (read) = false

first    (then) = {then}
follow   (then) = {if, read}
nullable (then) = false

first    (x) = {x}
follow   (x) = {then}
nullable (x) = false

Automaton


The example on this page is auto-generated with dOvs teaching LR parser generator tool. The tool and the webpage is maintained by Aslan Askarov.