Upload
ngotruc
View
232
Download
0
Embed Size (px)
Citation preview
Procesadores de LenguajesIngeniería Técnica superior de Ingeniería Informática
Departamento de Lenguajes y Sistemas informáticos
Javier Vélez [email protected]
Departamento de Lenguajes Y Sistemas InformáticosUNED
Análisis semántico ITraducción dirigida por la sintaxis
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisObjetivos Generales
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
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisÍndice
Í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
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?A
naliz
ador
léxi
co
Ana
lizad
or s
intá
ctic
o
Ana
lizad
or
sem
ánti
co
Códi
go in
term
edio
Códi
go fi
nal
e · l · i · h · w <WHILE, PR> S
WHILE E DO S
E > E
S
WHILE E DO S
E > E
√ 0000 0011 0000 00110100 00010100 00000001 0010…
While ( a > b ) doa := a + 1;
Etapa de análisis Etapa de síntesis
LD a t1LD b t2GRT t3 t1 t2BRZ t3 L1 …
¿Cómo es el lenguaje?Las dos primeras fases conceptuales de uncompilador atienden a responder lapregunta de cómo es un lenguaje entérminos de su estructura sintáctica y suselementos léxicos constituyentes
¿Qué es el lenguaje?Las tres fases subsiguientes tratan de darun significado único, preciso y computablea cada construcción del lenguaje demanera que el programador sepa definirprogramas semánticamente útiles ycoherentes
Tema 2 Tema 3 - 5 Tema 6 - 7 Tema 8 - 9 Tema 10 - 11
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?
PROGRAM BubbleSort;
CONST MAX = 100;TYPE TVector = ARRAY [1..MAX] OF INTEGER;VAR v: TVector;
PROCEDURE ReadVector (VAR v : TVector); ...PROCEDURE Sort (VAR v : TVector, size : INTEGER);VAR i, j, tmp : INTEGER;BEGINFOR i := size - 1 DOWNTO 1 DOFOR j := 1 TO i DOIF (v[j] > v[j + 1]) THEN
BEGIN tmp := v[j];v[j] := v[j + 1];v[j + 1] := tmp;
END; END;
BEGINReadVector (v);sort (v, MAX);
END.
El análisis sintáctico de un código fuente comprueba que la secuencia de tokens llegada desde elanalizador léxico se corresponde con la esperada de acuerdo a las prescripciones gramaticales y seobtiene como resultado un árbol de análisis sintáctico. Hemos obtenido por tanto una secuenciacorrecta de tokens pero nada sabemos acerca de qué significado intencional subyace a la misma
Sabemos comprobar que estecódigo fuente corresponde a unprograma en Pascal de acuerdo ala gramática del lenguaje. Pero,¿que significan la declaración deconstantes, tipos, variables,funciones y procedimientos, lassentencias, expresiones, etc. queen él aparecen?
Procesadores de lenguaje – Tema 4: Análisis semánticoSalvador Sánchez, Daniel Rodríguez
Introducción
• Errores semánticos de un programa:– Conversiones de tipos no permitidas
int x;x = 4.32;Error: Ej1.java [6:1] possible loss of precision
– Variables usadas y no definidas– Operandos de tipos no compatibles
if (x || 5) x = 0;Error: Ej2.java [7:1] operator || cannot be applied to int,int
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?Es necesario definir computacionalmente la semántica de un lenguaje para que el compilador sepainterpretar cada posible código fuente del mismo. La forma más sencilla de hacer esto es asociar acada posible construcción gramatical ciertas reglas que permitan traducirla en términos computables.Esto sólo es posible si se cumple el principio de traducción dirigido por la sintaxis
Traducción dirigida por la sintaxis
El significado de una construcción de un lenguaje está directamente
relacionado con su estructura sintáctica según se representa en su árbol de
análisis
Es decir, el significado de cada construccióngramatical, representada típicamente por un noterminal, solo debe depender de los elementosque aparecen en la parte derecha de susreglas de producción
La lectura práctica que debe hacerse de esteprincipio es que para establecer la semánticade un lenguaje es suficiente con hacerlo sobrecada una de sus reglas de producción demanera independiente. Esto a su vez seconsigue estableciendo una traducción de loselementos de la parte derecha de la regla auna representación con un significadocomputable específico
DeclaraciónTipo ::= TYPE ID = ARRAY [N..N]
OF Tipo;
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?Es necesario definir computacionalmente la semántica de un lenguaje para que el compilador sepainterpretar cada posible código fuente del mismo. La forma más sencilla de hacer esto es asociar acada posible construcción gramatical ciertas reglas que permitan traducirla en términos computables.Esto sólo es posible si se cumple el principio de traducción dirigido por la sintaxis
Traducción dirigida por la sintaxis
El significado de una construcción de un lenguaje está directamente
relacionado con su estructura sintáctica según se representa en su árbol de
análisis
Las traducciones con significado computacional especifico a las que antes hacíamos referencia sepueden clasificar en 2 grandes grupos dependiendo del momento en que se aplican dentro del ciclo decompilación
Tipos de acciones de traducción
semántica
Tiempo de compilación (semántica estática)
Tiempo de ejecución (semántica dinámica)
Las traducciones en tiempo de compilación son acciones que seaplican sobre los artefactos del compilador y que tienen efectodurante el proceso de compilación
Las traducciones en tiempo de ejecución son acciones dirigidasa generar código ejecutable en tiempo de compilación para quese apliquen durante la ejecución del programa compilado
Tema 7
Tema 8, 9
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?
CONST MAX = 100; Registrar MAX comoconstante entera de valor100
Traducción semánticaConstrucción sintactica
Tipo Ejemplo Tiempo de compilación Tiempo de ejecución
Declaración de constantes
TYPE TVector = ARRAY [1..MAX] OF INTEGER;Declaración de tipos
Registrar TVector como tipoARRAY de tamaño 100 y baseINTEGER
VAR v : TVector;Declaración de variables
Comprobar que TVectorexiste como un tipo yregistrar v como una variablede ese tipo
–
–
–
PROCEDURE Sort (VAR v : TVector);Declaración de procedimientos
Registrar Sort como unprocedimiento del ámbito encurso indicando la lista detipos de los parámetros.Crear un nuevo ámbito yregistrar en él v comovariable de tipo TVector
–
Es necesario definir computacionalmente la semántica de un lenguaje para que el compilador sepainterpretar cada posible código fuente del mismo. La forma más sencilla de hacer esto es asociar acada posible construcción gramatical ciertas reglas que permitan traducirla en términos computables.Esto sólo es posible si se cumple el principio de traducción dirigido por la sintaxis
Traducción dirigida por la sintaxis
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?Es necesario definir computacionalmente la semántica de un lenguaje para que el compilador sepainterpretar cada posible código fuente del mismo. La forma más sencilla de hacer esto es asociar acada posible construcción gramatical ciertas reglas que permitan traducirla en términos computables.Esto sólo es posible si se cumple el principio de traducción dirigido por la sintaxis
Traducción semánticaConstrucción sintactica
Tipo Ejemplo Tiempo de compilación Tiempo de ejecución
Function Sort (VAR v : TVector):INTEGER;Declaración de funciones
Adicionalmente al caso deprocedimientos registrar queel tipo de retorno es INTEGER
–
v[j] > v[j + 1]Expresiones Comprobar que v estadeclarado previamente y quees de tipo TVector.Asegurarse de que las sub-expresiones son correctas yde tipos compatibles con eloperador mayor que
Generar código pararecuperar de memoria elvalor de las sub-expresionesy aplicar la comparaciónentre ambos con losoperadores del lenguaje debajo nivel
Sentencia For FOR j := 1 TO i DO...
Comprobar que la expresión1 e i son de tipo INTEGER.Comprobar que j ha sidopreviamente declarada comouna variable de tipo INTEGER
Generar código parainicializar j a 1. Generarcódigo de salto para iterarla ejecución del bloquedentro de FOR i veces.Generar código paraactualizar a cada paso elvalor de j a j + 1
Traducción dirigida por la sintaxis
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisIntroducción
¿Qué es la semántica de un lenguaje?
Traducción semánticaConstrucción sintactica
Tipo Ejemplo Tiempo de compilación Tiempo de ejecución
Sentencia If IF (v[j] > v[j + 1]) THEN BEGIN tmp := v[j];v[j] := v[j + 1];v[j + 1] := tmp;
END;
Comprobar que la expresiónde comparación essemánticamente correcta(ver anterior) y comprobarque su evaluación devuelveun tipo lógico
Generar código paraevaluar la expresióndurante la ejecución.Generar código de salto queejecute el bloque THEN si laevaluación da TRUE enejecución
Sentencia de asignación
tmp := v[j]; Comprobar que tmp estadefinido. Comprobar que eltipo de base de v escompatible con el de tmp
Generar código paraevaluar el valor de v[j] ycopiar su valor en laposición de memoriaapuntada por tmp
Sentencia de llamada a
procedimiento
sort (v, MAX); Comprobar que Sort estadeclarado como procedi-miento y que el número,orden y tipo de losparámetros actuales yformales coinciden
Generar código paragestionar memoria quepermita la activación delprocedimiento Sort.Generar código de saltopara su ejecución
Es necesario definir computacionalmente la semántica de un lenguaje para que el compilador sepainterpretar cada posible código fuente del mismo. La forma más sencilla de hacer esto es asociar acada posible construcción gramatical ciertas reglas que permitan traducirla en términos computables.Esto sólo es posible si se cumple el principio de traducción dirigido por la sintaxis
Traducción dirigida por la sintaxis
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisFormalismos para la especificación de traducciones
Especificación de traducciones dirigidas por la sintaxisUna vez entendido el proceso de traducción dirigida por la sintaxis que nos permite conferir semántica alas construcciones de un lenguaje, necesitamos mecanismos formales y tecnológicos para especificardicha traducción de manera precisa
Formalismos para la especificación de traducciones dirigidas por la sintaxis
I. Definiciones dirigidas por la sintaxis
Las definiciones dirigidas por la sintaxis son un mecanismo de alto nivelque permite expresar la semántica asociada a las construcciones de unlenguaje en términos de una colección de reglas semánticas asociadasa cada regla de producción gramatical
II. Esquemas de traducción dirigidos por la sintaxis
Los esquemas de traducción dirigidos por la sintaxis permiten insertar,entre los símbolos gramaticales de la parte derecha de las reglas deproducción, acciones semánticas cuyo propósito es realizar ciertatraducción de carácter semántico. La ventaja de esta aproximación esque aquí se prescribe el momento exacto de la compilación en el quecada acción es ejecutada n
E
E
+ E
{::} n {::}
{::}
R1. E ::= E + E , Rs1
R2. E ::= n , Rs2
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
Elementos de las definiciones dirigidas por la sintaxis
declaracion ::= lVariables : tipo
lVariables ::= lVariables1 , ID
lVariables ::= ID
tipo ::= INTEGER ;
tipo ::= REAL ;
lVariables.tipo := tipo.tipo
lVariables1.tipo := lVariables.tipo
<<registrar ID como variable de tipo tipo>>
<<registrar ID como variable de tipo tipo>>
tipo.tipo := “ENTERO”
tipo.tipo := “REAL”
I. Gramática con atributos II. Reglas semánticasA cada no terminal se asocian un conjunto deatributos para contener determinada informaciónsemántica que será utilizada en otras reglas deproducción
declaracion []
lVariables [tipo]
tipo [tipo]
Las reglas semánticas se encargan de transferirla información de unos atributos a otros yaplican acciones de traducción de caráctersemántico
lVariables1.tipo := lVariables.tipo
<<registrar ID como variable de tipo tipo>>
Reglas semánticasReglas de producción
atributo
Subíndice de diferenciación
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
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
I. Atributos sintetizados
Se dice que un atributo es sintetizado si su valor es calculadoexclusivamente a partir de atributos de los símbolos gramaticales de laparte derecha de sus reglas de producción. El carácter sintetizado de unatributo se mantiene a lo largo de toda la gramática
tipos de atributos II. Atributos heredados
Se dice que un atributo es heredados si su valor es calculado a partir deatributos de los símbolos gramaticales de las regla de producción en queaparece o de los antecedentes de las misma. El carácter heredado deun atributo se mantiene a lo largo de toda la gramática
A.a := f (B.b, C.c, D.D)
A
B C Db c d
a
B.b := f (A.a, C.c, D.D)
A
B C Db c d
a
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
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
I. Reglas de ecuaciones de atributos
Las reglas de ecuaciones de atributos se utilizan para copiar, mover otransformar la información soportada por los atributos asociados a lossímbolos de una regla hacia los atributos asociados a los símbolos noterminales de otra u otras reglas. Para concatenar valores de tipocadena se usa el operador ||
tipos de reglas
semánticas
II. Reglas de acción semántica
Las reglas de acción semántica son instrucciones o pseudo-insstrucciones que se utilizan para provocar algún efecto semánticosobre la traducción. Dado sus posibles efectos colaterales deben serevitadas en la medida de lo posible.
lVariables1.tipo := lVariables.tipo
<<registrar ID como variable ...>>
No terminal Terminal o No terminal
asignación
atributo
Procesadores de lenguaje – Tema 4: Análisis semánticoSalvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Ejemplo
E.val = T.valE T
E0.val = E1.val + T.valE E + T
print(E.val)L E n
F.val = E.valF (E)
T.val = F.valT F
T0.val = T1.val * F.valT T * F
F.val = digito.valor_lexicoF digito
Regla semánticaRegla gramatical
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
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
Algoritmo de cálculo
Para cada producción A ::= X1 X2 ... Xn
Crear un nodo por cada atributo Xi.aj de cada símbolo
Para cada regla semántica de la forma Xi.aj = f (... , Xk.al, ...)
Para cada k y cada l
Crear arco desde Xk.al hasta Xi.aj
Unir todos los grafos resultantes
B.b := f (A.a, C.c, D.D)
A
B C Db c d
a
A.a := f (B.b, C.c, D.D)
A
B C Db c d
a
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
Grafos de dependencias
a, b : INTEGER;declaracion ::= lVariables : tipo
lVariables ::= lVariables1 , ID
lVariables ::= ID
tipo ::= INTEGER ;
tipo ::= REAL ;
lVariables.tipo := tipo.tipo
lVariables1.tipo := lVariables.tipo
<<registrar ID como variable de tipo tipo>>
<<registrar ID como variable de tipo tipo>>
tipo.tipo := “ENTERO”
tipo.tipo := “REAL”declaración
lVariables tipo
INTEGERID
:
lVariables ,
ID
.tipo.tipo
.tipo
“ENTERO”“ENTERO”
“ENTERO”
El grafo de dependencias pone demanifiesto que para registrar lasvariables a y b es necesario recuperar lainformación de tipo extraída de la reglatipo ::= INTEGER y moverla sobre elárbol de análisis sintáctico hasta lasreglas con ID. Para ello se utiliza elatributo tipo en cada no terminal y lasreglas semánticas adjuntas
lVariables.tipo [Heredado]tipo.tipo [sintetizado]
<<registrar ID con tipo>>
<<registrar ID con tipo>>
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
Diseño de definiciones dirigidas por la sintaxisEl diseño de definiciones dirigidas por la sintaxis es un ejercicio complejo que requiere realizarsecuidadosa y sistemáticamente. A continuación proporcionamos un procedimiento orientativo quepuede ayudar a alcanzar más fácilmente este objetivo
I. Especificación gramaticalConstruya la gramática sobre la cual deseaarticular la definición dirigida por la sintaxis.Asegúrese de que esta gramática es correcta yno ambigua
II. Selección de una frase representativaSeleccione una frase del lenguaje. Asegúrese deque es lo suficientemente compleja como paraque implique visitar al menos una vez cada reglagramatical
III. Construcción del árbol de análisisConstruya el árbol de análisis sintáctico asociadoa dicha frase. Asegúrese de que existe al menosuna instancia de cada regla
IV. Selección de atributosDefina los atributos semánticos que requerirá sudefinición en cada símbolo gramatical ycaracterícelos como sintetizados o heredados.Esto último se puede postergar para el final
V. Grafo de dependenciasDibuje el grafo de dependencias que deberíaproducirse para asegurar que la informaciónfluya adecuadamente. Considere siempre unprocesamiento descendente
VI. Especificación de la definiciónEscriba las reglas semánticas necesarias , con elnivel de abstracción oportuno, para garantizarque se satisface el grafo de dependencias.Incluya las reglas de acción pertinentes
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
EjemploSe pretende construir una calculadora que permitaescribir expresiones aritméticas y calcular su valorasociado
E ::= E + T | E – T | T
T ::= T * F | T / F | F
F ::= ( E ) | n
2 + 3 * 5
E
T
F
E +
FT *
n
nF
T
n
E.value [Sintetizado]T.value [Sintetizado]F.value [Sintetizado]n.value [Sintetizado]
E
T
F
E +
FT *
nF
T
n
.value
n
.value
.value
.value
.value
.value
.value
.value
2
2
2
3
15
5
53
3
2= 17
E ::= E + T E.value := E.value + T.value
E ::= E – T E.value := E.value - T.value
E ::= T E.value := T.value
T ::= T * F T.value := T.value * F.value
T ::= T / F T.value := T.value / F.value
T ::= F T.value := F.value
F ::= ( E ) F.value := E.value
F ::= n F.value := n.value
.value
.value
.value
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisDefiniciones dirigidas por la sintaxis
Definiciones dirigidas por la sintaxisLas definiciones dirigidas por la sintaxis (DDS) son un formalismo de alto nivel que permite asociar acada regla de producción gramatical una regla semántica descrita, principalmente, en términos de unatransformación de ciertos atributos asociados a cada no terminal de la gramática.
Ejercicios
E ::= E + T | E – T | T
T ::= T * F | T / F | F
F ::= ( E ) | n
A continuación se muestra una gramática deoperadores no ambigua. Especifique sobre ellauna DDS para pasar expresiones aritméticas infijasa notación postfija
La siguiente gramática corresponde a ladeclaración de variables es Pascal. Especifiquesobre ella una DDS para traducir dichasdeclaraciones a sintaxis C
declaracion ::= lVariables : tipo
lVariables ::= lVariables1 , ID
lVariables ::= ID
tipo ::= INTEGER ;
tipo ::= REAL ;
B ::= D B | D
D ::= 0 | 1
La siguiente gramática representa númerosbinarios. Defina una DDS que traduzcacualquier binario colocando todos los 0 delantey todos los 1 detrás. Por ejemplo 01101 setraduce a 00111
N ::= D N | D
D ::= 0 | 1 | 2 | 3 | 4
5 | 6 | 7
La siguiente gramática se utiliza pararepresentar números en octal. Constrúyase unaDDS para obtener su traducción equivalente enbase 10
examen junio 2ª semana 2012
expresion1
expresion2 expresion3=
ids
idsids
lvalue
lvalue
tipo
tipo
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisEsquemas de traducción dirigidos por la sintaxis
Esquemas de traducción dirigidos por la sintaxisLas definiciones dirigidas por la sintaxis son formalismos abstractos de traducción de alto nivel y portanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semántica debeejecutarse. Una versión computacional que soluciona este problema son los esquemas de traduccióndirigidos por la sintaxis
Elementos de las traducciones dirigidas por la sintaxis
I. Gramática con atributos II. Acciones semánticasComo en las definiciones dirigidas por la sintaxis,los esquemas de traducción también seconstruyen sobre gramáticas con atributos
E [trad]
E’ [trad]
T [trad]
num [lexema]
Las acciones semánticas se insertan entre lossímbolos gramaticales de la parte derecha decada regla y, cuando se visitan durante laconstrucción del árbol de análisis sintáctico,realizan los traducciones semánticas pertinentes
E ::= T {: E’.trad := T.trad :} E’ {: E.trad := E’.trad :}
E’ ::= + T {: E’1.trad := E’.trad || T.trad || “+” :} E’1 {: E’.trad := E’1.trad :}
E’ ::= - T {: E’1.trad := E’.trad || T.trad || “-” :} E’1 {: E’.trad := E’1.trad :}
E’ ::= ε {: E’.trad := E’.trad :}
T ::= num {: T.trad := num.lexema :}
Reglas de producciónSubíndice de diferenciación
Acción semántica
Atributo
E ::= T {: E’.trad := T.trad :}
E’ {: E.trad := E’.trad :}
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisEsquemas de traducción dirigidos por la sintaxis
Esquemas de traducción dirigidos por la sintaxisLas definiciones dirigidas por la sintaxis son formalismos abstractos de traducción de alto nivel y portanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semántica debeejecutarse. Una versión computacional que soluciona este problema son los esquemas de traduccióndirigidos por la sintaxis
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
E ::= T {: E’.trad := T.trad :} E’ {: E.trad := E’.trad :}
Cada acción semántica se insertaen el lugar adecuado para quesea ejecutada en el momentopreciso durante la construccióndel árbol de análisis sintáctico
El contenido de la acción seexpresa, frecuentemente, en ellenguaje de programaciónanfitrión del compilador que seestá construyendo
Como en las DDS, las accionessemánticas frecuentementerealizan operaciones demanipulación de atributos perotambién puede llevar acabooperaciones con potencialesefectos colaterales
Javier Vélez Reyes [email protected]
Análisis semántico. Traducción dirigida por la sintaxisEsquemas de traducción dirigidos por la sintaxis
Esquemas de traducción dirigidos por la sintaxisLas definiciones dirigidas por la sintaxis son formalismos abstractos de traducción de alto nivel y portanto adolecen de un mecanismo para indica el momento exacto en el que cada regla semántica debeejecutarse. Una versión computacional que soluciona este problema son los esquemas de traduccióndirigidos por la sintaxis
EjemploE
T E’{: E’.trad := ‘9’ :} {: E.trad := ‘9 5 – 2 +’ :}
num(9)
{: T.trad := ‘9’ :} - T E’{: E’1.trad := ‘9 5 -’ :} {: E’.trad := ‘9 5 – 2 +’ :}
num(5)
{: T.trad := ‘5’ :} + T E’{: E’1.trad := ‘9 5 – 2 +’ :} {: E’.trad := ‘9 5 – 2 +’ :}
num(2)
{: T.trad := ‘2’ :} ε {: E’.trad := ‘9 5 – 2 +’ :}
1ª semana junio 2015