/*
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