Source code:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
char rlgtr[5][5];
void main()
{
char rhs[][3] = {"bB", "aB", "a",
"b"};
char lhs[4] = {'S', 'B', 'C', 'B'}, temp[5], a, c, b;
char states[5], symb[5];
int i, j, k = 0, l = 0, p, q, r;
clrscr();
for(i = 0; i < 4; i++)
{
if(i == 0)
{
rlgtr[0][0] = lhs[0];
}
for( j = 0; j < i; j++)
{
if(states[j] == lhs[i])
{
break;
}
}
if(j == i)
{
states[l] = lhs[j];
l++;
}
for(j = 0; j < 3; j++)
{
b = rhs[i][j];
if(b >= 97 && b <= 122)
temp[i] = b;
}
for(j = 0; j < i; j++)
{
if(symb[j] == temp[i])
{
break;
}
}
if(j == i)
{
symb[k] = temp[j];
k++;
}
}
for(j = 0; j < l; j++)
{
a = states[j];
for(p = 0; p < 4; p++)
{
if(lhs[p] == a)
{
for(r = 0; r < k; r++)
{
if(rhs[p][0] ==
symb[r])
{
if(rhs[p][1] != '\0')
{
rlgtr[j][r] = rhs[p][1];
}
if(rhs[p][1] == '\0')
{
rlgtr[j][r] = 'e';
}
}
}
}
}
}
printf("Transition Table For Right Linear
Grammer:-\n\n");
for(i = 0; i < k; i++)
{
printf("\t%c", symb[i]);
}
printf("\n\n");
for(i = 0; i < l; i++)
{
printf("%c\t", states[i]);
for(j = 0; j < k; j++)
{
printf("%c\t", rlgtr[i][j]);
}
printf("\n\n");
}
printf("\n\nTransition Table For Left Linear
Grammer:-\n\n");
for(i = 0; i < k; i++)
{
printf("\t%c", symb[i]);
}
printf("\n\n");
for(i = 0; i < l; i++)
{
for(j = 0; j < k; j++)
{
if(rlgtr[i][j] == 'e')
{
rlgtr[i][j] = lhs[0];
}
}
if(states[i] == 'S')
{
states[i] = 'e';
}
}
for(i = 0; i < l; i++)
{
printf("%c\t", states[i]);
for(j = 0; j < k; j++)
{
printf("%c\t", rlgtr[i][j]);
}
printf("\n\n");
}
getch();
clrscr();
printf("Given Right Linear Grammer Is:-\n\n");
for(i = 0; i < 4; i++)
{
printf("%c-->%s\n\n", lhs[i], rhs[i]);
}
printf("Converted Left Linear Grammer Is:-\n\n");
for(i = 0; i < l; i++)
{
for(j = 0; j < k; j++)
{
if(rlgtr[i][j] !=
'\0' && (rlgtr[i][j] >= 65 && rlgtr[i][j] <= 96)
&& states[i] != 'e')
{
printf("%c-->%c%c\n\n",
rlgtr[i][j], states[i], symb[j]);
}
if(rlgtr[i][j] !=
'\0' && (rlgtr[i][j] >= 65 && rlgtr[i][j] <= 96)
&& states[i] == 'e')
{
printf("%c-->%c\n\n",
rlgtr[i][j], symb[j]);
}
}
}
getch();
}
Output:
Given Right Linear Grammer Is:-
S-->bB
B-->aB
C-->a
B-->b
Converted Left Linear Grammer Is:-
B-->b
S-->Bb
B-->Ba
S-->Ca
No comments:
Post a Comment
If you have any doubts please let me know