Julio Vargas Roa - norman-ipn/Errores GitHub Wiki

Julio Vargas********

Traduce la especificacion de una gramatica de contexto libre a un programa en C que implementa un analizador LALR(1) para esa gram´atica. Permite asociar c´odigo C (acciones sem´anticas) a las reglas de la gram´atica • se ejecutar´a cada vez que se aplique la regla correspondiente Esquema de funcionamiento: fichero.y ---> BISON ---> fichero.tab.c fichero.tab.c + (ficheros .c) ---> GCC ---> ejecutable | |-- main() |-- yyerror() |-- yylex()

Compilacion:

bison fichero.y Compila la especificacion de la gramatica y crea el fichero fichero.tab.c con el codigo y las tablas del analizador LALR(1) $ gcc fichero.tab.c (ficheros .c) El usuario debe proporcinar las funciones main(), yyerror() y yylex() . El c´odigo de usuario deber´a llamar a la funci´on yyparse(), desde la cual se llamar´a a la funci´on yylex() del analizador l´exico cada vez que necesite un token. Opciones: bison -d genera "fichero.tab.h" con las definiciones de las constantes asociadas a los tokens, adem´as de variables y estrucutras de datos necesarias para el analizador l´exico. bison -v genera "fichero.output" con un resumen legible del aut´omata LALR(1) y se˜nala los conflictos y/o errores presentes en la gram´atica de entrada – FJRP 2007 ccia PL – 12. Funcionamiento del analizador El fichero "XXXX.tab.c" contine las tablas del analizador y la funci´on int yyparse(void) • yyparse() simula el analizador LALR(1) • devolver´a 0 si el an´alisis tubo ´exito y 1 si el an´alisis fallo • deber´a de ser llamada desde el c´odigo del usuario Cada vez que yyparse() necesite un nuevo token, llamar´a a la funci´on int yylex() • yylex() devuelve un n o entero que identifica al siguiente token • esas constantes enteras aparecen en el fichero "XXXX.tab.h" • yylex() devolver´a el token eof (end of file) cuando alcance el final del fichero

Para comunicar los atributos de los tokens se usa la variable global yylval

• es de tipo yystype y est´a declarada en "XXXX.tab.h" • yylex() escribe en yylval los valores que despu´es usar´a yyparse() La funci´on yyparse() realiza un an´alisis ascendente salto-reducci´on • agrupa tokens y no terminales seg´un a las reglas de la gram´atica • utiliza una pila donde acumula s´ımbolos • cuando en la cima de la pila se localiza el lado derecho de una regla, se eliminar´an de la pila y se meter´a en ella el no terminal del lado derecho de la regla. (REDUCCION)

Por regla general el c´odigo asociado a una regla (acciones sem´anticas) se ejecutar´a en el momento en que se reduzca la regla • es posible incluir c´odigo en mitad de la parte derecha de las reglas • a cada elemento de la pila se le asocia asociada una variable de tipo yystype • el c´odigo de las acciones sem´anticas puede acceder a esas varibles usando las pseudo-variables $$, $1, $2, $3, . . .

bibliografia http://ccia.ei.uvigo.es/docencia/PL/bison.pdf