REMOVING LEFT RECURSION AND INDIRECT LEFT RECURSION DEFINITIONS

  • Slides: 18
Download presentation
REMOVING LEFT RECURSION AND INDIRECT LEFT RECURSION

REMOVING LEFT RECURSION AND INDIRECT LEFT RECURSION

DEFINITIONS IMMEDIATE LEFT RECURSION. A production is immediately left recursive if its left hand

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

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

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

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® Aa 1

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

Let KA denote a symbol which does not already occur in the grammar. Replace

Let KA denote a symbol which does not already occur in the grammar. Replace the above productions by: A ® b 1 |. . . | bs | b 1 KA |. . . | bs. KA KA ® a 1 |. . . | ar | a 1 KA |. . . | ar. KA Clearly the grammar G' produced is equivalent to G

EXAMPLE. S ® R a | A a | a R ® a b

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: S ® R a | A a | a R ® a b A ® b | b KA KA ® R | T | R KA | T KA T ® a | a KT KT ® b | b KT

REMOVING INDIRECT LEFT RECURSION Let any ordering of the nonterminals of G be A

REMOVING INDIRECT LEFT RECURSION Let any ordering of the nonterminals of G be A 1, . . . , 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 A 1 occurs

We can eliminate left recursion in productions (if any) in which A 1 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

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

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

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

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.

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 A 1 ® A 2 A 3 A 2 ® A 3

EXAMPLE 1 A 1 ® A 2 A 3 A 2 ® A 3 A 1 | b A 3 ® A 1 | a Replace A 3 ® A 1 by A 3 ® A 2 A 3 A 1 and then replace this by A 3 ® A 3 A 1 and A 3 ® b A 3 A 1 Eliminating direct left recursion in the above, gives: A 3 ® a | b A 3 A 1 | a. K | b A 3 A 1 K k ® A 1 A 3 A 1 | A 1 A 3 A 1 K

The resulting grammar is then: A 1 ® A 2 A 3 A 2

The resulting grammar is then: A 1 ® A 2 A 3 A 2 ® A 3 A 1 | b A 3 ® a | b A 3 A 1 | a. K | b A 3 A 1 K k ® A 1 A 3 A 1 | A 1 A 3 A 1 K

EXAMPLE 2 S®AA|0 A®SS|1 Answer Considering the ordering S, A, we get: S®AA|0 A

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