Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Documento sobre especificación de traductores con atributos: DDS y EDT, Apuntes de Ingeniería Infórmatica

Cómo especificar traductores con atributos mediante las notaciones dds (descente derecha sin recursividad) y edt (esquemas de traducción). Se abordan conceptos como atributos sintetizados y heredados, procesamiento de tokens, evaluación de atributos durante el análisis sintáctico y la traducción.

Tipo: Apuntes

Antes del 2010

Subido el 28/05/2007

_vivayo_
_vivayo_ 🇪🇸

3.7

(117)

149 documentos

1 / 26

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Gramáticas atribuidas
Preparado por:
J.A.Román
2003
Procesadores de
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Vista previa parcial del texto

¡Descarga Documento sobre especificación de traductores con atributos: DDS y EDT y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

Gramáticas atribuidas

Preparado por: J.A.Román 2003

Índice

1.- INTRODUCCIÓN

2.-TRADUCCIÓN DIRIGIDA POR LA SINTAXIS

2.1.-Notación DDS: Definiciones Dirigidas por la Sintaxis

2.3.- Implantación de un DDS con atributos sintetizados.

2.4.- Notación EDT: Esquemas De Traducción

2.4.1.- Definiciones con atributos por la izquierda

Esquema de lo que se va a tratar en este capítulo:

2.-TRADUCCIÓN DIRIGIDA POR LA SINTAXIS

2.1.-Notación DDS: Definiciones Dirigidas por la Sintaxis

Es una notación formal para especificar las definiciones de las acciones semánticas dirigidas o guiadas por la sintaxis de la gramática. Es una generalización o extensión de las reglas de la gramática.

Esta notación asocia a cada símbolo de la gramática ( nodo u hoja) atributos. Los atributos pueden ser de dos tipos:

  • Sintetizados : se calculan a partir de los valores de los atributos de los hijos.
  • Heredados : se calculan a partir de los valores de los atributos de los padres y / o hermanos.

Esta notación asocia a las producciones de la gramática con reglas semánticas , que establecen un grafo de dependencias entre los atributos del que se obtiene el orden de evaluación de las reglas. La evaluación de las reglas semánticas define los valores de los atributos en los nodos del árbol sintáctico para una entrada determinada.

El formato de las DDS es:

Producciones de la gramática Reglas Semánticas

A F 0 E 0a1 a2 a3 ..... an A.s = f (a1.s, a2.s, ……an.s) ak.h = f (A.h, a1.h,…..)

Cada atributo de un símbolo se representa con el símbolo, un punto y una letra: En la tabla anterior:

  • A.s : es un atributo sintetizado ( .s) del padre A. Depende de los atributos sintetizados de los hijos.
  • ak.h: es un atributo heredado (.h) del símbolo ak. Depende de atributos heredados del padre o de los hermanos.

A veces se utilizan atributos llamados ficticios del no terminal de la parte izquierda de la regla ( por ej: una función de imprimir ).

Ejemplo 1: Escribir una DDS para una calculadora utilizando atributos sintetizados

Sean las producciones para una calculadora que sume, reste, multiplique y divida dígitos.

L F 0E 0 E \n El ANALEX entrega los tokens: d opsr opmd pa ,pc fin

L F 0E 0 E fin E F 0E 0 E + T E F 0E 0 E opsr T E F 0E 0 E - T E F 0E 0 T E F 0E 0 T T F 0E 0 T*F T F 0E 0 T opmd F T F 0E 0 T / F T F 0E 0 F T F 0E 0 F F F 0E 0( E ) F F 0E 0 pa E pc F F 0E 0d F F 0E 0 d

¿ Qué traducción? Calcular las operaciones aritméticas e imprimir el resultado

¿ Qué información? ¿ Quién la proporciona? Operandos : valor de los dígitos... simbolicemos estos atributos con .v Lo proporciona el símbolo d el atributo de d será d.v.

Operadores: opsr para sumar y restar. El atributo tiene que distinguir si es suma o resta. Lo simbolizaremos por .o , es decir : opsr.o. Lo mismo para la multiplicación y la división : opmd.o.

¿ Qué hacer con esa información? Realizar las operaciones e imprimir el resultado

¿ A quién pertenecen los resultados? Las sumas y restas a E , las multiplicaciones y divisiones a T , la impresión del resultado total a L

Siempre se podrá realizar el análisis sintáctico de forma ascendente y al mismo tiempo realizar la traducción con atributos sintetizados.

Las operaciones parciales se realizarán mediante una función a la que se entrega como argumentos los dos operandos y la operación. Las reglas semánticas se asocian :

A la regla E F 0E 0 E opsr T ................. E.v = operación( E.v, T.v , opsr.o) A la regla T F 0E 0 T opmd F ................ T.v = operación( T.v, F.v , opmd.o) A la regla L F 0E 0 E fin ................ atributo ficticio imprime(E.v)

Para responder a las preguntas anteriores nos puede ayudar ponernos un ejemplo

2.2.- Implantación de un DDS con atributos sintetizados.

Es fácil evaluar los atributos sintetizados en un analizador ascendente durante el análisis sintáctico.

Si ampliamos la pila con otra pila en paralelo y asociamos los atributos a sus símbolos, se pueden conservar en ella los valores de los atributos sintetizados. Siempre que hay reducción se calculan los valores de los nuevos atributos sintetizados a partir de los que están en la pila asociados con los símbolos reducidos.

Símbolo / Estado Atributos

X / Sx X.a Y / Sy Y.a Z / Sz Z.a

Se puede modificar el código de un analizador sintáctico ascendente con fragmentos de código que evalúen los atributos

Ejemplo :

Producciones Fragmento de código L F 0E 0 E \n imprime(valor[tope]) E F 0E 0E + T valor[ntope]= valor[tope-2] + valor[tope] E F 0E 0T T F 0E 0 T * F valor[ntope]= valor[tope-2] * valor[tope] T F 0E 0 F F F 0E 0 ( E ) valor[ntope]= valor[tope-1] F F 0E 0 digito

Cuando hay una reducción de r símbolos de la parte derecha de la regla: ntope = tope – r + 1 Después de ejecutar cada fragmento de código: tope = ntope

2.3.- Notación EDT: Esquemas De Traducción

2.3.1.- Definiciones con atributos por la izquierda

Hay una clase de definiciones, las llamadas con atributos izquierdos que siempre se pueden evaluar recorriendo el árbol sintáctico en profundidad.

Se llama orden de evaluación en profundidad el que se obtiene aplicando la función visitaprof(n, nodo) a la raíz de un árbol: Condiciones para ser atributos izquierdos:

  • Cada atributo heredado de xj, siendo 1<= j <= n en A F 0E 0 x1 x2 x3.........xn depende sólo de:
  1. los atributos de los símbolos x1 x2 x3 ...xj-1 ( a la izquierda de xj )
  2. los atributos heredados de A

A los atributos sintetizados no se les pone ninguna restricción. Así pues:

Las definiciones con atributos sintetizados son siempre con atributos izquierdos

EDT : Otra notación para especificar traductores:

  • se asocian atributos con símbolos
  • se insertan entre los símbolos acciones semánticas entre llaves dentro de la parte derecha de las reglas de la gramática
  • indican cuándo se realiza la acción semántica

Con atributos sintetizados:

DDS: T F 0E 0T * F T.v = T.v * F.val

EDT:

T F 0E 0T * F { T.v = T.v * F.val }

Tras leer la declaración, añadir el tipo a los correspondientes id de la lista en la TDS

¿ Qué información? ¿ Quién la proporciona? Los tipos int o real, los atributos T.t = VALORTIPOENTERO , o T.t = VALORTIPOREAL. La posición de la TDS de cada identificador. atributo id.e ¿ Qué hacer con esa información? Llevar la información de tipo a cada uno de los id Añadir el tipo en la TDS a cada id

¿ A quién pertenecen los resultados? Al símbolo donde están los id : L

Se necesitará el atributo ficticio añadetipo(tipo, id.e), una función que escribirá el tipo que da su primer argumento en la posición de la TDS que indica el segundo argumento.

Ejemplo de EDT: Expresiones aritméticas.Calculadora. Traducción: realizar los cálculos

Atributos sintetizados. Analizador ascendente

E F 0E 0 E1 + T { E.v = E1.v + T.v } Las acciones siempre al final E F 0E 0 E1 - T { E.v = E1.v – T.v } (ver ejemplo anterior de DDS) E F 0E 0 T { E.v = T.v} ( 4 + 5 * 6 + 3 ) T F 0E 0 ( E ) { T.v = E.v} T F 0E 0 numero { T.v = valornúmero }

Atributos heredados y sintetizados. Analizador descendente

Ejemplo : 8 – 9 + 3 Después de eliminar la recursividad por la izquierda:

E F 0E 0 T { R.h = T.v } R F 0E 0 +

R {E.v = R.s } T { R1h = R.h + T.v} R1 { Rs= R1s} R F 0E 0 - R F 0E 0λ T { R1h = R.h - T.v}

R1 { Rs= R1s}

T F 0E 0 ( T F 0E 0 numero { T.v = valornumero }

E { T.v = E.v}

Pseudocódigo de un analizador-traductor descendente recursivo

Se ha de tener en cuenta: Un atributo sintetizado es devuelto por la función del símbolo Un atributo heredado es el argumento de la función

Analizador Analizador-traductor

Hasta ahora hemos visto que en las definiciones con atributos izquierdos se evalúan las reglas semánticas siempre con un recorrido en profundidad. Se ha aplicado a dos casos:

  • Evaluación con atributos sintetizados durante un análisis ascendente. ( Reglas al final ).
  • Evaluación con atributos heredados y sintetizados durante un análisis descendente. ( Reglas intercaladas ).

También es posible:

  • Evaluación con atributos sintetizados durante un análisis descendente. ( Reglas al final ).
  • Evaluación con atributos heredados y sintetizados durante el análisis ascendente : - Si el atributo sintetizado se halla en un lugar conocido en la pila y hay en las reglas una copia ATRHER = ATRSINT, utilizándose el atributo sintetizado en vez del heredado. - (^) Si no es posible predecir la posición del atributo sintetizado en la pila se insertan marcadores , trasladándose las acciones al final de las reglas: - Sustituyendo {acción} por un marcador M (símbolo nuevo no terminal) - y añadiendo la regla M F 0E 0 λ {acción}

A veces es posible evaluar con atributos heredados y sintetizados durante el análisis ascendente aunque no sean definiciones con atributos izquierdo si y sólo si se transforma la gramática sustituyendose atributos heredados por sintetizados.