Esquemas de traducción dirigidos por sintaxis

La traducción dirigida por sintaxis es un conjunto de producciones que tienen reglas semánticas incrustadas en su interior. La traducción dirigida por la sintaxis ayuda en la fase de análisis semántico en el compilador. SDT tiene acciones semánticas junto con la producción en la gramática. Este artículo trata sobre postfix SDT y esquemas de traducción de postfix con la implementación de la pila del analizador. Los SDT Postfix son los SDT que tienen acciones semánticas en el extremo derecho de la producción. Este artículo también incluye SDT con acciones dentro de la producción, eliminando la recursión izquierda de SDT y SDT para definiciones con atributos L.

Esquemas de traducción de postfijos:

  • La traducción dirigida por la sintaxis que tiene sus acciones semánticas al final de la producción se denomina esquema de traducción postfijo.
  • Este tipo de traducción de SDT tiene su semántica correspondiente al final en el RHS de la producción.
  • Los SDT que contienen las acciones semánticas en los extremos derechos de la producción se denominan SDT de posfijo. 
Example of Postfix SDT
S ⇢ A#B{S.val = A.val * B.val}
A ⇢B@1{A.val = B.val + 1}
B ⇢num{B.val = num.lexval}

Implementación Parser-Stack de Postfix SDT:

Los SDT de Postfix se implementan cuando las acciones semánticas están en el extremo derecho de la producción y con el analizador de abajo hacia arriba (analizador LR o analizador shift-reduce) con los no terminales que tienen atributos sintetizados.

  • La pila del analizador contiene el registro de los no terminales en la gramática y sus atributos correspondientes.
  • Los símbolos no terminales de la producción se insertan en la pila del analizador.
  • Si los atributos se sintetizan y las acciones semánticas están en los extremos derechos, los atributos de los no terminales se evalúan para el símbolo en la parte superior de la pila.
  • Cuando la reducción ocurre en la parte superior de la pila, los atributos están disponibles en la pila, y después de que ocurre la acción, estos atributos son reemplazados por el no terminal LHS correspondiente y su atributo.
  • Ahora, el no terminal LHS y sus atributos están en la parte superior de la pila.
Production
A ⇢ BC{A.str = B.str . C.str}
B ⇢a {B.str = a}
C ⇢b{C.str = b}

Inicialmente, la pila del analizador:

B       C        Non-terminals
B.str   C.str    Synthesized attributes
          ⇡
        Top of Stack

Después de que ocurre la reducción A ⇢BC luego después de B, C y sus atributos son reemplazados por A y en el atributo. Ahora, la pila:

A            Non-terminals
A.str        Synthesized attributes
⇡

Top of stack 

SDT con acción dentro de la producción:

Cuando las acciones semánticas están presentes en cualquier parte del lado derecho de la producción, entonces es SDT con acción dentro de la producción. 

Se evalúa y las acciones se realizan inmediatamente después de que se procese el no terminal izquierdo. 

Este tipo de SDT incluye SDT con atributos S y L.

Si el SDT se analiza en un analizador de abajo hacia arriba, las acciones se realizan inmediatamente después de la aparición de un no terminal en la parte superior de la pila del analizador.

Si el SDT se analiza en un analizador de arriba hacia abajo, las acciones son antes de la expansión del no terminal o si el terminal verifica la entrada.  

Example of SDT with action inside the production
S ⇢ A +{print '+'} B 
A ⇢ {print 'num'}B  
B ⇢ num{print 'num'}

Eliminando la recursividad izquierda de SDT:

La gramática con recursividad izquierda no puede ser analizada por el analizador de arriba hacia abajo. Entonces, la recursividad por la izquierda debe eliminarse y la gramática puede transformarse eliminándola.

Grammar with Left Recursion             Grammar after eliminating left recursion
    P ⇢ Pr | q                                  P ⇢ qA
                                                A ⇢ rA | ∈

SDT para definiciones con atributos L:

SDT con definiciones con atributos L implica atributos tanto sintetizados como heredados en la producción. 

Para convertir una definición con atributos L en su SDT equivalente, siga las reglas subyacentes:

  • Cuando los atributos son atributos heredados de cualquier no terminal, coloque la acción inmediatamente antes del no terminal en la producción.
  • Cuando se sinteticen los atributos del no terminal, coloque la acción en el extremo derecho de esa producción.

Publicación traducida automáticamente

Artículo escrito por aayushi2402 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *