About

Kannur University btech CSE study materials, question papers, syllabus . . .

Saturday, June 8, 2013

S6 CSE COMPILER LAB : PARSER FOR INTERMEDIATE CODE GENERATION

                              
       /*  PARSER  FOR INTERMEDIATE CODE GENERATION   */

Yacc program

%{
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
%}
%token id digit
%left '+''-'
%left '*''/'
%left '^'
%right '='
%nonassoc UMINUS
%%
S:id {push();}'='E {pop();}
E:E'+' {push();}T {pop3();}
  |E'-' {push();}T {pop3();}
  |T
  ;
T:T'*' {push();}F {pop3();}
 |T '/' {push();}F {pop3();}
 |T'^' {push();}F {pop3();}
 |F
 ;
F:id {push();}
 |digit {push();}
 |'('E')'
 |'-' {push();}F {pop2();} %prec UMINUS
 ;
%%
#include "lex.yy.c"

char stack[10][10],var[10]="\0",temp[10]="\0";
int top=0;
char i='0';
int main()
 {
  yyparse();
  yylex();
  return 0;
 }
yyerror(char *s)
 {
  printf("%s\n",s);
 }
push()
{
top++;
strcpy(stack[top],yytext);
}
pop3()
{
 printf("\nt%c=%s%s%s",i,stack[top-2],stack[top-1],stack[top]);
 top=top-2;
 temp[0]=i;
 strcpy(var,"t");
 strcat(var,temp);
 strcpy(stack[top],var);
 i++;
}

pop()
{
 printf("\n%s=%s\n",stack[top-1],stack[top]);
}
pop2()
{
 printf("\nt%c=%s%s",i,stack[top-1],stack[top]);
 top--;
 temp[0]=i;
 strcpy(var,"t");
 strcat(var,temp);
 strcpy(stack[top],var);
i++;
}

Lex program

%{
#include "y.tab.h"
%}
%%
[0-9]+ {return digit;}
[a-z]+ {return id;}
[ \t]  ;
[\n] {return 0;}
.    {return yytext[0];}
%%


 OUTPUT

a=b+c
t0=b+c
a=t0

c=x*y+d
t0=x*y
t1=t0+d
c=t1


0 comments:

Post a Comment