Compilador yacc
Teoría de Autómatas y lenguajes formales Federico Simmross Wattenberg (fedesim@infor.uva.es) Universidad de Valladolid
Hemos visto cómo el análisisléxico facilita la tarea de reconocer los elementos de un lenguaje uno a uno. A partir de ahora, vamos a centrarnos en el análisis sintáctico, que nos permitirá averiguar si un fichero de entradacualquiera respeta las reglas de una gramática concreta. Para el tema del análisis sintáctico vamos a utilizar la herramienta yacc (Yet Another Compiler Compiler).
1. Funcionamiento de yacc
Igual quesucedía con lex, yacc no es directamente un analizador sino un generador de analizadores. A partir de un fichero fuente en yacc, se genera un fichero fuente en C que contiene el analizador sintáctico.Sin embargo, un analizador sintáctico de yacc no puede funcionar por sí solo, sino que necesita un analizador léxico externo para funcionar. Dicho de otra manera, el fuente en C que genera yacccontiene llamadas a una función yylex() que debe estar definida y debe devolver el tipo de lexema encontrado. Además, es necesario incorporar también una función yyerror(), que será invocada cuando elanalizador sintáctico encuentre un símbolo que no encaja en la gramática.
Programa fuente en Yacc (.y) Podemos
Compilador de Yacc (yacc, bison)
y.tab.c
y.tab.c
Compilador de C (gcc)a.out
yylex() yyerror()
Fichero de entrada
a.out
Acciones
2. El lenguaje Yacc
2.1. Esquema general Un programa fuente de Yacc se parece bastante a uno de lex. La diferencia principal estáen la sección de reglas, que en vez de expresiones regulares contiene las reglas de la gramática:
%% %%
•
De estas tres secciones, sólo la segunda es obligatoria, y no debe estar vacía(nótese que en lex, las tres secciones pueden estar vacías). Esto quiere decir que el mínimo programa en yacc es: %% regla gramatical acción en C
•
La sección de declaraciones puede incluir...
Regístrate para leer el documento completo.