27
Procesadores de Lenguajes Ingeniería Técnica superior de Ingeniería Informática Departamento de Lenguajes y Sistemas informáticos Javier Vélez Reyes [email protected] Departamento de Lenguajes Y Sistemas Informáticos UNED Análisis semántico I Traducción dirigida por la sintaxis

Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

  • Upload
    ngotruc

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 2: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 3: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 4: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 5: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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?

Page 6: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 7: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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;

Page 8: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 9: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 10: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 11: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 12: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 13: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 14: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 15: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 16: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 17: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 18: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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>>

Page 19: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 20: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 21: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 22: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

examen junio 2ª semana 2012

expresion1

expresion2 expresion3=

ids

idsids

lvalue

lvalue

tipo

tipo

Page 23: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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 :}

Page 24: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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

Page 25: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

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 +’ :}

Page 26: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa
Page 27: Análisis semántico I - DEPARTAMENTO INFORMÁTICA · Analizador léxico  Analizador sintáctico. S. Analizador semántico. ... código fuente corresponde a un programa

1ª semana junio 2015