REMOVING LEFT RECURSION AND INDIRECT LEFT RECURSION

Presentation on theme: "REMOVING LEFT RECURSION AND INDIRECT LEFT RECURSION"— Presentation transcript:

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
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. Immediate left recursion is a special case of indirect left recursion (in which the derivation involved is just a single step) “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 left-recursive production of G, do the following:

Let the left-recursive productions in which A occurs as lhs be
A® Aa1                      ……….                     A® Aar and the remaining productions in which A occurs as lhs be                     A® b1                      ………….                     A® bs

Let KA denote a symbol which does not already occur in the grammar.
Replace the above productions by:                     A ® b1 | | bs | b1KA | | bsKA                     KA ® a1 | ... | ar | a1KA | ... | arKA Clearly the grammar G' produced is equivalent to G

EXAMPLE. S ® R a | A a | a R ® a b A ® A R | A T | b T ® T b | a A non-left recursive grammar equiv. to the above is: A ® b | b KA KA ® R | T | R KA | T KA T ® a | a KT KT ® b | b KT Clearly the grammar G’ obtained is equivalent to G, and has the required two properties

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 ® Aja  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 ® Ajb.  By our assumption, all productions of the form Aj ® a  have as their head either a terminal or Ak for some k > j.

So if we substitute for Aj in  At+1 ® Ajb  all the rhs’s 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 ® Aja  is any production of G’, then i < j

G’ will in addition contain some productions with subscripted K’s 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: A ® AAS | 0S | 1 and removing immediate left recursion, we get A ® 0S | 1 | 0SKA | 1KA KA ® AS | ASKA