You are on page 1of 18

REMOVING LEFT RECURSION

AND INDIRECT LEFT


RECURSION

DEFINITIONS
IMMEDIATE LEFT RECURSION. A
production is immediately left recursive if its left
hand side and the head of its right hand side are
the same symbol, e.g. B Bvt
A grammar is called immediately left recursive if it
possesses an immediately left recursive
production.

INDIRECT LEFT RECURSION. A


grammar is said to posess indirect left
recursion if it is possible, starting from any
symbol of the grammar, to derive a string
whose head is that symbol.
Example. A Br
B Cs
C At
Here, starting with A, we can derive Atsr

NOTE.
1. Immediate left recursion is a special case
of indirect left recursion (in which the
derivation involved is just a single step)
2. Immediate left recursion is
conventionally referred to simply as left
recursion (leaving out the word
immediate). But, for our purposes, this
is confusing, so we will not follow that
practice.

Let G be any grammar in which the only production, if


any, which contains a symbol that vanishes is S ,
where S is the goal symbol, and which contains no
useless or unit productions.
To remove left recursion from G (i.e. produce an
equivalant grammar with the same language as G,
but which is not left recursive), do the following:
For each nonterminal A that occurs as the lhs of a leftrecursive production of G,
do the following:

Let the left-recursive productions in which A


occurs as lhs be
A A1
.
A Ar
and the remaining productions in which A
occurs as lhs be
A 1
.
A s

Let KA denote a symbol which does not already


occur in the grammar.
Replace the above productions by:
A 1 | . . . | s | 1KA | . . . | sKA
KA 1 | ... | r | 1KA | ... | rKA
Clearly the grammar G' produced is equivalent
to G

EXAMPLE.
S R a | A a | a
R a b
A AR | A T | b
T T b | a
A non-left recursive grammar equiv. to the above is:
S R a | A a | a
R a b
A b | b KA
KA R | T | R KA | T KA
T a | a KT
K b | b K

REMOVING INDIRECT LEFT RECURSION


Let any ordering of the nonterminals of G be
A1,...,Am,
we will remove indirect left recursion by
constructing an equivalant grammar G such
that
If Ai Aj is any production of G,
then i < j

We can eliminate left recursion in


productions (if any) in which A1 occurs as lhs.
Assume that this is true for all i t where t<m,
and let the grammar so formed from G be
denoted as Gt.

Consider any production of Gt with At+1


as LHS and Aj as the head of its rhs,
where j < t+1, e.g. At+1 Aj.
By our assumption, all productions of the form
Aj have as their head
either a terminal or Ak for some k > j.

So if we substitute for Aj in At+1 Aj all the


rhss with Aj as the LHS, then we will get
productions of the form:
At+1
a rhs with a terminal as head,
or At+1

a rhs with Ak as its head


where k > j

By iterating the above process, we will end up


with a grammar Gt in which all productions
with At+1 as lhs either have a terminal as the
head of the rhs or a nonterminal Ak for
some k t+1.

Productions of this kind in which k=t+1 are left


recursive, and can be eliminated to produce a
grammar which we will call Gt+1.
Proceeding in this way for increasing values of t, we
will obtain a grammar G equivalent to G, in which
if Ai Aj is any production of G,
then i < j

G will in addition contain some


productions with subscripted Ks as
left hand side. These do not
introduce any direct or indirect left
recursion, since the corresponding
right hand sides (such as e.g. b KA )
start with symbols that do not
vanish, and no symbol derives a
string starting with a subsripted K

EXAMPLE 1
A1 A2 A3
A2 A3 A1 | b
A3 A1 A1 | a
Replace A3 A1 A1 by A3 A2 A3 A1
and then replace this by
A3 A3 A1 A3 A1 and A3 b A3 A1
Eliminating direct left recursion in the above,
gives: A3 a | b A3 A1 | aK | b A3 A1K
k A1 A3 A1 | A1 A3 A1K

The resulting grammar is then:


A1 A2 A3
A2 A3 A1 | b
A3 a | b A3 A1 | aK | b A3 A1K
k A1 A3 A1 | A1 A3 A1K

EXAMPLE 2
S A A | 0
A S S | 1
Answer
Considering the ordering S, A, we get:
S A A | 0
A S | 0S | 1
and removing immediate left recursion, we get
S A A | 0
A S | 1 | 0SKA | 1KA
KA AS | ASKA

You might also like