Professional Documents
Culture Documents
Lenguajes Y Autmatas II
Actividades de la unidad 1: Anlisis semntico
Competencia especfica a desarrollar:
Integrantes de equipo:
OLIVARES SOLIS RICARDO JACOB
OZUNA PERZ MARTN ALBERTO
RODRIGUEZ RAYO EDUARDO
12320802
12320806
12320825
Enero - Junio
2015
----------------------
0 12 - 13 Hrs.
AULA: 7SA
---------------------
INDICE
INTRODUCCION Pg. 2
REPORTE DE LA
SEMNTICOS
CUADRO
SINPTICO
EXPRESIONES.
DETECCIN
SOBRE
LISTA
DE
REGLAS
PARA
EXPRECIONES
TABLA
DONDE
SE
SEMNTICAS..
RECUPERACIN
MANEJO
LA
DE
CONVERSIN
DESCRIBEN
DE
ERRORES Pg. 3
TIPOS
EN
LAS Pg. 8
DE
TIPOS
EN Pg. 9
LAS
ACCIONES Pg. 14
Pg. 20
CONCLUSIN.
Pg. 21
BIBLIOGRAFA.
Pg. 22
INTRODUCCIN
Los compiladores son programas de computadora que traducen un lenguaje a otro. Un
compilador toma como su entrada un programa escrito en su lenguaje fuente y produce
un programa equivalente escrito en su lenguaje objetivo. Por lo regular, el lenguaje fuente
es un lenguaje de alto nivel, tal como C o C++, mientras que el lenguaje objetivo es cdigo
objeto (tambin llamado en ocasiones cdigo de mquina) para la mquina objetivo, es
decir, cdigo escrito en las instrucciones de mquina correspondientes a la computadora
en la cual se ejecutar. Podemos visualizar este proceso de manera esquemtica como
sigue:
En este trabajo se espera cumplir con las actividades principales que se necesitan para el
entendimiento de cmo funciona un compilador internamente y una de las cosas que
realiza es la deteccin de errores semnticos, la construccin de tabla de smbolos, el uso
de tokens y la correccin de errores. Algunos de estos temas se hablaran en este trabajo.
DESARROLLO
Los errores encontrados en las distintas fases de anlisis se envan a un mdulo denominado
manejo de errores. En el caso ms sencillo puede ser un subprograma al que se le invoca
envindole el cdigo de error, y que se encarga de escribir un mensaje con el error
correspondiente, y el nmero de lnea donde se ha producido, as como de cortar el proceso de
traduccin. Si se desea construir un tratamiento de errores ms completo, por ejemplo
detectando todos los errores del programa fuente, el mdulo se complica dado que los
analizadores deben proseguir su trabajo con falta de datos.
Ejemplo
VAR
ch : CHAR; (* Un identificador no se puede utilizar si *)
ent: INTEGER; (* previamente no se ha definido. *)
...
ch := ent + 1; (* En Pascal no es vlido, en C s. *)
Anlisis Semntico: Tipo de variables asignadas incorrecta.
En los errores semnticos: La estructura est bien pero hay errores de significado. Ejemplo:
operador y operandos incompatibles.
Algunos errores se pueden detectar en compilacin otros solo en ejecucin. El tratamiento de
errores es una parte importante que se suele descuidar.
Tratamiento de errores semnticos
COMPROBACIN DE TIPOS
1. Aspectos generales
Un lenguaje con comprobacin fuerte de tipos es capaz de garantizar que los programas se
pueden ejecutar sin errores de tipo, por lo que los errores de tipo se detectarn siempre en
tiempo de compilacin.
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.
Veamos algunas de las operaciones a tener en cuenta en una comprobacin de tipos:
Funciones polimrficas: Son aquellas que trabajan con argumentos cuyo tipo
puede cambiaren distintas llamadas a la funcin.
En esta imagen podemos observar un error semntico bsico, el cual consta de realizar una suma
entre dos variables, que aunque sean del mismo tipo una de ellas no tiene un valor asignado o
declarado, por lo cual la operacin no puede realizarse.
El compilador detecta el error al instante y nos da una forma de recuperacin al notificarnos con
un icono (
) el cual nos informa del tipo de error que es colocando el cursor sobre este mismo:
Cuadro sinptico donde se describa el manejo de tipos en las expresiones y el uso de operadores
- Una expresin es una combinacin de operadores y operandos. Los datos u operandos pueden
ser constantes, variables y llamadas a funciones.
- Expresiones
- Subexpresiones
- Asignacin
Manejo de tipos
- Aritmticos
- Operadores
- Lgicos
- Relacin
Conversiones de tipos en C#
Dado que a C# se le asignan tipos estticos en tiempo de compilacin, despus
de declarar una variable, no se puede volver a declarar ni tampoco utilizar para
almacenar valores de otro tipo, a menos que dicho tipo pueda convertirse en el
tipo de la variable. Por ejemplo, no existe conversin de un entero a una cadena
arbitraria cualquiera. Por lo tanto, despus de declarar i como entero, no puede
asignarle la cadena "Hello", como se muestra en el cdigo siguiente.
int i;
i = "Hello"; // Error: "Cannot implicitly convert type 'string' to 'int'"
10
Conversiones implcitas
En los tipos numricos integrados, puede realizarse una conversin implcita
cuando el valor que se va a almacenar puede ajustarse a la variable sin necesidad
de truncamiento o redondeo. Por ejemplo, una variable de tipo longlong
(Referencia de C#) (entero de 8 bytes) puede almacenar cualquier valor que
pueda almacenar a su vez un elemento intint (Referencia de C#) (4 bytes en un
equipo de 32 bits). En el ejemplo siguiente, el compilador convierte implcitamente
el valor de la derecha en un tipo long antes de asignarlo a bigNum.
// Implicit conversion. num long can
// hold any value an int can hold, and more!
11
sbyte
byte
short
ushort
int
uint
long
char
float
double
ulong
Comentarios
Las conversiones de int, uint o long a float y de long a double pueden
causar una prdida de precisin, pero no una prdida de magnitud.
Conversiones explcitas
Sin embargo, si no se puede realizar una conversin sin riesgo de perder
informacin, el compilador requiere que se realice una conversin explcita,
12
Para
sbyte
byte
Sbyte o char
short
uint
long
ulong
char
float
sbyte, byte, short, ushort, int, uint, long, ulong, charo decimal
13
double sbyte, byte, short, ushort, int, uint, long, ulong, char, floato decimal
decimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float o double
Comentarios
Las conversiones numricas explcitas pueden producir prdida de
precisin o provocar excepciones.
14
LITERALES
ENTEROS
El tipo de un literal entero se determina como sigue:
REALES
Si no se especifica el sufijo de tipo real, el tipo del literal real es double. De lo
contrario, el sufijo de tipo real determina el tipo del literal real, como sigue:
Un literal real con el sufijo F o f es de tipo float. Por ejemplo, los literales 1f,
1.5f, 1e10f y 123.456F son de tipo float.
Un literal real con el sufijo D o d es de tipo double. Por ejemplo, los literales
1d, 1.5d, 1e10d y 123.456D son de tipo double.
Un literal real con el sufijo M o m es de tipo decimal. Por ejemplo, los
literales 1m, 1.5m, 1e10m y 123.456M son de tipo decimal. Este literal se
convierte en un valor decimal tomando el valor exacto y, si es necesario,
redondeando al valor ms cercano que se pueda representar mediante el
redondeo de banca (Seccin 4.1.7). Cualquier escala que se detecte en el
literal se conserva, salvo que el valor est redondeado o sea cero (en este
caso, el signo y la escala son 0). Por lo tanto, el anlisis del literal 2.900m
forma un decimal con signo 0, coeficiente 2900 y escala 3.
Si el literal especificado no puede representarse en el tipo indicado, se produce un
error en tiempo de compilacin.
El valor de un literal real de tipo float o double se determina mediante el uso del
modo "redondeo al ms cercano" de IEEE.
Tenga en cuenta que, en un literal real, siempre son necesarios dgitos decimales
tras el punto decimal. Por ejemplo, 1.3F es un literal real, pero no as 1.F.
Convert (Clase)
Convierte un tipo de datos base en otro tipo de datos base.
15
Una conversin correcta. Para las conversiones entre dos tipos base
diferentes no mostradas en los resultados anteriores, todas las
conversiones de ampliacin y todas las conversiones de restriccin que no
producen una prdida de datos sern correctas y el mtodo devolver un
valor del tipo base concreto.
OverflowException porque 10000 est fuera del intervalo del tipo de datos
Byte.
17
El anlisis semntico se realiza despus del sintctico y es ms difcil de formalizar que ste. 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 entre
s, es decir, comprobar que el significado de lo que se va leyendo es vlido.
El anlisis semntico utiliza como entrada el rbol sintctico detectado para comprobar
restricciones de tipo y otras limitaciones semnticas y preparar la generacin de cdigo.
La salida terica de la fase de anlisis semntico sera un rbol semntico. Consiste en un rbol
sintctico en el que cada una de sus ramas ha adquirido el significado que debe tener. En el caso
de los operadores polimrficos (un nico smbolo con varios significados), el anlisis semntico
determina cul es el aplicable. Por ejemplo, consideremos la siguiente sentencia de asignacin:
A := B + C
En Pascal, el signo + sirve para sumar enteros y reales, concatenar cadenas de caracteres y unir
conjuntos. El anlisis semntico debe comprobar que B y C sean de un tipo comn o compatible y
que se les pueda aplicar dicho operador. Si B y C son enteros o reales los sumar, si son cadenas
las concatenar y si son conjuntos calcular su unin.
Acciones semnticas
Dependiendo del tipo de sentencias
Sentencias de Declaracin
Sentencias ejecutables
Funciones y procedimientos
Identificacin de variables
Etiquetas
Constantes
Detectar y solventar.
18
FUNCION
CARACTERISTICAS
CONTENIDO
ESTRUCTURA
OPERACIONES
RESUMEN
Una tabla de smbolos es la estructura de datos que permite almacenar informacin semntica, es
decir en ella se encuentra el significado asociado a las estructuras formales (sintaxis) del lenguaje.
Su objetivo es delimitar el contexto de un conjunto de frases o instrucciones de un lenguaje libre
de contexto, es decir que los lenguajes representados por las variables se describen
recursivamente en trminos de otros lenguajes o de smbolos primitivos llamados terminales y las
reglas que describen el lenguaje asociado con cada variable se llaman producciones.
Algunas de las utilidades de la tabla de smbolos son:
- Simplifica el anlisis sintctico
- Ayudan en las comprobaciones semnticas
- Y en la generacin de cdigo.
El contenido de la tabla de smbolos es de dos tipos: el propio smbolo y los atributos necesarios
para definir el smbolo a nivel semntico y de generacin de cdigo, los atributos dependen a nivel
general si:
* Del tipo de gestin de memoria
* El lenguaje esta, o no, estructurado en bloques
* El smbolo es, o no, parmetros de un procedimiento o funcin
CONSTRUCCION DE LA TABLA DE SIMBOLOS
1.
El analizador semntico:
- Aadir los tipos, si procede, a los smbolos que aparecen en la tabla de smbolos.
19
Insertar
Consultar
Modificar (aadir atributos nuevos).
Lenguaje con declaraciones de variables est conformado por dos tipos: explicitas e implcitas, en
la primera est compuesta por declaraciones de tipo operacin de insertar y de referencia donde
solo se puede consultar; y en las implcitas contiene las operaciones de consulta si no est ya
incluida e inserta en caso contrario y adems tiene lenguajes con estructura de bloque, es decir
crea subtablas.
En la implementacin de la tabla de smbolos, la distribucin de la informacin depender de las
caractersticas del lenguaje y de las restricciones establecidas para los smbolos. Est conformado
por campos:
Campo para el smbolo que a su vez se divide en formato fijo y variable respecto al primero como
su nombre lo dice establece un lmite en el nmero de caracteres que forman los smbolos. En el
segundo se dispone de la TS de un rea auxiliar en donde se introducen los smbolos de un modo
consecutivo.
Campo de direccin: este se divide en dos lenguajes sin y con estructura de bloques en esta ltima
se necesitan dos campos nmero y direccin de bloque.
Campo tipo: este se introduce cuando se identifica una declaracin explcita o implcita de una
variable. Y se utiliza para determinar la memoria de almacenamiento y la comprobacin de tipos.
Campo nm. de dimensiones / nm. de parmetros: la realiza el analizador semntico y sirve
para delimitar el tamao de memoria necesaria para representar el smbolo.
Campo lista cruzada de referencia y puntero de orden: son tiles para el programador del
traductor con objeto de facilitar el uso de la TS.
ORGANIZACIN DE LA TS
Esta se subdivide en dos fases:
1- Lenguaje SIN estructura de bloque: es por medio de una lista est dividida por ordenada y
no ordenada en la primera se representa por medio de rboles binarios y tablas hash.
2- Lenguajes CON estructura de bloque: una tabla para cada bloque con estructura de PILA. La
estructura consta de una PILA + INDICE.
20
COMPROBACIONES SEMANTICAS
ESTATICAS: las comprobaciones sintcticas y semnticas.
DINAMICAS: realizadas en tiempo de ejecucin.
SEMANTICAS:
-
EXPRESIONES DE TIPOS
CONSTRUCTORES DE TIPOS:
* Matrices
* Producto
* Registro
* Apuntadores
* Funciones
EQUIVALENCIA ESTRUCTURAL
Modo de determinar si dos expresiones de tipos son equivalentes:
- Aplicando GDA
- Algoritmo de anlisis de los constructores
1) EQUIVALENCIA DE NOMBRE: cuando las expresiones son nombradas, entonces dos
expresiones de tipos son equivalentes de nombre si y solo si ambas expresiones son idnticas.
2)
Asignacin de tipos
Comprobador de tipos en las expresiones
Comprobador de tipos en las proposiciones o sentencias
Comprobador de tipos de las funciones
Bsicamente se advierten dos tareas:
De asignacin
De evaluacin y comprobacin
22
Ejemplos:
Los atributos que se manejan en la tabla anterior y que se describen enseguida, no son
estrictamente necesarios para todos los compiladores; sin embargo, cada uno de tales atributos
deber ser considerado para la implementacin de un compilador de un compilador en particular.
Nombre de la variable.
Direccin del cdigo objeto.
Tipo.
Valor (o nmero de parmetros para uno procedimiento).
Nmero de lnea fuente donde fue declarada la variable.
Nmeros de lnea fuente donde se hace referencia a la variable.
Liga. Campo cuyos valores sirven para listar las variables en orden alfabtico.
23
24
Propuesta de proyecto
25
CONCLUSIN
Durante la elaboracin de este trabajo aprendimos que uno de los 3 tipos de
errores de un compilador, el semntico, es importante, ya que ayuda a crear un cdigo
fuente correcto y libre de errores, pero cabe destacar que esto ltimo no sera posible sin
la deteccin de los otros dos tipos de errores.
La mayora de los compiladores detectan los errores semnticos durante la escritura del
cdigo, y nos muestra una pequea notificacin de en donde se encuentra el error y ya es
problema del programador corregirlo, pero durante la compilacin si se nos llega a pasar
un error este es nuevamente detectado y ahora s es necesario corregirlo para poder
seguir con la compilacin y terminar con la ejecucin del cdigo.
De manera no visible al usuario, durante la compilacin se van creando tablas de smbolo
y direcciones, estas son las que almacenan los valores de las variables, las expresiones y
todo lo que ocurre durante el proceso de anlisis.
Como punto final hemos decidido crear una propuesta de proyecto, el cual trata de crear
un analizador lxico en el lenguaje de programacin JAVA, esperando que este sea de
agrado y as poder llevarlo a cabo.
26
BIBLIOGRAFA
2013. AngelFire. [En lnea] 20 de Junio de 2013. [Citado el: 07 de Septiembre de 2015.]
http://www.angelfire.com/planet/ispr/Unidad3/3.4.htm.
Daniel. 2011. Compiladores. [En lnea] 18 de Mayo de 2011. [Citado el: 07 de Septiembre de
2015.] http://compiladoresasignatura.blogspot.mx/2011/05/unidad-vii-manejo-de-errores.html.
GianBros. 2011. Puras Lneas. [En lnea] 11 de Agosto de 2011. [Citado el: 07 de Septiembre de
2015.] http://puraslineas.com/2011/08/11/analizador-lexico/.
Louden, Kennet. Construccin de compiladores - Principios y prcticas. Primera. Mxico : s.n.
Meza, Marisela. 2013. Manejo de errores semnticos. [En lnea] 30 de Septiembre de 2013.
[Citado el: 07 de Septiembre de 2015.] https://prezi.com/jmntejze1wxf/manejo-de-erroressemanticos/.
Ullman, Sethi. Compiladores - Principios, tcnicas y herramientas. s.l. : Pearson Educacin.
Vela, Vargas. 2007. Visin Electrnica. [En lnea] 07 de Enero de 2007. [Citado el: 07 de
Septiembre de 2015.] http://revistas.udistrital.edu.co/ojs/index.php/visele/article/view/246/356.
27