Sei sulla pagina 1di 15

Acciones semnticas de un

analizador sintctico

Anlisis semntico
El anlisis semntico dota de un significado coherente a lo

que hemos hecho en el anlisis sintctico.


El chequeo semntico se encarga de que los tipos que

intervienen en las expresiones sean compatibles o que los


parmetros reales de una funcin sean coherentes con los
parmetros formales

Tareas del Analizador Semntico


1.- Comprobacin de tipos
2.- Comprobacin de parmetros.
3.- Generacin de cdigo intermedio.

Errores tpicos
semntico

del

Variables usadas no declaradas

Declare @nombre char (10)


@nombre = Jorge
@apellido = Prez

Conversin de tipos no permitidos


Int X;
X= 7.36

analizador

Para poder dotar de significado a los smbolos hay que

asignarles cierta informacin que le llamamos atributos.


Para manipular esa informacin portada por los atributos de

los smbolos, es decir, para poder realizar el anlisis


semntico es necesario que las reglas de la gramtica puedan
realizar acciones semnticas y manipular los atributos.

Atributos y acciones semnticas


Se desea construir una pequea calculadora que realiza las

operaciones + y * . La gramtica ser la siguiente:


E E +T |T
T T * F | F
F ( E ) | num

Queremos calcular: 33 + 12 + 20.

rbol de reconocimiento de num + num + num. Los nmeros entre crculos


indican la secuencia de reducciones del anlisis.

Si deseamos construir un intrprete, el siguiente paso es

saber qu resultado nos da cada operacin, y para ello hemos


etiquetado el rbol indicando el orden en el que se han
aplicado las reducciones.
A los terminales le asignaremos ese valor mediante una
accin asociada al patrn correspondiente en el anlisis
lxico, de la siguiente forma:
[0-9]+ { Convertir yytext en un entero y asociar dicho entero al token NUM;
return NUM;
}
Por lo tanto lo que le llegar al analizador sintctico es:
num.33 +.nada num.12 +.nada num.20

Figura de propagacin de atributos de las hojas hacia la raz

Esta propagacin puede implementarse ejecutando acciones

asociadas a cada regla de produccin, de tal manera que la


accin se ejecutar cada vez que se reduzca por su regla
asociada, de igual manera que podamos asociar una accin a
un patrn del analizador lxico.

De esta manera, con las asociaciones de valores a los

terminales y no terminales y las asociaciones de acciones


semnticas a los patrones y a las reglas de produccin,
podemos evaluar el comportamiento de un programa, es
decir, generamos cdigo.

Estas acciones se deben ejecutar cada vez que se reduce

sintcticamente por la regla asociada.

As, un atributo es una informacin asociada a un

terminal o a un no terminal.
Una accin o regla semntica es un algoritmo que

puede acceder a los atributos de los terminales y/o no


terminales.

Como accin semntica no slo se puede poner una

asignacin a un atributo, adems puede aadirse cdigo; p.ej.


si se hace la asociacin:

E1 E2 + T {E1 = E2 + T; printf(%d\n, E1)}

visualizar en pantalla el valor del atributo de la regla que, en el


ejemplo, sern los valores 45 y 65

Si slo se deseara que apareciera el valor resultante global,

podra aadirse una nueva regla S E y pasar el printf de


la regla 1 a esta otra:
S E { printf(%d\n, E); }
E1 E2 + T {E1 = E2 + T; }

Glvez Rojas Sergio y Mora Mata Miguel ngel.

JAVA A TOPE: TRADUCTORES Y COMPILADORES


CON LEX/YACC, JFLEX/CUP Y JAVACC.
Universidad de Malaga, 2005.

Potrebbero piacerti anche