Acciones Yacc Elaborado el martes 13 de Septiembre
Acciones Yacc Elaborado el martes 13 de Septiembre de 2005 Acciones Yacc
Contenidos Acciones Yacc Relación Lex y Yacc Paso de atributos de Lex a Yacc Sentencias de definición de Yacc 30/10/2020 Acciones Yacc 2
Fases de un Compilador programa fuente Acciones Yacc administrador de la tabla de símbolos analizador léxico analizador sintáctico analizador semántico generador de código intermedio manejador de errores optimizador de código generador de código objeto programa objeto 30/10/2020 Acciones Yacc 3
Interacción entre Fases yyerror() manejador de errores yylex() programa fuente analizador léxico componente léxico yyparse() analizador sintáctico obtén el siguiente componente léxico administrador de la tabla de símbolos 30/10/2020 Acciones Yacc 4
Propósito de las acciones Yacc Aprovechar el reconocimiento sintáctico para ejecutar sentencias que están asociadas con las reglas de producción. Por ejemplo, construir un árbol de derivación, evaluar una expresión aritmética, etc. En general, para el propósito del curso las acciones estarán asociadas a las siguientes fases de un compilador. 30/10/2020 Acciones Yacc 5
Gramática de Ejemplo 30/10/2020 expresiones : : = expresión ; | expresiones expresión ; expresion : : = expresión + expresión | expresión - expresión | expresión * expresión | expresión / expresión | - expresión | ( expresión ) | NUM Acciones Yacc 6
Árbol de derivación 3+5*8; expresiones expresión ; expresión + expresión núm expresión * núm 30/10/2020 expresión Acciones Yacc 7
Árbol de derivación (12*3)/4; expresiones expresión ( expresión * núm 30/10/2020 / ; expresión ) núm expresión núm Acciones Yacc 8
Análisis Ascendente Como el Yacc realiza análisis ascendente, los árboles de derivación se construyen desde las hojas hacia la raíz. Esto permite al analizador propagar los valores desde las hojas hacia los niveles superiores del árbol. 30/10/2020 Acciones Yacc 9
Propagación de valores 3+5*8; expresiones expresión 43 expresión ; expresión + 40 3 núm expresión * expresión 8 5 núm 30/10/2020 Acciones Yacc 10
¿Cómo se propagan? Evidentemente, la forma de propagar valores implica realizar más acciones que el simple reconocimiento de los símbolos de la gramática y la declaración de las reglas gramaticales. Estas acciones se deben asociar con las reglas correspondientes para producir el efecto deseado. 30/10/2020 Acciones Yacc 11
Para llevar a cabo la propagación es necesario entender como trabaja el reconocimiento y además utilizar más elementos del Lenguaje Yacc que los vistos hasta ahora. 30/10/2020 Acciones Yacc 12
Acciones en Yacc expresiones : expresion '; ' { printf("%dn", $1); } | expresiones expresion '; ' { printf("%dn", $2); } ; 30/10/2020 Acciones Yacc 13
Uso del $ El símbolo $ se utilizará para reconocer la posición de los elementos del stack paralelo que utiliza el yacc. expresion : expresion '+' expresion { $$ = $1 + $3; } 30/10/2020 Acciones Yacc 14
Regreso de yylex() Debe RECORDARSE que el valor devuelto por yylex() es un ENTERO que representa el valor de identificación del Símbolo del Lenguaje. Por lo tanto, cuando se regresa el símbolo NUM, NO SE ESTÁ regresando el lexema reconocido, sino la categoría. 30/10/2020 Acciones Yacc 15
Traspaso de valores El lex se debe ADAPTAR para traspasar valores a yacc. #define Devuelve( TOKEN ) yylval. valor = atoi(yytext); return (TOKEN) 30/10/2020 Acciones Yacc 16
La regla correspondiente a NUM se encarga de almacenar el lexema reconocido: {digito}+ 30/10/2020 {Devuelve(NUM); Acciones Yacc } 17
Traspaso de valores El yacc debe DEFINIR una estructura capaz de almacenar el tipo recibido. %union { int valor; } 30/10/2020 Acciones Yacc 18
Traspaso de valores El yacc debe DECLARAR cuáles símbolos Terminales y No Terminales son del tipo definido. %token <valor> NUM %type <valor> expresion 30/10/2020 Acciones Yacc 19
En general los Símbolos Terminales y No Terminales pueden ser de distintos tipos. La union debe considerarlos todos y declarar cada uno como corresponde. Al igual que C los tipos definidos pueden ser tan complejos como el usuario lo requiera. 30/10/2020 Acciones Yacc 20
- Slides: 20