Aim : Implementing recursive descent
parser for sample language.
#include<stdio.h>
#include<string.h>
char input[10];
int i=0,error=0;
void E();
void T();
void Eprime();
void Tprime();
void F();
main()
{
printf("\n\t\tGRAMMER
WITHOUT RECURSION");
printf("\n\t\tE------>TE'\n\t\tE'/e\r\t\tT----->FT");
printf("\n\t\tT------>*FT/e\n\t\tF------>(E)/id");
printf("\n\t\tEnter
an arithmetic expression : ");
gets(input);
E();
if(strlen(input)==i&&error==0)
printf("\n\t\tAccepted..!!!\n");
else
printf("\n\t\tRejected..!!!\n");
}
void E()
{
printf("\n\t\tE------->TE'");
T();
Eprime();
}
void Eprime()
{
if(input[i]=='+')
{
printf("\n\t\tE'------->+TE'");
i++;
T();
Eprime();
}
else
printf("\n\t\tE'----->e'");
}
void T()
{
printf("\n\t\tT------->FT'");
F();
Tprime();
}
void Tprime()
{
if(input[i]=='*')
{
printf("\n\t\tT'------>*FT'");
i++;
F();
Tprime();
}
else
{
printf("\n\t\tT'----->e");
}
}
void F()
{
if(input[i]=='a')
{
printf("\n\t\tF------>a");
i++;
}
else
{
if(input[i]=='(')
{
printf("\n\t\tF----->(E)");
i++;
E();
if(input[i]==')')
{
i++;
}
else
{
printf("\n\t\tSyntax Error");
error=1;//exit(1);
}
}
else
error=1;
}
}
OUTPUT
[student@localhost ~]$ gcc rdp.c
[student@localhost ~]$ ./a.out
GRAMMER
WITHOUT RECURSION
E------>TE'
T----->FT
T------>*FT/e
F------>(E)/id
Enter
an arithmetic expression : a+a*a
E------->TE'
T------->FT'
F------>a
T'----->e
E'------->+TE'
T------->FT'
F------>a
T'------>*FT'
F------>a
T'----->e
E'----->e'
Accepted..!!!
[student@localhost ~]$
No comments:
Post a Comment