Show that every SLR (1) is unambiguous, but some unambiguous grammars are not SLR (1). Check this for the following productions.
S → L = R
S → R
L →* R
L → id
R → L


Solution

Step1 − First of all, convert it into augmented grammar G′ and number the productions

(0) S′ → S

(1) S → L = R

(2) S → R

(3) L →∗ R

(4) L → id

(5) R → L

Step2 − Find closure and goto function to construct LR (0) items.

In the following set of LR (0) items, Boxes represents the new states and circle represents Repeating states

Step3− Computation of FOLLOW− Applying Rule (1) of FOLLOW, we get

FOLLOW(S) = $                                                 (1)

  • S → L = R

Applying Rule (2) FOLLOW − Comparing S → L = R with A → α B β.

S →ΕL= R
A →ΑBΒ

∴ A = S, α = ε, B = L, β = {= R}

FIRST(β) = FIRST(= R) = {=} does not contain ε

Rule (2a) of FOLLOW

FOLLOW(L) = {=}                                                (2)

Applying Rule (3) of FOLLOW− Comparing S → L = R with A → α B

S →L =R
A →αΒ

∴ FOLLOW(R) = {FOLLOW(S)}                           (3)

  • S → R

Rule (2) of FOLLOW cannot be applied.

As S → R cannot be compared with A → α B β. Because, if we compare, we get, α = ε, B = R, β = ε. But β should not be ε to apply this rule.

Applying Rule (3) of FOLLOW − Comparing S → R with A → α B

S →εR
A →αΒ

∴ A = S, α = ε, B = R

FOLLOW(R) = {FOLLOW(S)}                               (4)

  • L →*R

Rule (2) of FOLLOW cannot be applied.

As L →* R cannot be compared with A → α B β. Since β will be ε, which is not possible.

Applying Rule (3) of FOLLOW − Comparing L →∗ R with A → α B

L →*R
A →αΒ

∴ A = L, α =∗, B = R

FOLLOW(R) = {FOLLOW(L)}                                    (5)

  • L →id

Rule (2) and (3) of FOLLOW cannot be applied.

As L → id cannot be match with A → α B β and A → α B.

  • R → L

Rule (2) cannot be applied.

As R → L cannot be match with A → α B β.

Applying Rule (3) of FOLLOW − Comparing R → L with A → α B

R →EL
A →AΒ

∴ A = R, α = ε, B = L

FOLLOW(L) = {FOLLOW(R)}                                         (6)

Combining Statements (1) to (6)

FOLLOW(S) = $                                                             (1)

FOLLOW(L) = {=}                                                           (2)

FOLLOW(R) = {FOLLOW(S)}                                        (3)

FOLLOW(R) = {FOLLOW(S)}                                        (4)

FOLLOW(R) = {FOLLOW(L)}                                        (5)

FOLLOW(L) = {FOLLOW(R)}                                        (6)

From (1)

            FOLLOW(S) = $

From (1), (2), (3), (4), (5), (6).

                                 FOLLOW(L) = FOLLOW(R) = {=, $}

Construction of Parsing Table

Filling Shift Entries (s)

Since goto (I0,*) = I4

∴ Action [0,∗] = s4

Since goto (I0, id) = I5

∴ Action [0, id] = s5

Similarly, All shift entries (s) are filled into the table.

Filling Reduce Entries (r)

Applying Rule (2b) construction of SLR Parsing Table

Consider

I2 S → L ∙= R

R → L ∙

R → L ∙ is compared with A → α ∙

R →L.
A →α.

∴ A = R, α = L

Since R → L is Production number (5) in the given Question.

∴ Write r5 in front of Row state 2 and column =, $.

Similarly, other entries of Reduce are filled into the table.

Filling of "accept" Entry

Consider I1

I1 − S′ → S ∙

Apply Rule (4) of Parsing Table Construction

∴ Write “accept” in front of row state 1 and column $.

By Filling all the shift, reduce, goto & accept entries, we get the following Parsing Table.

The following table display precisely that there are multiple entries in Action [2, =] = s6 or r5.

State I2 − S → L ∙ = R

R → L ∙

R → L ∙ is of form A → α ∙

∴ Reduce Rule can be applied on it.

R → L is production number (5) in given question.

∴ Action [2, =] = r5

∴ goto (I2, =) = I6

∴ Action [2, =] = s6

Therefore, there is shift | Reduce conflict on Entry Action [2, =]. This shows that given grammar is not SLR (1).

Updated on: 02-Nov-2021

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements