Monday, January 21, 2019

Recursive Descent Parser in C

//We are  writing recursive descent parser for
// E -> TE'
// E' -> +TE' | NULL
// T -> FT'
// T' -> *FT' | NULL
// F -> (E) | id


#include<stdio.h>
#include<string.h>
void E();
void T();
void F();
void Eds();
void Tds();
char input[100];
int i,error;
int main()
{
    printf("Enter the input \n");
    gets(input);
    E();
    if(i==strlen(input) && error==0)
    {
        printf("String is Accepted\n");
    }
    else
    {
        printf("String is Rejected\n");
    }
}
void E()
{
   T();
   Eds();
}
void T()
{
    F();
    Tds();
}
void Eds()
{
    if(input[i]=='+')
    {
        i++;
        T();
        Eds();
    }
}
void Tds()
{
    if(input[i]=='*')
    {
        i++;
        F();
        Tds();
    }
}
void F()
{
    if((input[i]>='a'&&input[i]<='z') || (input[i]>='A'&&input[i]<='Z'))
    {
        i++;
    }
    else if(input[i]=='(')
    {
        i++;
        E();
        if(input[i]==')')
        {
            i++;
        }
        else
        {
            error=1;
        }
    }
    else
    {
        error=1;
    }
}

No comments: