About

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

Saturday, June 8, 2013

S6 CSE COMPILER LAB : INFIX TO POSFIX CONVERSION

/*  INFIX TO POSFIX CONVERSION   */

Yacc program

%{
#include<stdio.h>
int top=0;
char stack[50];
%}
%token id digit
%left '+''-'
%left '*''/'
%left '^'
%nonassoc UMINUS
%%
S:E
E:E'+' {push();}T {pop();}
 |E'-' {push();}T {pop();}
 |T
    ;
T:T'*' {push();}F {pop();}
 |T'/' {push();}F {pop();}
 |T'^' {push();}F {pop();}
 |F
   ;
F:id {print();}
 |digit {print();}
 |'('E')'
 ;
%%
#include"lex.yy.c"
int main()
{
 yyparse();
yylex();
return 0;
}
yyerror(char *s)
{
printf("\n error \n");
}
push()
{
top++;
stack[top]=yytext[0];
}
pop()
{
printf("%c",stack[top]);
top--;
}
print()
{
printf("%c",yytext[0]);
}

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


 OUTPUT

a+b
ab+  

a*b-c/2
ab*c2/-

p+3*a-q
p3a*+q-




0 comments:

Post a Comment