P. 1
administradordetabladesmbolos-090329213533-phpapp02

administradordetabladesmbolos-090329213533-phpapp02

|Views: 973|Likes:
Publicado porjherrera28

More info:

Published by: jherrera28 on Oct 28, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPSX, PDF, TXT or read online from Scribd
See more
See less

04/19/2013

pdf

text

original

Sections

  • Agenda
  • Introducción
  • Compiladores de Varias Pasadas
  • Compiladores de Una Pasada
  • Nombre del Identificador
  • Atributos de los Identificadores
  • Otros Atributos
  • Operaciones con la Tabla de Símbolos
  • Organización de la Tabla de Símbolos
  • Organización de Tablas Hash
  • Manejo de Colisiones
  • Direccionamiento Vacío o Hash Cerrado
  • Inspección Aleatoria
  • Encadenamiento Directo o Hash Abierto
  • Tabla de símbolos con estructuras de árbol implementadas en Pilas
  • Tabla de Símbolos con Estructura Hash Implementadas en Pilas
  • Representación OO de Símbolos y Tipos en Compiladores de Una Pasada
  • La Jerarquía de Símbolos
  • La Jerarquía de Tipos
  • Funcionamiento y Acceso a la TS
  • Modelos de Descripción sobre el AST
  • Tipos de Usuario
  • Declaraciones Forward

Administrador de Tabla de Símbolos Teoría de Compiladores

Agenda
Introducción Contenidos de la Tabla de Símbolos Operaciones con la Tabla de Símbolos Organización de la Tabla de Símbolos Lenguajes no estructurados en bloques Lenguajes estructurados en bloques Tablas de símbolos orientadas a objetos

Introducción y Contenidos

mediante una GLC. . deberá verificar que el identificador empleado como parte de Las Tablas de Símbolos son estructuras de datos que almacenan toda la una expresión haya sido declarado información de los identificadores del lenguaje fuente. Sem. el A. Sintac. previamente. se limita a comprobar. es típica la utilización de una estructura de datos adicional denominada tabla de símbolos. que un identificador forma parte de una expresión. Para llevar a cabo esta tarea. Una vez comprobado que la sentencia es sintácticamente correcta.Introducción El A.

una vez creado éste mediante al analizador sintáctico (pasada 2).Compiladores de Varias Pasadas En un compilador de varias pasadas. En los compiladores modernos la TS se crea durante el primer recorrido del árbol AST. Si el token comparado no es una palabra reservada se asume que es un identificador y durante el . la TS se crea durante el análisis léxico y sintáctico (pasada 1). El AL separa el programa fuente en tokens que compara con las palabras reservadas.

Figura 1 Compilador de Varias Pasadas Haga clic en el icono para agregar una imagen .

Figura 2 Tabla de símbolos en un compilador de varias pasadas con generación de AST Haga clic en el icono para agregar una imagen .

se explora el texto fuente sentencia a sentencia (o bloques de sentencias) realizándose los tres análisis y la generación de código. semántico y la generación de código se realizan en una pasada. es decir. .Compiladores de Una Pasada Donde el análisis léxico. sintáctico.

.Compiladores de Una Pasada Esta estrategia tiene dos ventajas: Reduce la complejidad de la gramática para análisis sintáctico. Permite una mejor especificación de los errores sintácticos por el compilador gracias a la utilización de construcciones menos generales.

Este conjunto de atributos almacenados en la TS para un símbolo determinado se define como registro de la tabla de Identificador Dirección Tipo Dimensión Otros símbolos (symbol-table record). companya x3 forma1 b STATIC+0 C I B F 10 0 0 3 … … … … STATIC+10 STATIC+12 STATIC+13 .Contenidos de la T abla de Símbolos  Los símbolos se guardan en la tabla con su nombre y una serie de atributos opcionales que dependerán del lenguaje y de los objetivos del procesador.

Nombre de identificador. Dirección en tiempo de ejecución Tipo del identificador. Tipo y forma de acceso de cada uno de los miembros de las estructuras. Tamaño máximo o rango de cada una de las dimensiones de los arrays. . Número de dimensiones del array.Contenidos de la T abla de Símbolos La lista siguiente de atributos no es necesaria para todos los compiladores.

Nombre del Identificador El primer problema en la organización de la TS es la variación en la longitud de los nombres de los identificadores. .

