Você está na página 1de 6

Compiladores.

Gua 7 1

Facultad: Ingeniera
Escuela: Computacin
Asignatura: Compiladores

Tema: Anlisis Semntico

Contenido
En esta gua se desarrollar una tabla de smbolos y se
asociar al analizador sintctico de manera que se pueda
manejar varios tipos de datos en un compilador, tomando
como ejemplo base el compilador del lenguaje MUSIM/3.

Objetivos Especficos

Conocer las fases del anlisis semntico y su relacin


con la tabla de smbolos y el analizador sintctico.
Ensear la especificacin semntica de un lenguaje de
programacin.

Material y Equipo

Gua de Laboratorio N 7.
Computadora con programa Dev C++.
Archivos de recurso
o AnalizadorLexico.h
o AnalizadorSintacticoEBNF.h

Introduccin Terica

Semntica
Gua
La 3
semntica en lingstica es el estudio del significado de
una palabra tanto a nivel individual como en el contexto de
una
Guafrase.
4
Semntica en los lenguajes de programacin es el conjunto de
reglas que especifican el significado de cualquier sentencia,
sintcticamente
fa correcta y escrita en un determinado
lenguaje. Por ejemplo en el lenguaje Pascal la sentencia:
suma := 27 / lado es sintcticamente correcta, ya que a la
izquierda del smbolo de asignacin hay un identificador, y a
2 Compiladores. Gua 7
la derecha una expresin. Pero para que sea semnticamente
correcta hay que comprobar:

lado debe ser compatible con el operador "/" y con el


operando 27.
suma debe ser un tipo compatible con el resultado de la
operacin.

Anlisis Semntico
El analizador semntico detecta la validez semntica de las
sentencias aceptadas por el analizador sintctico. El
analizador semntico suele trabajar simultneamente al
analizador sintctico y en estrecha cooperacin.

Se entiende por semntica como el conjunto de reglas que


especifican el significado de cualquier sentencia
sintcticamente correcta y escrita en un determinado
lenguaje.

Las rutinas semnticas deben realizar la evaluacin de los


atributos de las gramticas siguiendo las reglas semnticas
asociadas a cada produccin de la gramtica.
Por ejemplo para una expresin como:
( A + B ) * ( C + D )
El analizador semntico debe determinar que acciones pueden
realizar los operadores aritmticos (+,*) sobre las variables
A,B,C y D.

As cuando el analizador sintctico reconoce un operador, tal


como " + " o " * ", llama a una rutina semntica que
especifica la accin que puede llevar a cabo. Esta rutina
puede comprobar que los dos operandos han sido declarados, y
que tienen el mismo tipo. Tambin puede comprobar si a los
operandos se les ha asignado previamente algn valor.

Procedimiento

Semntica de MUSIM/3
Gua 3
La definicin lxica y sintctica de MUSIM/3 no es suficiente
es necesario
Gua 4 especificar su semntica. La semntica de este
lenguaje est basada en las operaciones con sus tipos de
datos.
Dada
fa la especificacin lxica y sintctica de un lenguaje la
especificacin semntica se puede orientar por diferentes
Compiladores. Gua 7 3

caminos, aqu se ha elegido uno de ellos, una especificacin


semntica de comprobacin estricta de tipos. Las promociones
de tipo son muy restringidas en este caso se permite
promocionar de entero a real. Los descensos de tipo estn
totalmente prohibidos, as por ejemplo est prohibido asignar
directamente un real a un entero. La especificacin semntica
se puede resumir en:

Sistema de tipos: Se permiten tres tipos de datos: CHAR


(carcter), INTEGER (entero) y FLOAT (real). Por defecto
todos los operadores aritmticos siguen las leyes de
composicin interna, es decir las operaciones que tienen
operandos del mismo tipo de datos, devuelven como resultado
dicho tipos de datos, un caso especial es el operador
potenciacin:

<expresin>1.tipo OPERADOR <expresin>2.tipo-> <expresin>3.tipo

La sentencia de asignacin sigue la misma ley de composicin


interna, es decir el tipo de la variable de la parte
izquierda debe ser igual al tipo de la expresin de la parte
derecha.

<variable>.tipo = <expresin>.tipo

Conversiones de tipo por promocin: Tan solo se permite la


promocin de tipo entero (INTEGER) a tipo real (FLOAT), es
decir:

