JAVA A TOPE: TRADUCTORES Y COMPILADORES CON LEX/YACC, JFLEX/CUP Y JAVACC. EDICIÓN ELECTRÓNICA AUTORES:S ERGIO GÁLVEZ ROJAS MIGUEL ÁNGEL MORA MATA ILUSTRACIÓN PDF

Title JAVA A TOPE: TRADUCTORES Y COMPILADORES CON LEX/YACC, JFLEX/CUP Y JAVACC. EDICIÓN ELECTRÓNICA AUTORES:S ERGIO GÁLVEZ ROJAS MIGUEL ÁNGEL MORA MATA ILUSTRACIÓN
Author Daniel Borja
Pages 320
File Size 20.2 MB
File Type PDF
Total Downloads 59
Total Views 783

Summary

JAVA A TOPE : TRADUCTORES Y COMPILADORES CON LEX/YACC , JFLEX /CUP Y JAVACC. EDICIÓN ELECTRÓNICA A UTOR ES : S ER GIO G ÁLVEZ R O JA S M IGU EL Á NG EL M O RA M ATA I LU STR AC IÓ N D E PO RTA D A : J OSÉ M IGU EL G ÁLVEZ R O JA S Sun, el logotipo de Sun, Sun M icrosystems y Java son marcas o marca...


Description

Accelerat ing t he world's research.

JAVA A TOPE: TRADUCTORES Y COMPILADORES CON LEX/YACC, JFLEX/CUP Y JAVACC. EDICIÓN ELECTRÓNICA AUTORES:S ERGIO GÁ... daniel borja

Related papers Compiladores Luis Aguilar Compiladores Luis Aguilar Java a t ope Ray Uscanga

Download a PDF Pack of t he best relat ed papers 

JAVA A TOPE : TRADUCTORES Y COMPILADORES CON LEX/YACC , JFLEX /CUP Y JAVACC. EDICIÓN ELECTRÓNICA A UTOR ES : I LU STR AC IÓ N D E PO RTA D A :

S ER GIO G ÁLVEZ R O JA S M IGU EL Á NG EL M O RA M ATA J OSÉ M IGU EL G ÁLVEZ R O JA S

Sun, el logotipo de Sun, Sun M icrosystems y Java son marcas o marcas registradas de Sun M icrosystems Inc. en los EE.U U . y otros países. El personaje de «Duke» es una marca de Sun M icrosystems Inc. PC Lex y PC Y acc son productos de A braxas Softw are Inc. JFlex está liberado con licencia GPL. Cup está protegido por las licencias de código abierto, siendo compatible con la licencia GPL. JavaC C está sujeto a la licencia BSD (B erkeley Software Distribution) de código abierto.

© 2005 por Sergio Gálvez Rojas D EPÓ SITO L EG A L : MA-185-2005 ISBN: 84-689-1037-6

Java a tope:

Compiladores Traductores y Compiladores con Lex/Yacc, JFlex/cup y JavaCC

Sergio Gálvez Rojas Doctor Ingeniero en Informática

Miguel Ángel Mora Mata Ingeniero en Informática

Dpto. de Lenguajes y Ciencias de la Computación E.T.S. de Ingeniería Informática Universidad de Málaga

Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC

Índice

Prólogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Capítulo 1

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1 Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Concepto de traductor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.1 Tipos de traductores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.1.1 Traductores del idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1.2 Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1.3 Intérpretes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1.4 Preprocesadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1.5 Intérpretes de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1.6 Ensambladores y macroensambladores . . . . . . . . . . . . . . . . . 5 1.2.1.7 Conversores fuente-fuente . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.1.8 Compilador cruzado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2 Conceptos básicos relacionados con la traducción . . . . . . . . . . . 6 1.2.2.1 Compilación, enlace y carga. . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2.2 Pasadas de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.2.3 Compilación incremental . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.2.4 Autocompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.2.5 Metacompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.2.6 Descompilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3 Estructura de un traductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3.1 Construcción sistemática de compiladores . . . . . . . . . . . . . . . . 12 1.3.2 La tabla de símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4 Ejemplo de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4.1 Preprocesamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.2 Etapa de análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.2.1 Fase de análisis lexicográfico . . . . . . . . . . . . . . . . . . . . . . . 17 1.4.2.2 Fase de análisis sintáctico . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.4.2.2.1 Compilación dirigida por sintaxis . . . . . . . . . . . . . 18 1.4.2.3 Fase de análisis semántico . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.3 Etapa de síntesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.3.1 Fase de generación de código intermedio . . . . . . . . . . . . . . 19 1.4.3.2 Fase de optimización de código . . . . . . . . . . . . . . . . . . . . . 20 1.4.3.3 Fase de generación de código máquina . . . . . . . . . . . . . . . 20

i

Índice

Capítulo 2

Análisis lexicográfico . . . . . . . . . . . . . . . . . . . . . . . 23

2.1 Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Concepto de analizador léxico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Funciones del analizador léxico . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Necesidad del analizador léxico . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2.1 Simplificación del diseño . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2.2 Eficiencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2.3 Portabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2.4 Patrones complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Token, patrón y lexema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Aproximaciones para construir un analizador lexicográfico . . . 2.4 El generador de analizadores lexicográficos: PCLex . . . . . . . . . . . . . . . . 2.4.1 Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Creación de un analizador léxico . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 El lenguaje Lex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3.1 Premisas de Lex para reconocer lexemas . . . . . . . . . . . . . . 2.4.3.2 Caracteres especiales de Lex . . . . . . . . . . . . . . . . . . . . . . . 2.4.3.3 Caracteres de sensibilidad al contexto . . . . . . . . . . . . . . . . 2.4.3.4 Estado léxicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.3.5 Área de definiciones y área de funciones . . . . . . . . . . . . . . 2.4.3.6 Funciones y variables suministradas por PCLex . . . . . . . . 2.5 El generador de analizadores lexicográficos JFlex . . . . . . . . . . . . . . . . . 2.5.1 Ejemplo preliminar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Área de opciones y declaraciones . . . . . . . . . . . . . . . . . . . . . . . 2.5.2.1 Opciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2.1.1 Opciones de clase . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2.1.2 Opciones de la función de análisis . . . . . . . . . . . . 2.5.2.1.3 Opciones de fin de fichero . . . . . . . . . . . . . . . . . . 2.5.2.1.4 Opciones de juego de caracteres . . . . . . . . . . . . . . 2.5.2.1.5 Opciones de contadores . . . . . . . . . . . . . . . . . . . . 2.5.2.2 Declaraciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2.2.1 Declaraciones de estados léxicos. . . . . . . . . . . . . . 2.5.2.2.2 Declaraciones de reglas. . . . . . . . . . . . . . . . . . . . . 2.5.3 Área de reglas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.4 Funciones y variables de la clase Yylex . . . . . . . . . . . . . . . . . .

Capítulo 3

23 23 24 25 25 27 27 28 28 30 31 31 32 33 34 34 35 36 37 38 42 42 44 44 44 44 45 45 46 46 46 46 46 47

Análisis sintáctico . . . . . . . . . . . . . . . . . . . . . . . . . . 49

3.1 Visión general . . . . . . . . . . . . . . . . . . . . . . . 3.2 Concepto de analizador sintáctico . . . . . . . . 3.3 Manejo de errores sintácticos . . . . . . . . . . . . 3.3.1 Ignorar el problema . . . . . . . . . . . . 3.3.2 Recuperación a nivel de frase . . . . 3.3.3 Reglas de producción adicionales . ii

.... .... .... .... .... ....

.... .... .... .... .... ....

.... .... .... .... .... ....

. . . . . .

... ... ... ... ... ...

.... .... .... .... .... ....

. . . . . .

. . . . . .

