compiladores

Páginas: 35 (8666 palabras) Publicado: 13 de marzo de 2014
Traductores, Compiladores e Intérpretes

1

Tema 4
Gramáticas Atribuidas.
Además de comprobar que un programa cumple con las reglas de la gramática , hay que
comprobar que lo que se quiere hacer tiene sentido. El análisis semántico dota de un significado
coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que
los tipos estén correctos, por ejemplono podemos multiplicar una cadena de caracteres por un
entero.
Veamos un ejemplo para tener una visión global de este tema. Supongamos que queremos
hacer una pequeña calculadora que realiza las operaciones + y * . La gramática será la siguiente:

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

| NUM

Queremos calcular:

33 + 12 + 20

Los pasos que seguiremos serán:
1. Análisis Léxico. (Convertimosla cadena en una secuencia de tokens con PCLEX).
33 + 12 + 20




NUM

+

NUM

+

NUM

2. Análisis Sintáctico

Hemos conseguido hacer el árbol sintáctico, esto quiere decir que es sintácticamente
correcto.
El siguiente paso es saber que resultado nos da la operación, para ello hemos enumerado
las reglas en el orden en el que se han reducido. El orden en el que van aplicandolas
reglas nos da el parse derecho.
Gramáticas Atribuidas

Realizados por: María del Mar Aguilera Sierra y Sergio Gálvez Rojas

Traductores, Compiladores e Intérpretes

2

Gramáticas Atribuidas.
El hecho de que las reglas de producción esté muy cercano a la semántica que va a
reconocer, podemos aprovecharlo.
Para ello vamos a asociar unos valores a los Terminales y No Terminales de lagramática.
A los Terminales le asociaremos ese valor mediante el análisis léxico, de la siguiente
forma:
[0 - 9]+ {Convierto yytext en un entero;
return NUM}
Por lo tanto lo que le llegará al analizador sintáctico es:
NUM .33 +. _ NUM .12 +._ NUM .20
Vamos a ver qué uso podría hacerse de éstos atributos para que, a medida que se hace el
reconocimiento sintáctico, ir construyendo elresultado a devolver.

Vemos como con las asociaciones de valores y las asociaciones de acciones semánticas
a las reglas de producción, podemos evaluar el comportamiento de un programa, es decir,
generamos código.

Ú E +T
|T
T ÚT *F
|F
FÚ(E)
E1

2

1

2

| NUM

ACCIONES SEMÁNTICAS
{E1 = E2 + T;}
{E1 = T;}
{T1 = T2 + F;}
{T1 = F;}
{F = E;}
{F = NUM;}

Estas acciones se debenejecutar cada vez que se reduce sintácticamente por la regla
asociada.

Gramáticas Atribuidas

Realizados por: María del Mar Aguilera Sierra y Sergio Gálvez Rojas

Traductores, Compiladores e Intérpretes

3

Gramáticas Atribuidas.
¿Cómo funciona esto realmente? A través de la pila .. En . se guardan estados,
símbolos y valores, de esta forma el proceso es el siguiente
Antes soloponíamos en la pila
(estados y símbolos)
S1
F
S0

S1
NUM
S0

S3
12
T
S2
.....
+
S1
33
F
S0

S1
NUM
S0

......
S1
45
E
S0

S1
65
E
S0

Ahora añadimos los valores
(estados , símbolos y valores)

De forma que no solo hemos
construido el árbol sintáctico sino que
además sabemos cual es el resultado
de la operación que hemos realizado

El ATRIBUTO es el campoasociado a un terminal o a un no terminal.
Como ACCIÓN SEMÁNTICA no solo se puede poner una asignación o atributo,
puedo además añadir código.

ÚE

E1

2

+T

{E1 = E2 + T; printf(E1)}

Esto se ejecuta una vez por cada reducción. Si queremos que se ejecute una sola vez:

ÚE
Ú E +T

S
E1

{printf(E1);}
{E1 = E2 + T;}

1

2

Hay dos formas de asociar reglas semánticas conreglas de producción:
Definición dirigida por sintaxis: A

Ú cdB {A = c + d}

Esquema de traducción: En éste es posible intercalar funciones entre el consecuente de
la regla de producción. A c d {A = c + d} B. Esta regla se ejecuta en el momento en
que se transita de un estado a otro.

Ú

Gramáticas Atribuidas

Realizados por: María del Mar Aguilera Sierra y Sergio Gálvez Rojas...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Compiladores
  • Compilador
  • COMPILADORES
  • Compiladores
  • Compiladores
  • Compiladores
  • compiladores
  • Compiladores

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS