Monday, 5 September 2016

second way for Recursive descent parser

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