You are on page 1of 22

COMPILADORES Y

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

RAE: Lxico. Vocabulario,conjuntodelaspalabras de un idioma, o de las


quepertenecenal uso deunaregin,aunaactividaddeterminada, a un
campo semnticodado.

RAE: Gramtica. Parte de la gramtica que estudia el modo en que se


combinan las palabras y los grupos que estas forman para expresar
significados, as como las relaciones que se establecen entre todas esas
unidades.

RAE: Informtica. Conjunto de reglas que definen las secuencias correctas


de los elementos de un lenguaje de programacin.

RAE: Semntica. Disciplina que estudia el significado de las unidades


lingsticas y de sus combinaciones.

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

FUNCIONES DEL ANALIZADOR


LXICO
Eliminar espacios en blanco, lneas en blanco, comentarios y dems
informacin innecesaria del programa fuente.
Comprueba que los smbolos de lenguaje de programacin se han
escrito correctamente (palabras reservadas, operadores ,etc).
Contiene el registro de la lnea que se esta analizando en el
momento.
Generar mensajes de errores lxicos y recuperarse de este error.
(modo pnico, trata de arreglar la entrada, palabras reservadas)
Convertir el programa fuente a cadena de tokens.

ANALISIS LEXICO

En esta fase, la cadena de caracteres que constituye el programa fuente se


lee de izquierda a derecha y se agrupa en componentes lxicos, que son
secuencias de caracteres que tienen un significado atmico(coherente);
adems el analizador lxico trabaja con la tabla de smbolos introduciendo
en sta los nombres de las variables.

En nuestro ejemplo los caracteres de la proposicin de asignacin


comision= fijo + valor * 8 ;
se agruparan en los componentes lxicos siguientes:
1.- El identificador comision.
2.- El smbolo de asignacin =.
3.- El identificador fijo.
4.- El signo de suma +.
5.- El identificador valor.
6.- El signo de multiplicacin *.
7.- El nmero 8.
8.- El smbolo de fin de sentencia ;.

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.

You might also like