SS 4 – C – SHIFT REDUCE PARSING TECHNIQUE

  SS LAB
4 – Design, develop and implement YACC/C program to demonstrate Shift Reduce Parsing technique for the grammar rules: E ®E+T | T, T ®T*F | F, F ®(E) | id and parse the sentence: id + id * id.

lab4.c – PROGRAM

#include<stdio.h>
#include<string.h>

int k=0,z=0,i=0,j=0,c=0;
char a[16],ac[20],stk[15],act[10];
void check();

int main()
{
    puts(“GRAMMAR is E->E+E n E->E*E n E->(E) n E->id”);
    puts(“nEnter input string :”);
    gets(a);
    c=strlen(a);
    strcpy(act,”SHIFT->”);
    puts(“stack t input t action”);
    for(k=0,i=0; j<c; k++,i++,j++)
    {
        if(a[j]==’i’ && a[j+1]==’d’)
        {
            stk[i]=a[j];
            stk[i+1]=a[j+1];
            stk[i+2]=’’;
            a[j]=’ ‘;
            a[j+1]=’ ‘;
            printf(“n$%st%s$t%sid”,stk,a,act);
            check();
        }
        else
        {
            stk[i]=a[j];
            stk[i+1]=’’;
            a[j]=’ ‘;
            printf(“n$%st%s$t%ssymbols”,stk,a,act);check();
        }
    }
}

void check()
{
    strcpy(ac,”REDUCE TO E”);
    for(z=0; z<c; z++)
        if(stk[z]==’i’ && stk[z+1]==’d’)
        {
            stk[z]=’E’;
            stk[z+1]=’’;
            printf(“n$%st%s$t%s”,stk,a,ac);
            j++;
        }
    for(z=0; z<c; z++)
        if(stk[z]==’E’ && stk[z+1]==’+’ && stk[z+2]==’E’)
        {
            stk[z]=’E’;
            stk[z+1]=’’;
            stk[z+2]=’’;
            printf(“n$%st%s$t%s”,stk,a,ac);
            i=i-2;
        }
    for(z=0; z<c; z++)
        if(stk[z]==’E’ && stk[z+1]==’*’ && stk[z+2]==’E’)
        {
            stk[z]=’E’;
            stk[z+1]=’’;
            stk[z+2]=’’;
            printf(“n$%st%s$t%s”,stk,a,ac);
            i=i-2;
        }
    for(z=0; z<c; z++)
        if(stk[z]=='(‘ && stk[z+1]==’E’ && stk[z+2]==’)’)
        {
            stk[z]=’E’;
            stk[z+1]=’’;
            stk[z+1]=’’;
            printf(“n$%st%s$t%s”,stk,a,ac);
            i=i-2;
        }

}

OUTPUT :( click on image to zoom )

LEAVE A COMMENT