REGISTROS. R E M P M D O T TIPO DE LOS PARÁMETROS DE LAS FUNCIONES. FUNCIONES LIBRES. UNIONES Y CLASES. DE O I O Ú MIEMBROS O DE PARÁMETROS Ó M N V VALOR MÁXIMO DE LAS E D A DIMENSIONES O RANGOS DE ARRAYS R E L O M T TIPO Y FORMA DE ACCESO DE LOS MIEMBROS DE O D E I ESTRUCTURAS. O Á I R I PROCEDIMIENTOS O MÉTODOS DE LAS CLASES Y X M I P F I E A D O DESCRIPTOR DE M N E D FICHEROS R O S S E M D I C L A E O R .Atributos de los Identificadores D DIRECCIÓN I DE MEMORIA R T ET I CI P CP N NÚMERO DE DIMENSIONES.

 Las listas de referencias cruzadas son otros tipos de atributos que proporcionan una ayuda Identificador Tipo Dimensión Declarada en importante cuando se está en fase de Referencias depuración. 14. 11. 25 b companhia forma1 m real int char proc 0 1 2 0 5 2 4 6 10. 25 36. 23 9. 23. por lo que las distintas implementaciones de los compiladores incorporan información adicional en la TS para estas herramientas que acompañan a los compiladores. 21 . 37. 13.Otros Atributos  Utilizan información de la TS en tiempo de ejecución. anho int 0 5 11. 38 17.

Operaciones y Organización .

Lenguajes con declaraciones implícitas de los identificadores.Operaciones con la T abla de Símbolos TS y Declaración explícita vs implícita. Operaciones con lenguajes estructurados en bloques Operaciones de activación y desactivación de tablas de símbolos . Lenguajes con declaraciones explícitas obligatorias.

Organización de la T abla de Símbolos Lenguajes no estructurados en bloques. Tabla de símbolos no ordenadas Búsqueda: La LMI requerida es: Inserción: La LMI requerida es: Tabla de símbolos ordenadas Búsqueda: La LMI requerida es: Inserción: La LMI requerida es: .

Se accede al árbol a través del nodo raíz (nodo más alto). 3 1 … 0 4 5 6 7 companhia m forma1 x3 2 6 3 1 1 0 2 0 … … … … 0 6 0 0 0 7 0 0 TS con Estructura en Árbol (AVL) . El proceso de Puntero búsqueda se realiza descendiendo Identificad Dimensió Otros Posición Tipo n atributos Izquierdo Derecho desde el or nodo raíz hasta el nodo 1 1 0 … 2 5 buscadofirst hasta un campo de tipo o 2 b 1 0 … 3 4 punteroanhio nulo. que se0 denota por 00.

TS con Estructura en Árbol (AVL) Se llama subárbol izquierdo de un nodo a la parte del árbol que contiene todos .

todo nodo situado en un subárbol En un árbol izquierdo precede alfabéticamente a la raíz del subárbol. Todo nodo situado en un subárbol derecho sigue alfabéticamente a la raíz del subárbol. se llega al árbol de la figura. Por ejemplo.TS con Estructura en Árbol (AVL) binario. Se observa que se inserta como una hoja del árbol a la derecha de la variable companhia. si se desea insertar un registro de la variable cuenta en el árbol del ejemplo anterior. .

anhio. m. b. forma1 y x3 o también: first. b. anhio. m. companhia. companhia. x3. forma1 y x3 Sin embargo si el orden de inserción es: forma1. y first . anhio. companhia. b. m.TS con Estructura en Árbol (AVL) Esta estructura se creó con los registros introducidos por el orden: first.

TS con Estructura en Árbol (AVL) es de inserción y se realiza bien. . En las operaciones de búsqueda. pues se pueden crear árboles no equilibrados. Si encuentra un registro con el mismo nombre. entonces se Si la operación devuelve la localización del nuevo nodo del árbol. está en el proceso de inserción. muchos programadores declaran variables por orden alfabético en programas muy largos para facilitar su comprensión y localización en la cabecera del programa. El problema principal de este algoritmo. Por ejemplo. una investigación con éxito devuelve la localización del registro con el nombre del campo que proporciona el argumento buscado. devuelve el correspondiente error.

TS con Estructura en Árbol (AVL) Es obvio que en el caso anterior la estructura del árbol binario ha n +1 L I = con una LMI de: M degenerado en una lista 2 .

Desafortunadamente. .TS con Estructura en Árbol (AVL) Esta situación es la que ocurre en los árboles binarios equilibrados óptimos. se produce en la inserción de registros en la estructura. En tales estructuras las distancias (longitud de las trayectorias) de la raíz a cualquiera de los nodos incompletos del árbol difiere como máximo en una unidad. el principal problema que se presenta en los árboles binarios equilibrados óptimos.

Árboles AVL Un árbol AVL es un árbol binario cuyos nodos están en uno de los estados siguientes: Un nodo es pasado a izquierda (leftheavy) si la longitud de sus trayectorias en el subárbol izquierdo tienen una unidad más que las del subárbol derecho. Un nodo está equilibrado si la longitud de sus trayectorias en los dos subárboles son iguales. Lo denotaremos . Lo denotaremos por L.

Árboles AVL Equilibrado Desequilibrado En cada nueva inserción. es posible que el árbol se desequilibre. si esto ocurre .

Árboles AVL Stone demostró que la longitud de camino máxima de un árbol AVL de n nodos es: 1. .5 × log₂(n + 1) Knuth hace el mismo cálculo con algunas suposiciones empíricas y obtiene la siguiente expresión: log₂(n + 1) + const Haga clic para modificar el estilo de texto del patrón Implementación de TS propuesta por Severance.

Tablas de Símbolos con Estructura de Tablas Hash .

. las cuales están formados por caracteres alfanuméricos y especiales que son muy adecuados para manejarse con operaciones aritméticas o lógicas.Es el conjunto K de los nombres de las variables que pueden aparecer en un programa.Conceptos Espacio de nombres (zona de nombres) También llamado espacio de identificación o espacio de claves .

Esta función H realiza los cálculos por medio de operaciones aritméticas o lógicas con el .Conceptos Función Hash (o transformación de claves). Es una aplicación H del conjunto K (de claves) en el conjunto A (de localizaciones de registros). La función hash H toma el nombre de una identificador y calcula la dirección de la Letra 0 1 … 9 A B … Z # + tabla en que se almacenan los atributos Código 1 2 … 10 11 12 … 36 37 38 39 de dicho identificador.

Organización de T ablas Hash MÉTODO DE LA DIVISIÓN Esta función tiene la propiedad de preservar la distribución uniforme de las claves en el espacio de direcciones. . Para un divisor m se define como: H(x) = (x mod m) + 1 Se recomienda que m sea un número primo. Debe evitarse que m sea una potencia de 2. pues en este caso la hipótesis de que todas las claves son igualmente probables es errónea.

Al proceso de generar direcciones alternativas se le llama manejo de colisiones o resolución de colisiones (collision resolution). MÉTODO HASH CUADRÁTICO Este método se basa en multiplicar la clave por sí misma y extraer varios dígitos centrales que constituyen la .Métodos Hash POSICIONES ALTERNATIVAS Cuando a varias direcciones diferentes se les asigna la misma dirección se dice que ha ocurrido una colisión.

sea la clave 18724965321. si se divide en grupos de tres dígitos. Los distintos grupos de dígitos se suman excepto el último. se tiene:  187 249 653 21 .Métodos Hash MÉTODO DE REDUCCIÓN Consiste en partir la clave en grupos de dígitos con el mismo número de dígitos excepto el último grupo que puede tener un número menor. pudiéndose dar la vuelta al orden de los dígitos. Por ejemplo.

se suman y luego se . Por ejemplo: sea la variable ID#1. se toma el código decimal del primero y último carácter. En otros casos se calcula una clave intermedia que puede usar.Métodos Hash MÉTODO DEPENDIENTE DE LA LONGITUD Utiliza la longitud del nombre de la variable en conjunto con alguna parte del nombre para determinar una dirección de la tabla directamente.

Cuándo ocurre esto se calcula una dirección alternativa para la segunda clave.Manejo de Colisiones Es el suceso que se produce cuando se asignan dos claves a la misma dirección. Las dos técnicas más utilizadas para el manejo de colisiones son: Direccionamiento vacío o hash cerrado Encadenamiento directo o hash abierto . llamándose a este proceso “manejo de colisiones”.

La forma de buscar otros lugares de la tabla puede hacerse por medio de . en el caso de búsqueda se termina la operación infructuosamente).Direccionamiento Vacío o Hash Cerrado Consiste en buscar en otros lugares de la tabla hasta que se encuentre la variable buscada (caso de operación de búsqueda) o se llegue a un lugar vacío (en el caso de operación de inserción significa que no existe y se puede insertar.

Inspección Lineal (Linear Probing) mirar el lugar siempre Consiste en el siguiente lugar de la tabla hasta encontrar la variable buscada o una posición vacía. La desventaja de que los elementos tienden a agruparse alrededor de las . Si se llega al lugar de partida sin encontrar la variable buscada entonces no está en la tabla. Cuando se llega al final de la tabla se pasa al primer lugar de la tabla y se continúa buscando. Si no se encuentra espacio para introducirla es que la tabla está llena.

Inspección Lineal (Linear Probing) la inspección lineal para Si se utiliza resolver las colisiones en una tabla con m = 11 se obtiene Nombre Atributos Inspecciones Identificador Dirección NODE STORAGE AN ADD FUNCTION B BRAND PARAMETER 1 2 3 3 9 9 9 9 A1 A2 A3 A4 NODE STORAGE AN ADD 1 1 1 2 8 A5 PARAMETER A6 A7 A8 A9 A10 FUNCTION B 1 2 .

Inspección Aleatoria Consiste en generar posiciones aleatorias en vez de las posiciones ordenadas que se generaban en la inspección lineal. La tabla se considera completa cuando se repite el número generado. R(y) = (y + c) mod n. para todo c y m PESI donde y es la dirección inicial generada . Nótese que la generación es cíclica. Se genera m posiciones aleatorias entre 1 y m.

se resuelven las colisiones utilizando una lista encadenada que une todos los identificadores que tienen colisión. A la tabla primaria también se le llama .Encadenamiento Directo o Hash Abierto Este método enlaza todos los identificadores que tienen el mismo índice primario H(k) en forma de lista. Es decir. La implementación de la lista puede ser en forma dinámica o por medio de otra tabla que se llama área de desbordamiento (overflow area).

Encadenamiento Directo o Hash Abierto Encadenamiento directo con tabla de desbordamiento Haga clic en el icono para agregar una imagen .

Encadenamiento Directo o Hash Abierto Encadenamiento directo con lista enlazada dinámicamente Haga clic en el icono para agregar una imagen .

Lenguajes Estructurados en Bloques .

Lenguajes Estructurados en Bloques Se entiende por lenguaje estructurado en bloques a todo lenguaje con estructura de bloques o módulos que a su vez puede contener submódulos anidados y de manera que cada submódulo pueda contener un conjunto de identificadores con ámbito local. Un identificador declarado dentro de un módulo A es accesible dentro del módulo a no ser que el mismo nombre del identificador se redefina dentro del .

.

J. M1.Lenguajes Estructurados en Bloques  La tabla siguiente muestra las variables activas en la tabla de símbolos. Y Set BLK3 M2. F. NAME. M1. M1. M2.IND . F. X. X. X. Y Set BLK4 J. M1. Operación Set BLK1 Set BLK2 M1. M2. X. NAME. M1. NAME. IND Contenidos de la Tabla de Símbolos (sólo nombre) Activas Inactivas TEST1. Y. en el instante anterior a la ejecución de las sentencias set y reset para el ejemplo anterior. así como las inactivas. F. Y TEST1. Y Reset BLK4 X. IND Reset BLK3 J. IND X. M2. IND X. Y Reset BLK2 X . NAME. X. M2. Reset BLK1 TEST1. Y J. IND. X. X. NAME. NAME. X. X. NAME. M1.

T abla de Símbolos en la Pila Tabla de símbolos en el momento de terminar la compilación del bloque 2 Haga clic en el icono para agregar una imagen .

T abla de Símbolos en la Pila (Continuación) Tabla de símbolos en el momento de terminar la compilación del bloque 4 Haga clic en el icono para agregar una imagen .

. La segunda. en ella cada bloque se organiza como una tabla estructurada en árbol y se elimina dicho árbol cuando se finaliza el bloque.T abla de símbolos con estructuras de árbol implementadas en Pilas Se pueden organizar de dos formas: La primera ya se estudió en el apartado TS con estructura en árbol (AVL) y la única diferencia está en el borrado o eliminación de los registros al finalizar cada bloque. Sacar el registro y cambiar los punteros de las ramas del árbol necesarias. Esto es un gran problema pues todos los registros están mezclados en un mismo árbol y los pasos necesarios para borrar un registro son: Localizar la posición del registro en la tabla. Reequilibrar el árbol. A continuación se muestran las figuras representativas de este tipo de organización para el ejemplo de programa de los apartados anteriores. se podría llamar bosque.

T abla de Símbolos con Estructuras de Árbol Implementadas en Pilas
Tabla de símbolos con estructura de árbol implementada en pila después de la compilación del bloque 2

Haga clic en el icono para agregar una imagen

T abla de Símbolos con Estructuras de Árbol Implementadas en Pilas (Continuación)
Tabla de símbolos con estructura de árbol implementada en pila después de la compilación del bloque 4

Haga clic en el icono para agregar una imagen

T abla de Símbolos con Estructura Hash Implementadas enimposible utilizar A primera vista parece Pilas
transformaciones de claves para lenguajes estructurados en bloques, pues las variables de un bloque deben de estar agrupadas y las funciones hash no preservan ningún orden. En este apartado se utilizarán funciones hash que usan la técnica de hash abierto para resolver los problemas de colisiones, por ser en general más ventajoso tal como se estudió

.T abla de Símbolos con Estructura Hash Nombre del Identificador Dirección Implementadas en Pilas1 X M1 NAME IND J TEST1 F Y M2 1 3 5 5 6 8 8 11 Se utiliza un array de punteros de tamaño 11 como se puede ver en la Figura siguiente.

T abla de Símbolos con Estructura Hash Implementadas en Pilas
Tabla de símbolos con estructura hash implementada en pila después de la compilación del bloque 2

Haga clic en el icono para agregar una imagen

T abla de Símbolos con Estructura Hash Implementadas en Pilas (Continuación)
Tabla de símbolos con estructura hash implementada en pila en el momento anterior a la terminación de la compilación del bloque 4

Haga clic en el icono para agregar una imagen

Esquema General de Pilas de T ablas Hash Abiertas
Un esquema general de pilas de tablas hash abiertas se muestra en la figura. Este tipo de esquema tiene una ocupación de memoria mayor, pero es más sencillo de implementar

Haga clic en el icono para agregar una imagen

Tablas de Símbolos OO en Compiladores de una Pasada .

Representación OO de Símbolos y Tipos en Compiladores de Una Pasada Hay dos lenguajes implicados que pueden ser orientados a objetos: El lenguaje a compilar El lenguaje de implementación del compilador .

etc. Así pues el esquema de la tabla de . atributos. campos de un registro.La Doble Jerarquía Símbolo-Tipo Símbolos. que son todos aquellos identificadores que representan variables locales. Tipos. entendidos aquí los tipos en un sentido amplio. que son todos los identificadores que representan tipos del lenguaje. esto es comprendiendo clases cuando se habla de lenguajes OO. parámetros de un método.

que es la que guarda la estructura de tipos definida en el programa fuente: las clases. los tipos básicos.La Doble Jerarquía Símbolo-Tipo Tabla de símbolos. que sirve para guardar una referencia a todos los símbolos que pueden ser accedidos desde el entorno actual. las interfaces. TablaSimbolos insert() search() set() reset() Tabla de tipos. insert() search() . TablaTipos etc.

La Jerarquía de Símbolos Describe todos los posibles símbolos que pueden aparecer en el código fuente. A partir de la tabla de símbolos se accede a estos símbolos. . El método de acceso puede ser representado como en este caso por una agregación. Cada símbolo tiene tipo y debe poderse acceder a dicho tipo a través del símbolo.

Jerarquía de Símbolos Diagrama de clases UML de la jerarquía de símbolos Haga clic en el icono para agregar una imagen TablaSimbolos insert() search() set() reset() nombre Simbolo nombre : String direccion : String getTipo() : Tipo getNombre() : String getDireccion() : String +tiene tipo Tipo VariableLocal Parametro Campo Propiedad Atributo .

Jerarquía de Símbolos Versión simplificada de la jerarquía de símbolos Haga clic en el icono para agregar una TablaSimbolos insert() imagen search() set() reset() nombre SimboloGenerico nombre : String direccion : String getTipo() : Tipo getNombre() : String getDireccion() : String +tiene tipo Tipo .

La Jerarquía de Tipos Tenemos una jerarquía de tipos donde pueden estar todos los tipos básicos del lenguaje y los tipos definidos por el usuario (con typedef.). métodos. etc. clases. etc. Va creando los nuevos tipos y metiéndolos en la tabla. . arrays. interfaces. En el momento en que el código comienza a describir clases.

Jerarquía de Tipos Jerarquía y tabla de tipos Haga clic en el icono para agregar una imagen TablaSim bolos nom bre TablaTipos insert() : void search() : Tipo nom bre Sim bolo + tiene tipo + atributo Tipo + cam po Constructor Arreglo + tipo Cla se n + extiende n Interfaz nom bre n + extiende n Funcion nom bre Registro nom bre Puntero + tipo nom bre nom bre + contiene + contiene + contiene + etodo m + etodo m + contiene + contiene + valor retorno Atributos acceso : Integer estatico : Boolean getAcceso() : Integer esEstatico() : Boolean .

Jerarquía de Tipos La clase contiene métodos y atributos Haga clic en +atributo Tipo para agregar una el icono imagen +contiene nombre Clase nombre +contiene n +extiende n +metodo Funcion +valor retorno posicion +contiene .

Haga clic en el icono para agregar una imagenAtributos +atributo Tipo acceso : Integer estatico : Boolean getAcceso() esEstatico() +contiene nombre Clase n +extiende n .Jerarquía de Tipos Relación cualificada y atribuida para determinar el componente de la clase y los atributos.

Haga clic en el icono para agregar una imagen Clase n +extiende n Interfaz +extiende n n .Jerarquía de Tipos La herencia se implementa mediante interfaces y clases de manera que las interfaces pueden heredar entre ellas y las clases pueden heredar de otras clases o implementar interfaces.

Haga clic en el icono para agregar una imagen .Esquema General de la T abla de Símbolos Esquema general de una tabla de símbolos con las dos jerarquías diferenciadas.

20: 21: public int procesa (int k) 22: { 23: int m. 4: public static void main (). 27: } 28: 29: public static void main () 30: { 31: TabSimb t = new TabSimb(). 5: } 6: 7: class TSdos 8: { 9: private static int r. 24: double d = k * m. 26: return d. 32: TSdos.En los siguientes párrafos se muestra el trozo de código que se desea compilar para ver 17: símbolos.m(ts.7). 10: 11: public static void m (TabSimb ts.procesa(g). int g) 12: { 13: ts. 33: } 34: } Funcionamiento y Acceso a la TS . 1: forward funciona su tabla depublic class TabSimb como class TabSimb 2: { 3: public int procesa (int k). 25: p = 2 * d. 14: } 15: } 16: 18: { 19: double p.

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Tabla de símbolos simplificada para el ejemplo Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Situación inicial de la tabla de símbolos Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Situación compilando en la línea 4 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Situación después de compilar la línea 9 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Situación de la Tabla de Símbolos después de compilada la línea 11 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Estado de la tabla de símbolos después de compilada la línea 15 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Estado de la tabla de símbolos después de compilar la línea 19 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Estado de la tabla de símbolos al compilar la línea 25 Haga clic en el icono para agregar una imagen .

Ejemplo de Funcionamiento y Acceso a la T abla de Símbolos Estado de la tabla de símbolos después de compilada la línea 31 Haga clic en el icono para agregar una imagen .

Tablas de Símbolos OO en Compiladores de Varias Pasadas .

float f.Modelos de Descripción sobre el AST Ejemplo int i. main() { int f. i = f. read f. .

Modelos de Descripción sobre el AST AST del código del ejemplo Haga clic en el icono para agregar una imagen .

Modelos de Descripción sobre el AST Insertar una declaración y referenciar un identificador Haga clic en el icono para agregar una imagen .

Modelos de Descripción sobre el AST Estructura AST-TS resultante una vez terminada la visita de identificación Haga clic en el icono para agregar una imagen .

Modelos de Descripción sobre el AST Árbol AST decorado resultante de la primera pasada del visitor .

String descrip. . int cantidad. 6: 7: main() { 8: int i.Tipos de Usuario 1: struct Concepto { 2: 3: 4: 5: }. float precio.

Tipos de Usuario Árbol AST generado por el analizador sintáctico para el ejemplo Haga clic en el icono para agregar una imagen .

Tipos de Usuario Inserción del tipo Struct Haga clic en el icono para agregar una imagen .

Tipos de Usuario Referencias de declaración y tipo en el árbol AST para el tipo Struct Haga clic en el icono para agregar una imagen .

Tipos de Usuario Declaración de arreglos Haga clic en el icono para agregar una imagen .

Declaraciones Forward Declaración de prototipos ● ● El segundo vuelve a recorrer el árbol introduciendo el resto de elementos. El Pasada previa para reconocer prototipos .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->