#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
Char a[50], b[50],d[200],e[10];
Char ch;
int n1,i1=0,flag=1,n=5;
int total=0;
int E ();
int E1 ();
int T ();
int G ();
int S ();
int F ();
void input ();
void Input1 ();
void output ();
void Main ()
{
int f,p,j=0;
char x;
d[0]= ' E ';
d[1]= ' = ';
D[2]= ' > ';
d[3]= ' T ';
d[4]= ' G ';
d[5]= ' # ';
printf ("Please enter string (length <50, End with # #) n");
do{
scanf ("%c", &ch);
A[j]=ch;
j + +;
}while (ch!= ' # ');
N1=j;
CH=B[0]=A[0];
printf ("Step t grammar t parsing string TT analysis character T remaining string n");
F=e1 ();
if (f==0)
Return
if (ch== ' # ')
{
printf ("ACCEPTN");
P=0;
X=D[P];
while (x!= ' # ')
{
printf ("%c", x);p =p+1;x=d[p];
}
}
Else
{
printf ("Errorn");
printf ("Enter returns n");
GetChar ();
GetChar ();
Return
}
printf ("n");
printf ("Enter returns n");
GetChar ();
GetChar ();
}
int E1 ()
{
int f,t;
printf ("%dte-->tgt", total); total++;
flag=1;
Input ();
INPUT1 ();
F=t ();
if (f==0) return (0);
T=g ();
if (t==0)
return (0);
Else
return (1);
}
int E ()
{
int f,t;
printf ("%dte-->tgt", total);
total++;
e[0]= ' E ';
e[1]= ' = ';
E[2]= ' > ';
e[3]= ' T ';
e[4]= ' G ';
e[5]= ' # ';
Output ();
flag=1;
Input ();
INPUT1 ();
F=t ();
if (f==0)
return (0);
T=g ();
if (t==0)
return (0);
Else
return (1);
}
int T ()
{
int f,t;
printf ("%dtt-->fst", total); total++;
e[0]= ' T ';
e[1]= ' = ';
E[2]= ' > ';
e[3]= ' F ';
e[4]= ' S ';
e[5]= ' # ';
Output ();
flag=1;
Input ();
INPUT1 ();
F=f ();
if (f==0)
return (0);
T=s ();
if (t==0)
return (0);
Else
return (1);
}
int G ()
{
int F;
if (ch== ' + ')
{
B[i1]=ch;
printf ("%dtg-->+tgt", total); total++;
e[0]= ' G ';
e[1]= ' = ';
E[2]= ' > ';
e[3]= ' + ';
e[4]= ' T ';
e[5]= ' G ';
e[6]= ' # ';
Output ();
flag=0;
Input (); input1 ();
CH=A[++I1];
F=t ();
if (f==0)
return (0);
G ();
return (1);
}
printf ("%dtg-->^t", total); total++;
e[0]= ' G '; e[1]= ' = '; e[2]= ' > '; e[3]= ' ^ '; e[4]= ' # ';
Output ();
flag=1;
Input (); input1 ();
return (1);
}
int S ()
{
int f,t;
if (ch== ' * ')
{
b[i1]=ch;printf ("%dts-->*fst", total); total++;
E[0]= ' s '; e[1]= ' = '; e[2]= ' > '; e[3]= ' * '; e[4]= ' F '; e[5]= ' s '; e[6]= ' # ';
Output ();
flag=0;
Input ();
INPUT1 ();
CH=A[++I1];
F=f ();
if (f==0)
return (0);
T=s ();
if (t==0)
return (0);
Else
return (1);
}
printf ("%dts-->^t", total); total++;
e[0]= ' S '; e[1]= ' = '; e[2]= ' > '; e[3]= ' ^ '; e[4]= ' # ';
Output ();
flag=1;
A[i1]=ch;
Input ();
INPUT1 ();
return (1);
}
int F ()
{
int F;
if (ch== ' (')
{
b[i1]=ch;printf ("%dtf--> (E) T", total); total++;
e[0]= ' F '; e[1]= ' = '; e[2]= ' > '; e[3]= ' ('; e[4]= ' e '; e[5]= ') '; e[6]= ' # ';
Output ();
flag=0;
Input ();
INPUT1 ();
CH=A[++I1];
F=e ();
if (f==0)
return (0);
if (ch== ') ')
{
B[i1]=ch;
printf ("%dtf--> (E) T", total);
total++;
flag=0;
Input ();
INPUT1 ();
CH=A[++I1];
}
Else
{
printf ("Errorn");
return (0);
}
}
else if (ch== ' I ')
{
b[i1]=ch;printf ("%dtf-->it", total); total++;
e[0]= ' F '; e[1]= ' = '; e[2]= ' > '; e[3]= ' I '; e[4]= ' # ';
Output ();
Flag=0;input (); input1 ();
CH=A[++I1];
}
Else
{
printf ("Errorn");
return (0);
}
return (1);
}
void input ()
{
int j=0;
for (; j<=i1-flag;j++)
printf ("%c", B[j]);
printf ("tt");
printf ("%CTT", ch);
}
void Input1 ()
{
Int J;
for (j=i1+1-flag;j<n1;j++)
printf ("%c", A[j]);
printf ("n");
}
void Output ()
{
int m,k,j,q;
int i=0;
m=0;k=0;q=0;
I=n;
d[n]= ' = ';d [n+1]= ' > ';d [n+2]= ' # '; n=n+2;i=n;
I=i-2;
while (d[i]!= ' > ' &&i!=0) i=i-1;
i=i+1;
while (d[i]!=e[0]) i=i+1;
Q=i;
m=q;k=q;
while (d[m]!= ' > ') m=m-1;
m=m+1;
while (m!=q) {
d[n]=d[m];m=m+1;n=n+1;
}
d[n]= ' # ';
for (j=3;e[j]!= ' # '; j + +) {
D[N]=E[J];
n=n+1;
}
k=k+1;
while (d[k]!= ' = ') {
d[n]=d[k];n=n+1;k=k+1;
}
d[n]= ' # ';
System ("pause");
}
Recursive Descent grammar Analysis program design