Traducción Dirigidapor Sintaxis

3,514 views

Published on

Explicación y ejemplo de traducción dirigida por sintáxis.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Traducción Dirigidapor Sintaxis

  1. 1. Traducción Dirigida por la Sintaxis Capítulo 5 Sección 5.1 Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  2. 2. Traducción dirigida por la sintaxis <ul><li>Asocia información a la construcción del lenguaje </li></ul><ul><ul><li>Atributos en los símbolos de la gramática </li></ul></ul><ul><li>Definiciones dirigidas por la sintaxis </li></ul><ul><li>Esquemas de traducción </li></ul>
  3. 3. Proceso Cadena de entrada Arbol de análisis sintáctico Grafo de dependencias Orden de evaluación de las reglas semánticas
  4. 4. Definiciones dirigidas por la sintaxis - DDpS <ul><li>Ocultan detalles de la implementación </li></ul><ul><li>Generalizan la gramática </li></ul><ul><li>Símbolos tienen atributos </li></ul><ul><ul><li>Atributos representan cualquier cosa </li></ul></ul><ul><ul><li>Valor de atributo por regla semántica </li></ul></ul><ul><ul><li>Atributo sintetizado: a partir de los hijos </li></ul></ul><ul><ul><li>Atributo heredado: a partir de padre y hermanos </li></ul></ul>
  5. 5. Forma de DDpS <ul><li>Para cada producción A => α </li></ul><ul><ul><li>Reglas semánticas b = f(c 1 ,c 2 ,...,c k ) </li></ul></ul><ul><ul><li>b es atributo sintetizado de A </li></ul></ul><ul><ul><ul><li>c 1 ,c 2 ,...,c k son atributos de simbolos en la producción </li></ul></ul></ul><ul><ul><li>b es atributo heredado </li></ul></ul><ul><ul><ul><li>de algún símbolo del lado derecho (α) </li></ul></ul></ul><ul><ul><ul><li>c 1 ,c 2 ,...,c k son atributos de simbolos en la producción </li></ul></ul></ul>
  6. 6. Ejemplo calculadora <ul><li>Producciones </li></ul><ul><li>L => E n </li></ul><ul><li>E => E 1 + T </li></ul><ul><li>E => T </li></ul><ul><li>T => T 1 * F </li></ul><ul><li>T => F </li></ul><ul><li>F => (E) </li></ul><ul><li>F => dígito </li></ul><ul><li>Reglas semánticas </li></ul><ul><li>Print(E.val) </li></ul><ul><li>E.val = E 1 .val + T.val </li></ul><ul><li>E.val = T.val </li></ul><ul><li>T.val = T 1 .val * F.val </li></ul><ul><li>T.val = F.val </li></ul><ul><li>F.val = E.val </li></ul><ul><li>F.val = dígito .valex </li></ul>
  7. 7. Ejemplo declaración de tipos <ul><li>Producciones </li></ul><ul><li>D => T L </li></ul><ul><li>T => int </li></ul><ul><li>T => real </li></ul><ul><li>L => L 1 , id </li></ul><ul><li>L => id </li></ul><ul><li>Reglas semánticas </li></ul><ul><li>L.her = T.tipo </li></ul><ul><li>T.tipo = entero </li></ul><ul><li>T.tipo = real </li></ul><ul><li>L 1 .her = L.her </li></ul><ul><li>AgregarTipo( id .entrada,L.her) </li></ul><ul><li>AgregarTipo( id .entrada,L.her) </li></ul>

×