0% found this document useful (0 votes)
45 views4 pages

Experiment 6:: AIM: WAP To Remove Left Recursion From The Grammar

The document describes removing left recursion from a grammar. It defines left recursion as when the leftmost variable of a production's right-hand side is the same as the left-hand side variable. It explains how to eliminate left recursion by converting the grammar to a right recursive grammar, replacing left recursive pairs of productions with a new nonterminal.

Uploaded by

akshat sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views4 pages

Experiment 6:: AIM: WAP To Remove Left Recursion From The Grammar

The document describes removing left recursion from a grammar. It defines left recursion as when the leftmost variable of a production's right-hand side is the same as the left-hand side variable. It explains how to eliminate left recursion by converting the grammar to a right recursive grammar, replacing left recursive pairs of productions with a new nonterminal.

Uploaded by

akshat sharma
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

EXPERIMENT 6:

AIM: WAP to Remove Left Recursion from the Grammar.


THEORY:
Left Recursion-
 A production of grammar is said to have left recursion if the leftmost variable of its RHS
is same as variable of its LHS.
 A grammar containing a production having left recursion is called as Left Recursive
Grammar.
Elimination of Left Recursion
Left recursion is eliminated by converting the grammar into a right recursive grammar.If we
have the left-recursive pair of productions-
A → Aα / β
(Left Recursive Grammar)
where β does not begin with an A.
Then, we can eliminate left recursion by replacing the pair of productions with-
A → βA’
A’ → αA’ / ∈
(Right Recursive Grammar)
CODE:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n, j, l, i, k;
int length[10] = {};
string d, a, b, flag;
char c;
cout<<"Enter Parent Non-Terminal: ";
cin >> c;
d.push_back(c);
a += d + "\'->";
d += "->";
b += d;
cout<<"Enter productions: ";
cin >> n;
for (int i = 0; i < n; i++)
{
cout<<"Enter Production ";
cout<<i + 1<<" :";
cin >> flag;
length[i] = flag.size();
d += flag;
if (i != n - 1)
{
d += "|";
}
}
cout<<"The Production Rule is: ";
cout<<d<<endl;
for (i = 0, k = 3; i < n; i++)
{
if (d[0] != d[k])
{
cout<<"Production: "<< i + 1;
cout<<" does not have left recursion.";
cout<<endl;
if (d[k] == '#')
{
b.push_back(d[0]);
b += "\'";
}
else
{
for (j = k; j < k + length[i]; j++)
{
b.push_back(d[j]);
}
k = j + 1;
b.push_back(d[0]);
b += "\'|";
}
}
else
{
cout<<"Production: "<< i + 1 ;
cout<< " has left recursion";
cout<< endl;
if (d[k] != '#')
{
for (l = k + 1; l < k + length[i]; l++)
{
a.push_back(d[l]);
}
k = l + 1;
a.push_back(d[0]);
a += "\'|";
}
}
}
a += "#";
cout << b << endl;
cout << a << endl;
return 0;
}

OUTPUT:

You might also like