Академический Документы
Профессиональный Документы
Культура Документы
Profesor:
Juan Antonio Román
2002
1
7.-Análisis semántico
Será la especificación del código del traductor. En él quedarán integradas las acciones
tanto para el análisis semántico como la traducción a cuartetos.
Es ahora el momento de utilizar los atributos. En general, se necesitan dos clases de
atributos:
• nombre, para contener el lexema (string) de los identificadores, o de los números
enteros, o el carácter de un operador.
2
• Tipo, para la comprobación de unicidad y de tipos.
Declaraciones
D id L
L , id L1 | TI
TI ent | real
Usando ATR SINT se podrá añadir el tipo después de visitar L y D subiendo por el
árbol por la derecha, cuando ya se dispone de los atributos sintetizados:
• Para L : id.e (b) y L1t
• Para D : id.e (a) y Lt
id Id.e
, id id.e
L1 L1.t
b
TI TI.t
ent
3
Pero además de lo anterior hay que incluir el análisis semántico de si el identificador en
cuestión ha sido ya declarado o no ¿Cómo? Simplemente leyendo su tipo en la TDS, si
es diferente de cero es que ha sido ya declarado con anterioridad y ha de emitirse un
error semántico. Sólo si el tipo es cero podrá actualizarse el tipo declarado en la TDS
para el identificador en cuestión.
Sentencias de asignación
Se utilizarán ATR SINT
S F asigna E
Sean cuales fueren los subárboles que penden de F y de E, cuando se recorra el árbol en
profundidad, al ascender por la derecha estaremos llevando sus ATR SINT.
F.t
F
No ok
F.n
E.t
E
Error
E.n semántico
Expresiones aritméticas
E’t
tmp2 Comp. tipos
E’hn cuarteto
Tn E’ht
T Tt E’
E’1n
T’hn E’1hn E’1t
T’n Tn
Fn T’ht T’t Tt E’1ht
F T’ opsr MAS T E’1
F.t
λ
id id.e λ T’hn
id.t F Fn T’
Ft T’ht
tmp1
cuarteto
T’t
Comp..tipos
a id.e
id id.t
Árbol para el ejemplo
T’1n
a+b*c
T’1t
b
Fn T’1hn
opmd MULT F Ft T’1
T’1ht
id id.e λ
id.t
5
En ambos caso ha de generar el correspondiente temporal, guardarlo en la TDS y
generar el cuarteto correspondiente con los siguientes argumentos:
• Operador (‘+’ si atributo es MAS, ‘-‘ si es MEN)
• Parámetro recibido por E’ padre (nombre) (ATR HER).
• Parámetro recibido por E’ hijo (nombre) (ATR SINT).
• Temporal nuevo Ti.
Desde ese momento el atributo nombre será el Ti, que ha de ser copiado como atributo
nombre (ATR SINT ) de E’ padre y pueda ser devuelto por la función.
Lo dicho para E’ es aplicable para T’, pero cambiando opsr ( MAS y MEN como
atributos) por opmd ( MULT y DIV ).
if – then – else
Sea el esquema de la figura adjunta: representa la secuencia de cuartetos en el
orden en que serán generados:
Cv C genera saltos a Cv en caso que se cumpla
Cuartetos de C la condición y a Cf en caso contrario.
Cf Cv será asignada al primer cuarteto de los
Cv: Cuartetos de S1
que se generen para S1 y Cf para el primer
cuarteto de los que se generen para S2.
goto Sf
Cuando se termine la generación de S1 se
Cf: Cuartetos de S2 hace necesario un salto incondicional a Sf
(1º cuarteto después de S2) y es preciso
Sf: asignar Sf al cuarteto1º después de s2.
6
La función C ( ) ha de devolver la etiqueta Cf (ATR SINT), pues ha de ser
entregada como parámetro a la función S( ) para que en ella se asigne la etiqueta
Cf al primer cuarteto de S2 . La función C ( ), además de generar el salto
condicional a Cv y el incondicional a Cf, ha de asignar la etiqueta Cv al primer
cuarteto de S1.
Do –while