49 49 50 51 52 52

Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC 3.3.4 Corrección Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.4 Gramática utilizada por un analizador sintáctico . . . . . . . . . . . . . . . . . . . 52 3.4.1 Derivaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.4.2 Árbol sintáctico de una sentencia de un lenguaje . . . . . . . . . . . 54 3.5 Tipos de análisis sintáctico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.5.1 Análisis descendente con retroceso . . . . . . . . . . . . . . . . . . . . . . 57 3.5.2 Análisis descendente con funciones recursivas . . . . . . . . . . . . . 60 3.5.2.1 Diagramas de sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.5.2.2 Potencia de los diagramas de sintaxis . . . . . . . . . . . . . . . . . 61 3.5.2.3 Correspondencia con flujos de ejecución . . . . . . . . . . . . . . 62 3.5.2.4 Ejemplo completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5.2.5 Conclusiones sobre el análisis descendente con funciones recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.5.3 Análisis descendente de gramáticas LL(1) . . . . . . . . . . . . . . . . 67 3.5.4 Generalidades del análisis ascendente . . . . . . . . . . . . . . . . . . . . 70 3.5.4.1 Operaciones en un analizador ascendente . . . . . . . . . . . . . . 71 3.5.5 Análisis ascendente con retroceso . . . . . . . . . . . . . . . . . . . . . . . 72 3.5.6 Análisis ascendente de gramáticas LR(1) . . . . . . . . . . . . . . . . . 74 3.5.6.1 Consideraciones sobre el análisis LR(1) . . . . . . . . . . . . . . . 79 3.5.6.1.1 Recursión a derecha o a izquierda . . . . . . . . . . . . 79 3.5.6.1.2 Conflictos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.5.6.2 Conclusiones sobre el análisis LR(1) . . . . . . . . . . . . . . . . . 81

Capítulo 4

Gramáticas atribuidas . . . . . . . . . . . . . . . . . . . . . . 83

4.1 Análisis semántico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.1.1 Atributos y acciones semánticas . . . . . . . . . . . . . . . . . . . . . . . . 83 4.1.2 Ejecución de una acción semántica . . . . . . . . . . . . . . . . . . . . . . 86 4.2 Traducción dirigida por sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.2.1 Definición dirigida por sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.2.2 Esquema formal de una definición dirigida por sintaxis . . . . . . 89 4.2.2.1 Atributos sintetizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.2.2.2 Atributos heredados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.2.2.3 Grafo de dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.2.2.4 Orden de evaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.2.2.5 Gramática L-atribuida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2.2.6 Gramática S-atribuida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.2.3 Esquemas de traducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.2.4 Análisis LALR con atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.4.1 Conflictos reducir/reducir . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.2.4.2 Conflictos desplazar/reducir . . . . . . . . . . . . . . . . . . . . . . . 100 4.3 El generador de analizadores sintácticos PCYacc . . . . . . . . . . . . . . . . . 102 4.3.1 Formato de un programa Yacc . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.3.1.1 Área de definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

iii

Índice 4.3.1.2 Creación del analizador léxico . . . . . . . . . . . . . . . . . . . . . 4.3.1.3 Área de reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1.4 Área de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Gestión de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2.1 Acciones intermedias . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.3 Ambigüedad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.4 Tratamiento de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.5 Ejemplo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 El generador de analizadores sintácticos Cup . . . . . . . . . . . . . . . . . . . . 4.4.1 Diferencias principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2 Sintaxis completa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2.1 Especificación del paquete e importaciones. . . . . . . . . . . 4.4.2.2 Código de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2.3 Listas de símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.2.4 Asociatividad y precedencia. . . . . . . . . . . . . . . . . . . . . . . 4.4.2.5 Gramática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Ejecución de Cup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.4 Comunicación con JFlex . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Capítulo 5

103 105 106 106 110 110 113 116 117 117 120 120 120 121 121 122 123 124

JavaCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

5.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Características generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Ejemplo preliminar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Estructura de un programa en JavaCC . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Opciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Área de tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2.1 Caracteres especiales para patrones JavaCC . . . . . . . . . . . 5.2.2.2 Elementos accesibles en una acción léxica . . . . . . . . . . . . 5.2.2.3 La clase Token y el token manager . . . . . . . . . . . . . . . . . 5.2.3 Área de funciones BNF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Gestión de atributos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Gestión de errores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Versiones antiguas de JavaCC . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 Versiones modernas de JavaCC . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Ejemplo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 La utilidad JJTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Características . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.2 Ejemplo Práctico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.2.1 Renombrado de nodos mediante # . . . . . . . . . . . . . . . . . . 5.6.2.2 Construcción del Árbol . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.2.3 Tipos de Nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.3 Ámbitos de Nodos y Acciones de Usuario . . . . . . . . . . . . . . . 5.6.4 Manejo de Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iv

127 127 128 130 132 134 135 137 139 140 144 146 146 147 148 150 150 150 154 155 156 158 160

Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC 5.6.5 Node Scope Hooks . . . . . . . . . . 5.6.6 El ciclo de vida de un nodo . . . 5.6.7 Visitor Support . . . . . . . . . . . . . 5.6.7.1 Parámetros de Ejecución . . 5.6.8 Estados en JTree . . . . . . . . . . . 5.6.8.1 Objetos Node . . . . . . . . . . 5.6.8.2 Pasos de Ejecución . . . . . . 5.6.9 Manual de Referencia de JJDoc

Capítulo 6 6.1 6.2 6.3 6.4

........................ ........................ ........................ ........................ ........................ ........................ ........................ ........................

Tabla de símbolos . . . . . . . . . . . . . . . . . . . . . . . . . 171

Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . Información sobre los identificadores de usuario . Consideraciones sobre la tabla de símbolos . . . . . Ejemplo: una calculadora con variables . . . . . . . . 6.4.1 Interfaz de la tabla de símbolos . . . . . . . 6.4.2 Solución con Lex/Yacc . . . . . . . . . . . . . 6.4.3 Solución con JFlex/Cup . . . . . . . . . . . . . 6.4.4 Solución con JavaCC . . . . . . . . . . . . . . .

Capítulo 7

160 163 164 164 165 165 166 167

.... .... .... .... .... .... .... ....

.... .... .... .... .... .... .... ....

. . . . . . . .

... ... ... ... ... ... ... ...

.... .... .... .... .... .... .... ....

. . . . . . . .

171 171 173 175 176 176 179 182

Gestión de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . 187

7.1 Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Compatibilidad nominal, estructural y funcional . . . . . . . . . . . . . . . . . . 7.3 Gestión de tipos primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Gramática de partida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.2 Pasos de construcción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.2.1 Propuesta de un ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.2.2 Definición de la tabla de símbolos . . . . . . . . . . . . . . . . . . 7.3.2.3 Asignación de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.2.3.1 Atributos de terminales . . . . . . . . . . . . . . . . . . . . 7.3.2.3.2 Atributos de no terminales . . . . . . . . . . . . . . . . . 7.3.2.4 Acciones semánticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.3 Solución con Lex/Yacc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.4 Solución con JFlex/Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.5 Solución con JavaCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Gestión de tipos complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Objetivos y propuesta de un ejemplo . . . . . . . . . . . . . . . . . . . . 7.4.2 Pasos de construcción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.2.1 Gramática de partida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.2.2 Gestión de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.2.3 Implementación de una pila de tipos . . . . . . . . . . . . . . . . . 7.4.2.4 Acciones semánticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.3 Solución con Lex/Yacc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.4 Solución con JFlex/Cup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v

187 188 190 190 192 192 193 193 194 195 196 198 203 207 210 211 212 212 214 215 217 220 224

Índice 7.4.5

Capítul...


Similar Free PDFs