Problema: escriba un programa YACC para la conversión de expresiones Infix a Postfix.
Explicación:
YACC (Yet another Compiler-Compiler) es el generador de analizador estándar para el sistema operativo Unix. Un programa de código abierto, yacc genera código para el analizador en el lenguaje de programación C. El acrónimo generalmente se representa en minúsculas, pero ocasionalmente se ve como YACC o Yacc.
Ejemplos:
Input: a*b+c Output: ab*c+ Input: a+b*d Output: abd*+
Código fuente del analizador léxico:
%{ /* 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 fuente del analizador:
%{ /* 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]); }
Producción:
Publicación traducida automáticamente
Artículo escrito por thakur_aman y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA