Unidad1 Lenguajes y Automatas2
Unidad1 Lenguajes y Automatas2
Unidad1 Lenguajes y Automatas2
Fecha:
08 de febrero 2017
Pgina 1 de 15
Unidad 1 Anlisis Semntico
ndice
Tabla de contenido
Introduccin................................................................................................................................... 3
1.1 rboles de expresiones............................................................................................................ 4
1.2. Acciones semnticas de un analizador sintctico. ................................................................. 6
1.3. Comprobaciones de tipos en expresiones.............................................................................. 7
1.4. Pila semntica en un analizador sintctico............................................................................. 8
1.5. Esquema de traduccin. ....................................................................................................... 10
1.6. Generacin de la tabla de smbolo y de direcciones. ........................................................... 12
1.7. Manejo de errores semnticos ............................................................................................. 13
Conclusin ................................................................................................................................... 14
Bibliografas ................................................................................................................................. 15
Pgina 2 de 15
Introduccin
Pgina 3 de 15
1.1 rboles de expresiones.
En muchos problemas de programacin numrica es necesario trabajar con los valores obtenidos
al evaluar una expresin matemtica determinada, generalmente la solucin a este problema
radica en escribir directamente en el cdigo fuente dicha expresin para luego usarla. La va
anterior trae como inconveniente la recompilacin del cdigo fuente cada vez que se quiera
definir otra expresin matemtica, lo que a su vez nos limita si queremos hacer un programa que
sea genrico en ese sentido. Al usar un intrprete de funciones se puede solucionar este
problema, al poder evaluar de forma dinmica cualquier expresin matemtica. Sin embargo,
prcticamente ningn lenguaje de programacin trae en su implementacin estndar de
funciones y/o clases algn soporte para interpretar funciones dinmicamente.
Conceptos importantes
Es necesario para una mejor comprensin de este trabajo definir una serie trminos que sern
usados con frecuencia:
Pila (''stack'' en ingls): es una estructura de datos en la que el modo de acceso a sus elementos
es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en salir) que permite
almacenar y recuperar datos. Cuando se trata de extraer un elemento almacenado en este tipo
de estructura, la extraccin se realiza en el orden inverso del que fueron almacenados, es decir el
ltimo elemento almacenado es el primero en salir y el primero que fue almacenado es el ltimo
que puede ser extrado.
Las operaciones bsicas que se realizan sobre una pila son las siguientes:
Pgina 4 de 15
Operadores binarios: Acordaremos en llamar operadores binarios a todos aquellos que acten
sobre dos operandos, estos son: suma (+), resta (-), multiplicacin (*),...., ect.
Operadores unarios: Acordaremos en llamar operadores unarios a todos aquellos que acten
sobre s/slo un operando, estos son las funciones matemticas bsicas: seno, coseno, tangente,
raz cuadrada, logartmo natural,...., ect.
Operador: +, -, *, /.
Propiedades:
+, -
Ejemplo: a*(b+c)+d
Pgina 5 de 15
1.2. Acciones semnticas de un analizador sintctico.
Definicin de un analizador sintctico: es la fase del analizador que se encarga de chequear el
texto de entrada en base a una gramtica dada. Y en caso de que el programa de entrada sea
vlido, suministra el rbol sintctico que lo reconoce.
Acceder a la tabla de smbolos (para hacer parte del trabajo del analizador
semntico).
Este mtodo de trabajo da lugar a los mtodos de compilacin dirigidos por sintaxis. Manejo de
errores sintcticos Los errores sintcticos son dados por una expresin aritmtica o parntesis no
equilibrados.
Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su localizacin.
Gramtica:
G (N, T, P, S) N = No terminales.
T = Terminales.
Pgina 6 de 15
Dependiendo del tipo de sentencias, las acciones semnticas pueden agruparse en:
Como mnimo, ante un error, un comprobador de tipos debe informar de la naturaleza y posicin
del error y recuperarse para continuar con la comprobacin del resto del programa a analizar.
Conversin de tipos: a veces es necesario transformar el tipo de una expresin para utilizar
correctamente un operador o para pasar de forma adecuada un parmetro a una funcin.
Coercin: es una conversin de tipos que realiza de forma implcita el propio compilador. Si es el
programador el que realiza la conversin se tratar entonces de una conversin explcita.
Funciones polimrficas: son aquellas que trabajan con argumentos cuyo tipo puede cambiar en
distintas llamadas a la funcin.
Reglas de un lenguaje que permiten asignar tipos alas distintas partes de un programa y verificar
su correccin.
1. Formado por las definiciones y reglas que permiten comprobar el dominio de un
identificador, y en qu contextos puede ser usado.Cada lenguaje tiene un sistema de
tipos propio, aunque puede variar de una a otra implementacin.
2. La comprobacin de tipos es parte del anlisis semntico. Inferencia de tipos: calcular y
mantener la informacin sobre los tipos de datos.
3. Verificacin de tipo: asegurar que las partes de un programa tienen sentido segn las
reglas de tipo del lenguaje.
La informacin de tipos puede ser esttica o dinmica:
Pgina 7 de 15
LISP, CAML o Smalltalk utilizan informacin de tipos dinmica.
En ADA, Pascal o C la informacin de tipos es esttica.
Tambin puede ser una combinacin de ambas formas.
Son estructuras de datos que se utilizan principalmente para simplificar ciertas operaciones de
programacin estas estructuras pueden implementarse mediante arrays o listas enlazadas
Pila:
Una coleccin de datos a los cuales se les puede acceder mediante un extremo, que se conoce
generalmente como tope
Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Las pilas y colas son
estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones de
programacin. Estas estructuras pueden implementarse mediante arrays o listas enlazadas.
Pgina 8 de 15
Un analizador sintctico es un autmata de pila que reconoce la estructura de una cadena de
componentes lxicos. En general, el analizador sintctico inicializa el compilador y para cada
smbolo de entrada llama al analizador morfolgico y proporciona el siguiente smbolo de
entrada. Al decir pila semntica no se refiere a que hay varios tipos de pila, hace referencia a que
se debe programar nica y exclusivamente en un solo lenguaje, es decir, no podemos mezclar
cdigo de C++ con Visual Basic. Ventajas
Los problemas de integracin entre los subsistemas son sumamente costosos y muchos de ellos
no se solucionan hasta que la programacin alcanza la fecha lmite para la integracin total del
sistema
. Se necesita una memoria auxiliar que nos permita guardar los datos para poder hacer la
comparacin
Reglas semnticas
Analizadores descendentes
Compatibilidad de tipos
Durante la fase de anlisis semntico, el compilador debe verificar que los tipos y valores
asociados a los objetos de un programa se utilizan de acuerdo con la especificacin del lenguaje.
Adems debe detectar conversiones implcitas de tipos para efectuarlas o insertar el cdigo
apropiado para efectuarlas as como almacenar informacin relativa a los tipos de los objetos y
aplicar las reglas de verificacin de tipos.
Pgina 9 de 15
1.5. Esquema de traduccin.
Un esquema de traduccin es una gramtica atribuida en la que hay intercalados en el lado
derecho de las reglas de produccin, fragmentos de cdigo en un lenguaje de programacin, que
implementan acciones semnticas. Un ETDS es una Definicin Dirigida por Sintaxis (DDS) en que
se da un orden en la ejecucin de las acciones semnticas. Las acciones semnticas se sitan a la
derecha de los smbolos a lo que se refieren y entre llaves. Esta regla de situar las acciones
semnticas despus de los smbolos que utilizan da un orden en su ejecucin.
Pgina 10 de 15
En la prctica
E T {E.val T.val}
TF {T.val F.val}
F n {F.val n.val}
Pgina 11 de 15
1.6. Generacin de la tabla de smbolo y de direcciones.
Las tablas de smbolos (tambin llamadas tablas de identificadores y
tablas de nombres), realizan dos importantes funciones en el proceso
de traduccin: verificar que la semntica sea correcta y ayudar en la
generacin apropiada de cdigo. Ambas funciones se realizan
insertando o recuperando desde la tabla de smbolos los atributos de
las variables usadas en el programa fuente. Estos atributos, tales
como: el nombre, tipo, direccin de almacenamiento y dimensin de
una variable, usualmente se encuentran explcitamente en las declaraciones o ms
implcitamente a travs del contexto en que aparecen los nombres de variables en el programa.
Una de las estructuras de datos que se encuentran relacionadas con las fases del proceso de
compilacin es la tabla de smbolos, la cual tiene como propsito registrar informacin que se
comparte entre varias etapas y que permite administrar los recursos asociados a las entidades
que manipular el programa. La tabla de smbolos tiene tpicamente la siguiente estructura:
Pgina 12 de 15
Representacin de direcciones en
una tabla de smbolos.
1.7. Manejo de errores semnticos
Los errores que puede detectar el analizador sintctico son aquellos que violan las reglas de una
gramtica independiente del contexto. Algunas de las caractersticas de un lenguaje de
programacin no pueden enunciarse con reglas independientes del contexto, ya que dependen
de l; por ejemplo, la restriccin de que los identificadores deben declararse previamente. Por lo
tanto, los principales errores semnticos son:
Identificadores no definidos.
Operadores y operandos incompatibles.
La mayora de los errores semnticos pueden ser detectados mediante la revisin de la tabla de
smbolos, suponiendo un tipo que se base en el contexto donde ocurra o un tipo universal que
permita al identificador ser un operando de cualquier operador del lenguaje. Al hacerlo,
evitamos la produccin de un mensaje de error cada vez que se use la variable no definida. Si el
tipo de un operando no concuerda con los requisitos de tipo del operador, tambin es
conveniente reemplazar el operando con una variable ficticia de tipo universal.
Los errores que puede detectar el analizador sintctico son aquellos que violan las reglas de una
gramtica independiente del contexto. Ya hemos mencionado que algunas de las caractersticas
de un lenguaje de programacin no pueden enunciarse con reglas independientes del contexto,
ya que dependen de l; por ejemplo, la restriccin de que los identificadores deben declararse
previamente. Por lo tanto, los principales errores semnticos son:
x = 4.32;
if (x || 5) x = 0;
Variables usadas y no definidas
Error: Ej2.java [7:1] operator || cannot be
Operandos de tipos no compatibles applied to int,int
Pgina 13 de 15
Conclusin
En el desarrollo de esta unidad se describieron los arboles de expresiones as como cada una de
sus caractersticas que nos brindan conocimiento para poder entender el procedimiento del
anlisis en una representacin grfica mediante rboles.Para el proceso del anlisis conlleva
otros procesos ms relacionados tales como la generacin de la tabla de smbolos, la
comprobacin de tipos en expresiones, un esquema de traduccin, entre otros.
La mayora de los procesos deben de esperar a que finalice uno para poder iniciar, adems de
que algunos otros procesos en el anlisis se repiten hasta validar las expresiones correctas.
El analizador semntico tiene dos objetivos: Hacer comprobaciones que no se hagan durante el
anlisis lxico o sintctico. Crear una representacin adecuada para fases posteriores.
Pgina 14 de 15
Bibliografas
Snchez Dueas, G., & Valverde Andreu, J. A. (1990). Compiladores e interpretes. Un enfoque pragmatico.
Madrid: Daz de Santos.
V. Aho, A., Sethi, R., & D. Ullman, J. (1990). Compiladores. Principios, tcnicas y herramientas.
Massachusetts, EUA: Addison Wesley Longman.
Fuentes de informacin
http://www.gramaticas.net/2012/05/ejemplos-de-analisis-semantico.html
http://arantxa.ii.uam.es/~alfonsec/docs/compila5.htm
Pgina 15 de 15