Está en la página 1de 11

Errores Semnticos

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:

Conversiones de tipos no permitidas

int x;

x = 4.32;

Error: Ej1.java [6:1] possible loss of precision

Variables usadas y no definidas


Operandos de tipos no compatibles

if (x || 5) x = 0;

Error: Ej2.java [7:1] operator || cannot be applied to int,int

Es mucho ms difcil introducir mtodos formales para la


recuperacin de errores semnticos que para la recuperacin
de errores sintcticos, ya que a menudo la recuperacin de
errores semnticos es ad hoc. No obstante, puede requerirse
que, por lo menos, el error semntico sea informado al
programador, que se le ignore y que, por tanto, se suprimir la
generacin de cdigo.

Sin embargo, 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.

En cierto modo, este tipo de error es el ms difcil de depurar,


ya que ni el compilador ni el sistema proporcionan informacin
sobre qu est fallando. Lo nico cierto es que el programa no
se est comportando como debera. Un error semntico se
produce cuando la sintaxis del cdigo es correcta, pero la
semntica o significado no es el que se pretenda. La
construccin obedece las reglas del lenguaje, y por ello el
compilador o intrprete no detectan los errores semnticos. Los
compiladores e intrpretes slo se ocupan de la estructura del
cdigo que se escribe, y no de su significado.
http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro32/autocontenido/autocon/45__errores
_semnticos.html

En el anlisis semntico se detectan errores relacionados con la validez del programa. Se


puede decir que estos errores son de tipo sintctico-semntico, pero no pueden ser
detectados por el analizador sintctico, ya que se relacionan con interdependencias entre
las diferentes partes de un programa que no son reflejadas en un anlisis gramatical. El
analizador semntico recibe la informacin resultado del anlisis sintctico que puede ser
un rbol jerrquico con la informacin relativa a la organizacin de los tokens en la
instruccin que se esta analizando.

Ejemplo de errores que pueden ser detectados en el proceso de anlisis semntico


son los casos de compatibilidad entre la declaracin de un identificador y su uso (chequeo
de tipos), la concordancia entre la definicin de una funcin y su activacin o llamada, etc.

Ejemplo: id1 = id2 + id3 * 7

Durante el anlisis semntico de un lenguaje de fuerte chequeo de tipos el rbol


sintctico debe ser modificado para reflejar el anlisis de los tipos de los datos. Note que
haciendo un chequeo de tipos la constante 7, al ser una constante entera debe ser
convertida a real para poder ser operada y las dems variables no tienen dificultad alguna
para ser utilizadas al ser todas reales.

El anlisis semntico se trata de determinar el tipo de los resultados intermedios,


comprobar que los argumentos que tiene un operador pertenecen al conjunto de los
operadores posibles, y si son compatibles ente si, etc. En definitiva, comprobar que el
significado do lo que se va leyendo es vlido.

El anlisis semntico se realiza posteriormente al sintctico y mucho mas difcil de


formalizar que ste.

La salida terica de la fase de anlisis semantico seria un rbol semntico.

QU ES UN RBOL SEMNTICO?

Es una estructura jerrquica en la cual se registran las operaciones que implica u opera
dentro del programa fuente.

En cada una de las ramas del rbol semntico se registra el valor o significado que este
debe tener, y el anlisis se encarga de terminar cual de los valores registrados en las ramas
es aplicable.
Ejemplo: Suponiendo que tenemos esta lnea de cdigo en C:
res = valor1 + valor2;
En C el smbolo (+) implica una suma de valores o una unin de las cadenas.
El anlisis semntico se va a encargar que tanto el valor1 como el valor2 tengan datos
que son compatibles en comn y que adems se les pueda aplicar dicho operador

TABLA DE SMBOLOS
Un compilador necesita guardar y usar la informacin de los objetos que se va
encontrando en el texto fuente, como variables, etiquetas, declaraciones de tipos, etc.
Esta informacin se almacena en una estructura de datos interna conocida como tabla
de smbolos.

El compilador debe desarrollar una serie de funciones relativas a la manipulacin de esta


tabla como insertar un nuevo elemento en ella, consultar la informacin relacionada con un
smbolo, borrar un elemento, etc. Como se tiene que acceder mucho a la tabla de smbolos
los accesos deben ser lo ms rpidos posible para que la compilacin sea eficiente.

SISTEMAS DE TIPO
Es el conjunto de reglas que determinan el criterio para asignar expresiones de tipo a
las diferentes partes del cdigo fuente.
Tipo bsico: entero, carcter, real, lgico
Nombres de tipo
Constructores de tipo: estructuras, uniones, objetos
Apuntadores: referencias a tipos
Funciones a=suma();
Chequeos de tipos (y otros)
Un compilador debe realizar una serie de chequeos estticos, como chequeos de tipos:
Consistencia: unicidad, existencia, no-ciclicidad, ...
Equivalencia y compatibilidad de tipos
Conversin explcita [cast] o forzada [coercion]
Inferencia de tipos (en valores)
Sobrecarga de funciones y operadores

COMPROBACIONES SEMNTICAS
Comprobaciones ESTTICAS. Las comprobaciones sintcticas y semnticas.
Comprobaciones DINMICAS. Realizadas en tiempo de ejecucin.
Comprobaciones SEMNTICAS
v De TIPO. Verificacin del tipo de los operandos en las expresiones.
v De FLUJO de CONTROL. Verifica los puntos del programa de salida y entrada del control.
v De UNICIDAD. Verifica la presencia de smbolos de forma nica. (ejemplo: declarar un
smbolo una sola vez).
v Relacin de NOMBRES. Un mismo nombre puede aparecer ms de una vez.

REPRESENTACIONES INTERNAS
Intermedias entre frontal [front-end] y dorsal [back-end], permiten desacoplar los diseos
de unos y otros. Orientadas a: Su optimizacin (instrucciones claras y simples). Generar
cdigo de distintas mquinas objeto y el diseo debe permitir su fcil generacin por el
analizador semntico.

BIBLIOGRAFIA:

http://www.slideshare.net/pepgonzalez/analisis-semantico

http://www.ecured.cu/index.php/Teor%C3%ADa_de_compiladores

Analisis Semantico
Introduccion
Aqui les mostraremos un poco de lo que es la definicion
de los siguientes conceptos en cuanto analisis
semantico y los subtemas que veremos en la primera
unidad de lenguajes y automatas 2
el objetivo de esta unidad es definir, disear, construir y
programarlas fases de el analizador lexico y sintactico
de un traductoro compilador.

Analisis Semantico

Que es un analisis semantico?


bueno se refiere a los aspectos del significado, sentido
o interpretacion de el mismo de un determinado
elemento, simbolo, palabra, expresion o representacion
formal

determina el tipo de resulados intermedios y que si los


argumentos que tiene un operador pertenece al
conjunto de los operadores posibles.
revisa si el significado de lo que se va leyendo es valido.
el resultado de la fase de analisis semantico viene
siendo lo que se conoce como "arbol semantico"

Arbol De Expresiones o Arbol Semntico


Es una estructura jerarquica en la cual se registran las
operaciones que realiza el programa fuente, en cada
una de las ramas de el arbol se registra el valor o
significado que este debe tener y el analisis analiza cual
de los valores registrado en las ramas es aplicable

ACCIONES SEMNTICAS

Dependiendo del tipo de sentencias, las acciones


semnticas pueden agruparse en: Sentencias de
Declaracin: Completar la seccin de tipos de la Tabla
de
Smbolos.
Sentencias ejecutables: Realizar comprobaciones de
tipos entre los operandos
implicados.
Funciones y procedimientos: Comprobar el nmero,
orden y tipo de los
parmetros actuales en cada llamada a una funcin o
procedimiento.
Identificacin de variables: Comprobar si un
identificador ha sido declarado
antes de utilizarlo.
Etiquetas: Comprobar si hay etiquetas repetidas y
validacin.
Constantes: Comprobar que no se utilicen en la parte
izquierda de una asignacin.
Conversiones y equivalencias de tipo: Verificacin.
Sobrecarga de operadores y funciones: Detectar y
solventar.

Comprobacin de tipo en expresiones

E literal {E.tipo = char}


E num {E.tipo = entero}
E id {E.tipo = Consultar_TS(id.entrada)}
E id [E1] {id.tipo = Consultar_TS(id.entrada)}

Pila semantica en un analizador sintactico

Como podemos entender un analizador sintactico


ascendente utiliza durante el anlisis una pila. En esta
va guardando datos que le permiten ir haciendo las
operaciones de reduccin que necesita.
Para incorporar acciones semnticas como lo es
construir el rbol sintctico, es necesario incorporar a la
pila del analizador sintactico ascendente otra columna
que guarde los atributos de los smbolos que se van
analizando.

Generacion de tablas de simbolos y de direcciones

Tambin se la llama tabla de nombres o tabla de


identificadores y tiene dos funciones
principales:
- Efectuar chequeos semnticos.
- Generacin de cdigo.
Permanece slo en tiempo de compilacin, no de
ejecucin, excepto en aquellos casos en
que se compila con opciones de depuracin.
La tabla almacena la informacin que en cada momento
se necesita sobre las variables del
programa, informacin tal como: nombre, tipo, direccin
de localizacin, tamao, etc.
Manejo de errores semanticos

Los errores semnticos son ms sutiles. Un error


semntico se produce cuando la sintxis del cdigo es
correcta, pero la semntica o significado no es el que se
pretenda. La construccin obedece las reglas del
lenguaje, y por ello el compilador o intrprete no
detectan los errores semnticos. Los compiladores e
intrpretes slo se ocupan de la estructura del cdigo
que se escribe, y no de su significado. Un error
semntico puede hacer que el programa termine de
forma anormal, con o sin un mensaje de error.

Bibliografia
http://progsistemasf7.blogspot.mx/2010/10/pila-
semantica-en-un-analizador.html
http://www.lcc.uma.es/~galvez/ftp/tci/tictema5.pdf
http://cic.puj.edu.co/wiki/lib/exe/fetch.php?media=mater
ias:compi:comp_sesion16_2008-1.pdf
http://progsistemasf7.blogspot.mx/2010/10/57-manejo-
de-errores-semanticos_9697.html
http://www.lsi.uned.es/procleng/apuntes/2010-
2011/PDL.11.Tema7.AnalisisSemantico.Comprobacion
DeTipos.pdf
http://www.slideshare.net/pepgonzalez/analisis-
semantico