<expresin>1.I OPERADOR <expresin>2.F <expresin>3.F


<expresin>1.F OPERADOR <expresin>2.I <expresin>3.F

Tambin se permite slo la promocin de entero (I) a real (F)


en la sentencia de asignacin:

<variable>.F = <expresin>.I

Conversiones de tipo por descenso: MUSIM/3 las prohbe


totalmente. Por ejemplo no se permite pasar directamente de
real a entero.

A continuacin se muestra un mtodo de la clase Semntico


que realiza comprobaciones de tipo de operadores aritmticos
y del operador de asignacin. Los tipos de datos que
comprueba son entero (I), real (F) y carcter (C), devuelve
el tipo del resultado, esto corresponde a la semntica de
MUSIM/3 descrita anteriormente.
4 Compiladores. Gua 7

char Semantico::operar(char tipo1, char tipo2, char operador)


{
cout<<"\t\tSemantico: "<<tipo1<<" "<<operador<<"
"<<tipo2<<endl;
if (tipo1 == 'I' && tipo2 == 'I')
if (operador == '/')
return 'F';
else
return 'I';
if (tipo1 == 'C' && tipo2 == 'C')
return 'C';

if (tipo1 == 'F' && tipo2 == 'F')


if (operador == '%')
return 'I';
else
return 'F';
if ( (tipo1 == 'C' && tipo2 != 'C') || (tipo2 == 'C' &&
tipo1 != 'C')) {
cout<<"Error semntico: Tipos incompatibles:
"<<tipo1<<" "<<tipo2<<" "<<operador;
}
if (tipo1 == 'I' && tipo2 == 'F') {
switch (operador) {
case '=':
cout<<"Error semntico: Tipos incompatibles:
"<<tipo1<<" "<<tipo2<<" "<<operador;
case '^':
return 'F';
default:
return 'F';
}
}
if (tipo1 == 'F' && tipo2 == 'I') {
return 'F';
}
cout<<"Error semntico: Tipos incompatibles: "<<tipo1<<"
"<<tipo2<<" "<<operador;
}

Un ejemplo de un programa con MUSIM/3 es:


M{
I a;
I b;
F c;
F d;
Compiladores. Gua 7 5

R a;
R b;
c=a+b;
d=a-b;
W c;
W d;
}.

Donde
M=Main
I=Integer
F=Float
C=Char
R=Read
W=Write
Y los identificadores estn formados de una sola letra.

Tomando en cuenta, las consideraciones anteriores acerca del


lenguaje MUSIM/3, implemente la clase Semntico asociada al
lenguaje MUSIM/3, considerando el mtodo presentado
anteriormente para la comprobacin estricta de tipos.

Anlisis de resultados
Integre el analizador semntico con el analizador sintctico
del proyecto desarrollado en la gua 6 para el leguaje
MUSIM/3. Utilice la definicin sintctica presentada en esa
gua y tome en cuenta la definicin semntica mostrada en el
procedimiento.

Investigacin complementaria
Investigue acerca de los bloques bsicos de cdigo, su
relacin con el cdigo intermedio y el algoritmo de
identificacin de los bloques bsicos de cdigo dentro de
una secuencia de instrucciones en lenguaje mquina.

Bibliografa

Construccin de Compiladores. Principios y practica,


Kenneth C. Louden.
Compiladores. Principios tcnicas y Herramientas.
Sethi Ullman. Pearson Education.
6 Compiladores. Gua 7

Gua 7: Anlisis Semntico Hoja de cotejo: 7


Docente: 1
Tema: Presentacin del programa
Alumno: Mquina No:
Mquina No:

Alumno:
GL:
GL:
Mquina No:
Docente: Fecha:
a
Docente: GL:

EVALUACION

% 1-4 5-7 8-10 Nota

CONOCIMIENTO Del 20 Conocimie Conocimiento Conocimiento


al 30% nto y explicacin completo y
deficient incompleta de explicacin
e de los los clara de los
fundament fundamentos fundamentos
os tericos tericos
tericos

APLICACIN Del 40%


DEL al 60%
CONOCIMIENTO

ACTITUD
Del 15% No tiene Actitud Tiene actitud
al 30% actitud propositiva y proactiva y sus
proactiva con propuestas son
. propuestas no concretas.
aplicables al
contenido de
la gua.
TOTAL 100%

Você também pode gostar