Professional Documents
Culture Documents
TEORIA DE LENGUAJES
MSc. ANA CORI MORN
CONTENIDO
Tabla de smbolos
Analizador Lxico, Sintctico y semntico
LIBRO COMPILADORES
El Compilador y la tabla de
smbolos
Una funcin esencial de un compilador es registrar los
identificadores de usuario (nombres de variables, de funciones, de
tipos, etc.) utilizados en el programa fuente y reunir informacin
sobre los distintos atributos de cada identificador. Estos atributos
pueden proporcionar informacin sobre la memoria asignada a un
identificador, la direccin de memoria en que se almacenar en
tiempo de ejecucin, su tipo, su mbito (la parte del programa donde
es visible).
Esta funcin de registrar y almacenar identificadores lo hace a
travs de una estructura de datos denominada tabla de smbolos.
Tabla de smbolos
La tabla de smbolos es una estructura de datos que posee
informacin sobre los identificadores definidos por el usuario, ya
sean constantes, variables, tipos u otros. Dado que puede contener
informacin de diversa ndole, debe hacerse de forma que su
estructura no sea uniforme, esto es, no se guarda la misma
informacin sobre una variable del programa que sobre un tipo
definido por el usuario.
Hace funciones de diccionario de datos y su estructura puede ser
una tabla hash, un rbol binario de bsqueda, etc., con tal de que las
operaciones de acceso sean lo bastante eficiente.
Tabla de smbolos
Tanto la etapa de anlisis(analizador lxico) como la de
sntesis(analizador sintctico) accede a esta estructura, por lo que
se halla muy acoplada al resto de fases del compilador. Por ello
conviene dotar a la tabla de smbolos de una interfaz lo
suficientemente genrica como para permitir el cambio de las
estructuras internas de almacenamiento sin que estas fases deban
ser modificadas.
Fases de un compilador
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Generacin de cdigo intermedio
Optimizacin de cdigo
Generacin de cdigo final
LEXICO,SINTACTICO,SEMANTICO
Ejemplo de compilacin
La sentencia con la que se va a trabajar es la siguiente:
#define PORCENTAJE 8
comision = fijo + valor * PORCENTAJE;
PREPROCESAMIENTO
En el ejemplo, la constante PORCENTAJE se sustituye por su valor,
dando lugar al texto:
comision = fijo + valor * 8;
que pasa a ser la fuente que entrar al compilador
ANALISIS LEXICO
Es la primera fase del compilador
ANALISIS LEXICO
ANALISIS LEXICO
Tokens es una secuencia de caracteres que tiene un significado que
pueden ser:
Identificadores, cadena de letras o nmeros que empiezan con una
letra.
Numeros, cadena no vacia de dgitos.
Palabras reservadas, if, else, begin, end.
Espacios en blanco, enter, espacios en blanco, tabulaciones
Operador, operador de suma, operador de resta, operador de
division.
Simbolo de asignacin, :=, =.
Fin de sentencia, ;
ANALISIS LEXICO
Lexema es una secuencia de caracteres
La cadena de caracteres representada por
un token se denomina en ocasiones su
valor de cadena o su lexema.
Algunos tokens tienen slo un lexema: las
palabras reservadas tienen esta propiedad.
Un token puede representar un nmero
infinito de lexemas.
Los identificadores, por ejemplo, estn
todos representados por el token simple ID,
pero tienen muchos valores de cadena o
lexemas diferentes que representan sus
nombres individuales.
EJEMPLO
Espacios en blanco
Palabras reservadas
Operadores
Operador de asignacin
Nmeros
Identificadores
Smbolos especiales
Fin de sentencia
ANALISIS SINTACTICO
Es la segunda fase del compilador
ANALISIS SINTACTICO
FUNCIONES ANALISIS
SINTACTICO
Determinar la estructura sintctica de un programa a
partir de los tokens producidos por el analizador lxico.
Construir un rbol sintctico que represente esta
estructura.
ANALISIS SINTACTICO
Ejemplo
Cualquier identificador es una expresin.
Cualquier nmero es una expresin.
Si expresion1 y expresin2 son expresiones tambin lo
son:
expresion1 + expresion2
expresion1 * expresion2
(expresion1)
ANALISIS SINTACTICO
Para el ejemplo que nos ocupa
podemos partir de la gramtica:
S <ID> <ASIG> expr <TERM>
expr <ID>
| <ID> <+> expr
| <ID> <*> expr
| <NUM>
ARBOL
SINTCTICO
ANALISIS SINTACTICO
Existen dos clasificaciones:
Anlisis sintctico descendente
Anlisis sintctico ascendente
ANALISIS SEMANTICO
Esta fase revisa el rbol sintctico junto con los atributos y
la tabla de smbolos para tratar de encontrar errores
semnticos. Para todo esto se analizan los operadores y
operandos de expresiones y proposiciones.
Finalmente rene la informacin necesaria sobre los tipos
de datos para la fase posterior de generacin de cdigo.
El compilador verifica si los operandos de cada operador
son compatibles segn la especificacin del lenguaje
fuente.