Programa YACC para conversão de expressão Infix em Postfix
Problema: Escreva um programa YACC para conversão da expressão Infix em Postfix.
Explicação:
YACC (Yet another Compiler-Compiler) é o gerador de analisador padrão para o sistema operacional Unix. Um programa de código aberto, o yacc gera código para o analisador na linguagem de programação C. O acrônimo é geralmente processado em minúsculas, mas às vezes é visto como YACC ou Yacc.
Exemplos:
Input: a*b+c Output: ab*c+ Input: a+b*d Output: abd*+
Código-fonte do Lexical Analyzer:
%{
/* Definition section */
%}
ALPHA [A-Z a-z]
DIGIT [0-9]
/* Rule Section */
%%
{ALPHA}({ALPHA}|{DIGIT})* return ID;
{DIGIT}+ {yylval=atoi(yytext); return ID;}
[\n \t] yyterminate();
. return yytext[0];
%%
Código-fonte do analisador:
%{
/* Definition section */
#include <stdio.h>
#include <stdlib.h>
%}
%token ID
%left '+' '-'
%left '*' '/'
%left UMINUS
/* Rule Section */
%%
S : E
E : E'+'{A1();}T{A2();}
| E'-'{A1();}T{A2();}
| T
;
T : T'*'{A1();}F{A2();}
| T'/'{A1();}F{A2();}
| F
;
F : '('E{A2();}')'
| '-'{A1();}F{A2();}
| ID{A3();}
;
%%
#include"lex.yy.c"
char st[100];
int top=0;
//driver code
int main()
{
printf("Enter infix expression: ");
yyparse();
printf("\n");
return 0;
}
A1()
{
st[top++]=yytext[0];
}
A2()
{
printf("%c", st[--top]);
}
A3()
{
printf("%c", yytext[0]);
}
Saída:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva