teoría de lenguajes y compiladores generalidades. tabla de símbolos semana 7 unidad ii analizador...

35
Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Upload: rosario-aguirre-vazquez

Post on 03-Feb-2016

245 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Teoría de lenguajes y compiladores

Generalidades. Tabla de símbolos

Semana 7

Unidad II

Analizador Sintáctico

Page 2: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Objetivo General

El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

Page 3: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Objetivos Específicos

Diseñar un analizador sintáctico.

Page 4: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Objetivos Instruccionales

Implementar una tabla de símbolos para asociarla a un compilador en cada una de sus fases.

Page 5: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico
Page 6: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

La tabla de símbolos es una estructura de datos que se utiliza para almacenar información (atributos) asociados a símbolos declarados en el programa.G

en

era

lida

de

s

Definición

Page 7: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

La tabla de símbolos también es conocido como tabla de nombres o tabla de identificadores y tienen dos funciones principales:

• Efectuar chequeos semánticos• Generación de código

Permanece sólo en tiempo de compilación, no de ejecución, excepto en aquellos casos en que se compila con opciones de depuración

Ge

ne

ralid

ad

es

Page 8: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

La tabla almacena la información que en cada momento se necesita sobre las variables del programa, información tal como: nombre, tipo, dirección de localización, tamaño, etc.

La gestión de la tabla de símbolos es muy importante, ya que consume gran parte del tiempo de compilación. De ahí que su eficiencia sea crítica.

Aunque también sirve para guardar información referente a los tipos creados por el usuario, tipos enumerados y, en general, a cualquier identificador creado por el usuario, nos vamos a centrar principalmente en las variables de usuario.

Ge

ne

ralid

ad

es

Page 9: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Variables: tipo, lugar en la memoria, ¿valor?, ¿referencias?

Procedimientos y funciones: dirección, parámetros, tipo de resultado

Parámetros: tipo de variable, clase de variable

Etiquetas: lugar en el programa

Ge

ne

ralid

ad

es

Símbolos definidos por el programador

Page 10: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Respecto a cada una de ellas podemos guardar:

Almacenamiento del nombre.- Se puede hacer con o sin límite. Si lo hacemos con límite, emplearemos una longitud fija para cada variable, lo cual aumenta la velocidad de creación, pero limita la longitud en unos casos, y desperdicia espacio en la mayoría. Otro método es habilitar la memoria que necesitemos en cada caso para guardar el nombre.

El tipo.- también se almacena en la tabla, como veremos en un apartado dedicado a ello.

Ge

ne

ralid

ad

es

Page 11: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Respecto a cada una de ellas podemos guardar:

Dirección de memoria en que se guardará.- Esta dirección es necesaria, porque las instrucciones que referencian a una variable deben saber donde encontrar el valor de esa variable en tiempo de ejecución, también cuando se trata de variables globales. En lenguajes que no permiten recursividad, las direcciones se van asignando secuencialmente a medida que se hacen las declaraciones. En lenguajes con estructuras de bloques, la dirección se da con respecto al comienzo del bloque de datos de ese bloque, (función o procedimiento) en concreto.

Ge

ne

ralid

ad

es

Page 12: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Respecto a cada una de ellas podemos guardar:

Número de dimensiones.- El número de dimensiones de una variable array, o el de parámetros de una función o procedimiento junto con el tipo de cada uno de ellos es útil para el chequeo semántico. Aunque esta información puede extraerse de la estructura de tipos, para un control más eficiente, se puede indicar explícitamente.G

en

era

lida

de

s

Page 13: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Consideraciones sobre la tabla de símbolos

Conforme van apareciendo nuevas declaraciones de identificadores, el analizador léxico, o el analizador sintáctico según la estrategia que sigamos, insertar á nuevas entradas en la tabla de símbolos, evitando siempre la existencia de entradas repetidas.El analizador semántico efectúa las comprobaciones sensibles al contexto gracias a la tabla de símbolos, y el generador de código intermedio usa las direcciones de memoria asociadas a cada identificador en la tabla de símbolos, al igual que el generador de código.

Ge

ne

ralid

ad

es

Page 14: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Consideraciones sobre la tabla de símbolos

En la implementación de la tabla de símbolos nos creamos un TAD lista. (Se utilizara una lista por simplicidad. Lo mejor es usar otra

estructura más eficiente. Por ejemplo un árbol AVL).

La tabla de símbolos consta de una estructura llamada símbolo. G

en

era

lida

de

s

Page 15: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Consideraciones sobre la tabla de símbolos

Las operaciones que puede realizar son:

-crear: Crea una tabla vacía.-insertar: Parte de una tabla de símbolo y de un nodo, lo que hace es añadir ese nodo a la cabeza de la tabla.-buscar: Busca el nodo que contiene el nombre que le paso por parámetro.-imprimir: Devuelve una lista con los valores que tiene los identificadores de usuario, es decir recorre la tabla de símbolos. Este procedimiento no es necesario pero se añade por claridad, y a efectos de resumen y depuración.

Ge

ne

ralid

ad

es

Page 16: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

•Es utilizada por el compilador para asociar a cada símbolo del programa fuente (identificadores, constantes, ... , etc) un contenido semántico. Esta formada por registros que en general tienen una longitud fija.

•Los campos asociados al registros pueden contener la información misma para lo que están destinados, o bien un puntero a posiciones de memoria en las que se guarda esta información.

Page 17: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

A. Nombre del símbolo

En la tabla de símbolos deben aparecer todos los lexemas correspondientes a los símbolos usados en el texto fuente. Los símbolos serán todos aquellos trozos de código que representen identificadores, constantes numéricas o cualquier otro elemento que el lenguaje sea capaz de manejar.

Para el almacenamiento en la TS de los lexemas pueden utilizarse las técnicas:

A.1 Interna: El campo de la tabla de símbolos se define como de tipo cadena de caracteres de dimensión fija. El inconveniente esta en que la longitud de los identificadores esta restringida al valor fijado.

A.2 externa: El campo de la tabla de símbolos contiene un puntero a una zona de memoria en la que se almacena el lexema.

ESTRUCTURA

Page 18: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

A. Nombre del símbolo. INTERNA

Definiendo el campo nombre como un índice en un vector de nombres.

ESTRUCTURA

Page 19: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

A. Nombre del símbolo. EXTERNA

Definiendo el campo nombre como un puntero a carácter.

ESTRUCTURA

Page 20: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

B.  Dirección de memoria

•En este campo se almacenan las direcciones de memoria en las que se guardaran los valores de las variables correspondientes a cada símbolo, durante la ejecución del programa.

•Es importante recordar que la tabla de símbolos no contiene los valores de las variables, sino simplemente las dirección en la que se almacenaran cuando el programa se ejecute.

ESTRUCTURA

Page 21: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

C.  Tipos

En este campo se almacenara el código correspondiente al tipo de datos representado por el símbolo, o bien un puntero a la estructura de datos correspondiente.

ESTRUCTURA

Page 22: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

D.  Numero de la línea de la declaración en la que se usa el símbolo

• Esta es una información auxiliar, que será de utilidad para producir un listado de referencias cruzadas que ayuden a la depuración de los programas.

• Puede utilizarse una lista encadenada de números de línea, siendo la cabeza de esta la línea en donde aparece la declaración del símbolo.

ESTRUCTURA

Page 23: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

FUNCIONAMIENTO

INIC

IALIZ

AC

ION

Análisisléxico

Análisissintáctico

Análisis Semántico

Generadordecódigo

TABLA DE SIMBOLOS

 

Page 24: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

FUNCIONAMIENTO

 

a. La TS puede inicializarse con cierta información sobre símbolos especiales en el lenguaje, como son las palabras reservadas, funciones de librerías, constantes predefinidas, etc.

 b. El analizador lexicográfico va leyendo el texto

fuente y construyendo lexemas, creando nuevas entradas en la TS conforme va encontrando nuevos símbolos, para lo cual a de comprobar que el símbolo no figure en la TS.

 c. El analizador sintáctico trabaja solamente con la

estructura formal y a nivel de tokens ya formados en la fase anterior. 

Page 25: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

 

d. El analizador sintáctico sirve de soporte o armazón de un conjunto de rutinas del análisis semántico. Parte de estas rutinas puede completar la información de la TS sobre el tipo de un determinado lexema.

 e. El generador de código usa la información de la

