Professional Documents
Culture Documents
Análisis semántico I
Traducción dirigida por la
sintaxis
Objetivos Generales
› Aprender qué es la semántica de un lenguaje de programación
› Entender cómo funciona la semántica operacional y distinguirla de otros tipos de semántica
› Aprender cómo se inyecta información semántica en una gramática
› Aprender el principio de traducción dirigido por la sintaxis
› Conocer las gramáticas con atributos y las reglas y acciones semánticas
› Aprender a distinguir los diferentes tipos de atributos que existen
› Aprender a construir y analizar grafos de dependencia
› Aprender a identificar compiladores de simple y doble pasada
› Conocer los distintos tipos de formalismos de traducción que existen
› Aprender a especificar definiciones dirigidas por la sintaxis
› Aprender a especificar esquemas de traducción dirigidos por la sintaxis
Índice
› Introducción
› Formalismos para la especificación de traducciones
› Definiciones dirigidas por la sintaxis
› Reglas semánticas
› Atributos
› Grafos de dependencia
› Diseño de definiciones dirigidas por la sintaxis
› Gramáticas con atributos por la izquierda
› Esquemas de traducción dirigidas por la sintaxis
› Acciones semánticas
› Atributos
› Diseño de esquemas de traducción
› Traducción dirigida por la sintaxis en la práctica
› Bibliografía
While ( a > b ) do
a := a + 1;
Analizador sintáctico
Código intermedio
Analizador léxico
Código final
Analizador
semántico
e·l·i· h·w <WHILE, PR> S
√S LD a t1 0000 0011
WHILE E DO S WHILE E DO S LD b t2 0000 0011
GRT t3 t1 t2 0100 0001
E > E E > E
BRZ t3 L1 … 0100 0000
0001 0010
…
BEGIN
ReadVector (v);
sort (v, MAX);
END.
Es decir, el significado de cada construcción La lectura práctica que debe hacerse de este
gramatical, representada típicamente por un no principio es que para establecer la semántica
terminal, solo debe depender de los elementos de un lenguaje es suficiente con hacerlo sobre
que aparecen en la parte derecha de sus cada una de sus reglas de producción de
reglas de producción manera independiente. Esto a su vez se
consigue estableciendo una traducción de los
DeclaraciónTipo ::= TYPE ID = ARRAY [N..N] elementos de la parte derecha de la regla a
OF Tipo;
una representación con un significado
computable específico
Las traducciones con significado computacional especifico a las que antes hacíamos referencia se
pueden clasificar en 2 grandes grupos dependiendo del momento en que se aplican dentro del ciclo de
compilación
Tiempo de compilación (semántica estática)
Las traducciones en tiempo de compilación son acciones que se Tema 7
aplican sobre los artefactos del compilador y que tienen efecto
Tipos de acciones durante el proceso de compilación
de traducción Tiempo de ejecución (semántica dinámica)
semántica
Las traducciones en tiempo de ejecución son acciones dirigidas Tema 8, 9
a generar código ejecutable en tiempo de compilación para que
se apliquen durante la ejecución del programa compilado
Atributos
Un atributo es un espacio de información con tipificación implícita que sirve
para albergar una característica propia del proceso de traducción y que
puede ser transferida a otras producciones gramaticales para que pueda
ser utilizada desde allí por sus reglas semánticas
Reglas semánticas
Una regla semántica es una expresión formal asociada a una regla de
producción que permite definir la semántica de la construcción gramatical
asociada a la misma en términos de los símbolos de la regla de producción
Las reglas de ecuaciones de atributos se utilizan para copiar, mover o lVariables1.tipo := lVariables.tipo
transformar la información soportada por los atributos asociados a los
símbolos de una regla hacia los atributos asociados a los símbolos no No terminal Terminal o
tipos de terminales de otra u otras reglas. Para concatenar valores de tipo No terminal
reglas cadena se usa el operador ||
semánticas asignación
Grafos de dependencias
Un grafo de dependencias refleja, sobre un árbol de análisis sintáctico las
dependencias entre los atributos gramaticales establecidas en virtud de las
reglas semánticas que les asignan valor
Grafos de dependencias
Un grafo de dependencias refleja, sobre un árbol de análisis sintáctico las
dependencias entre los atributos gramaticales establecidas en virtud de las
reglas semánticas que les asignan valor
B C D
B.b := f (A.a, C.c, D.D) b c d
Grafos de dependencias
declaracion ::= lVariables : tipo lVariables.tipo := tipo.tipo a, b : INTEGER;
lVariables ::= lVariables1 , ID lVariables1.tipo := lVariables.tipo
lVariables.tipo [Heredado]
<<registrar ID como variable de tipo tipo>> tipo.tipo [sintetizado]
lVariables ::= ID <<registrar ID como variable de tipo tipo>>
tipo ::= INTEGER ; tipo.tipo := “ENTERO”
declaración
tipo ::= REAL ; tipo.tipo := “REAL”
Ejemplo
Se pretende construir una calculadora que permita E.value [Sintetizado]
T.value [Sintetizado]
escribir expresiones aritméticas y calcular su valor
F.value [Sintetizado]
asociado n.value [Sintetizado]
Ejercicios
A continuación se muestra una gramática de La siguiente gramática representa números
operadores no ambigua. Especifique sobre ella binarios. Defina una DDS que traduzca
una DDS para pasar expresiones aritméticas infijas cualquier binario colocando todos los 0 delante
a notación postfija y todos los 1 detrás. Por ejemplo 01101 se
traduce a 00111
E ::= E + T | E – T | T
T ::= T * F | T / F | F B ::= D B | D
F ::= ( E ) | n D ::= 0 | 1
a, b : INTEGER; “ENTERO”
“ENTERO”
“ENTERO”
lVariables .tipo , ID INTEGER
<<registrar ID con tipo>>
A
La información fluye de arriba abajo, de
de abajo a arriba y de izquierda a
derecha pero nunca de derecha a
izquierda
X1 X2 X3
Atributos
Un atributo es un espacio de información con tipificación explícita que sirve
para albergar una característica propia del proceso de traducción y que
puede ser transferida a otras producciones gramaticales para que pueda
ser utilizada desde allí por sus reglas semánticas
Acción semántica
Una acción semántica es un fragmento de código ejecutable, insertado en
algún punto de la parte derecha de una regla de producción, encargado de
realizar cierta lógica de traducción a partir de la información soportada por
los atributos de los símbolos gramaticales de dicha regla
Cada acción semántica se inserta El contenido de la acción se Como en las DDS, las acciones
en el lugar adecuado para que expresa, frecuentemente, en el semánticas frecuentemente
sea ejecutada en el momento lenguaje de programación realizan operaciones de
preciso durante la construcción anfitrión del compilador que se manipulación de atributos pero
del árbol de análisis sintáctico está construyendo también puede llevar acabo
operaciones con potenciales
efectos colaterales
Ejemplo
E
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
incluir en cada clase no terminal a tenor del public TemporalIF getTemporal () {...}
esquema de traducción que está articulando public void setTemporal (TemporalIF temporal) {...}
...
}
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
Consúltese el documento
Esquemas de traducción en la práctica directrices de implementación
El siguiente paso para construir el compilador es articular en cup un esquema de traducción dirigido por
la sintaxis. Esta herramienta ya provee un mecanismo para llevar esto a cabo. A continuación damos la
secuencia de pasos que deben realizarse
Asignación de reducción
Al hacer esta asignación el objeto en la expresión de la parte derecha del
igual se asigna como contenedor de información del no terminal del
antecedente. Asegúrese de que el tipo de esta expresión es compatible
con el declarado en la sección de no terminales para el antecedente
Material de estudio
Bibliografía básica
Material de estudio
Bibliografía complementaria