TS para referenciar el código a las posiciones adecuadas de memoria.

FUNCIONAMIENTO

Page 26: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

OPERACIONES

 

La TS funciona como una estructura de base de datos en la que el campo clave es el lexema correspondiente al símbolo.

 En general, puede hacerse las siguientes operaciones:

 a.  Insertar un nuevo registro y comprobar que no existe otro con el mismo nombre.b. Buscar y localizar el contenido de la TS asociado a un determinado lexemac.  Modificar la información contenida en un registro.

d. Recuperar información de un símbolo. 

En lenguaje con estructura de bloque se incluyen dos operaciones más:

  e.   Nuevo bloque : Inicio de un nuevo bloquef.   Fin_bloque : Terminación del ámbito de un bloque.

 Las inserciones se realizan cuando se procesa la zona de declaración de variables.

Page 27: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

 

Program ejemplo;Var uno : integer;

Procedure dos

Var tres, cuatro : integer;

Procedure cinco

Var uno, dos:real; (a) Begin … End

Procedure seis

Var uno, tres:real; (b) Begin … End

Begin …End

1

2

3

4

Las técnicas para el manejo de TS en lenguajes con estructura de bloques suelen emplear una pila auxiliar de índices de bloque cuyos elementos son punteros a las tablas de símbolos y sirven para marcar el comienzo o el final de los símbolos correspondientes a un bloque.

ORGANIZACIÓN

Page 28: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

EJEMPLO

program evar a, b, c : char; procedure f; var a, b, c: char; … procedure g; var a, b : char; procedure h; var c, d : char; … procedure i; var b, c: char; … … procedure j; var b, d:char; ……

e():a, b, cf, g, j

f():a, b, c

g():a, bh, i

j():b, d

h():c, d

i():b, c

Page 29: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

ESTRUCTURAS DE DATOS

 

Lista no ordenada:•Búsqueda e inserción no eficaces•Solo es valida cuando va a haber pocos símbolos

Lista ordenada:•Búsqueda mas rápida si se implementa por una matriz•Inserción sigue siendo lenta

Árbol binario:•Búsqueda e inserción rápidas (si se mantienen balanceados)•Eficientes en términos de espacio

Tablas hash:•Las mas utilizadas por su eficiencia•La función hash debe mantener los nombres uniformemente distribuidos

Page 30: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

ESTRUCTURAS DE DATOS

 

Lista no ordenada

Page 31: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

ESTRUCTURAS DE DATOS

 

Árbol binario

Page 32: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

(bosque de árboles)En este caso la TS esta formada por múltiples

arboles, uno por cada bloque. Se usa una estructura de datos auxiliar (pila) que sirve de

índice de bloque.

uno … tres … uno …

dos … cuatro … dos …

cinco …

Índice de bloque

1 2 3

(a)

ESTRUCTURAS DE DATOS

Page 33: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Las operaciones sobre esta son:

a. Insertar: Al existir tablas independientes para cada bloque, la operación inserción se realiza normalmente atendiendo al bloque activo.

b. Buscar: La búsqueda es algo mas compleja. Para localizar un lexema se busca primero en la tabla de bloque activo, luego en la tabla a la que apunta el índice del bloque anterior y así sucesivamente hasta localizarlo o hasta que se hayan rastreado todos los árboles.

c. Nuevo_bloque: Se crea un nuevo elemento en la pila de índice de bloque y una nueva estructura de tipo árbol inicialmente vacía.

d. Fin_bloque: Se destruye toda la estructura arborescente asociada al bloque que se termina y se elimina el puntero de la pila de índice de bloques.

(bosque de árboles)ESTRUCTURAS DE DATOS

Page 34: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

ESTRUCTURAS DE DATOS

 

Tablas hash

Dos cadenas diferentes pueden estar asociadas al

mismo índice (COLISION).

La función de dispersión h: asocia una cadena de caracteres con un código de dispersión = índice de la tabla.

Page 35: Teoría de lenguajes y compiladores Generalidades. Tabla de símbolos Semana 7 Unidad II Analizador Sintáctico

Teoría de lenguajes y compiladores

Generalidades. Tabla de símbolos

Semana 7

Unidad II

Analizador Sintáctico