Diseño del compilador | Definición dirigida por sintaxis

Requisito previo: Introducción al análisis de sintaxis, traducción dirigida por  
sintaxis La definición dirigida por sintaxis (SDD) es un tipo de especificación abstracta. Es una generalización de la gramática libre de contexto en la que a cada producción gramatical X –> a se le asocia un conjunto de reglas de producción de la forma s = f(b 1 , b 2 , ……b k ) donde s es el atributo obtenido de función f. El atributo puede ser una string, un número, un tipo o una ubicación de memoria. Las reglas semánticas son fragmentos de código que se incrustan generalmente al final de la producción y se encierran entre llaves ({ }). 

Ejemplo:  

E --> E1 + T  { E.val = E1.val + T.val} 

Árbol de análisis anotado: el árbol de análisis que contiene los valores de los atributos en cada Node para una string de entrada determinada se denomina árbol de análisis anotado o decorado. 

Características –  

  • Especificación de alto nivel
  • Oculta los detalles de implementación
  • No se especifica el orden explícito de evaluación

Tipos de atributos: hay dos tipos de atributos: 

1. Atributos sintetizados: estos son aquellos atributos que derivan sus valores de sus Nodes secundarios, es decir, el valor del atributo sintetizado en el Node se calcula a partir de los valores de los atributos en los Nodes secundarios en el árbol de análisis. 

Ejemplo:  

E --> E1 + T  { E.val = E1.val + T.val} 

En esto, E.val deriva sus valores de E 1 .val y T.val 

Cálculo de Atributos Sintetizados –  

  • Escriba el SDD usando las reglas semánticas apropiadas para cada producción en la gramática dada.
  • El árbol de análisis anotado se genera y los valores de los atributos se calculan de forma ascendente.
  • El valor obtenido en el Node raíz es el resultado final.

Ejemplo: Considere la siguiente gramática  

S --> E
E --> E1 + T
E --> T
T --> T1 * F
T --> F
F --> digit

El SDD para la gramática anterior se puede escribir de la siguiente manera 

Supongamos una string de entrada 4 * 5 + 6 para calcular atributos sintetizados. El árbol de análisis anotado para la string de entrada es 

Para el cálculo de atributos comenzamos desde el Node inferior más a la izquierda. La regla F –> dígito se usa para reducir dígito a F y el valor de dígito se obtiene del analizador léxico que se convierte en valor de F, es decir, de la acción semántica F.val = digit.lexval. Por lo tanto, F.val = 4 y dado que T es el Node principal de F, obtenemos T.val = 4 de la acción semántica T.val = F.val. Entonces, para la producción de T –> T 1 * F, la acción semántica correspondiente es T.val = T 1 .val * F.val . Por lo tanto, T.val = 4 * 5 = 20 

De manera similar, la combinación de E 1 .val + T.val se convierte en E.val, es decir, E.val = E 1 .val + T.val = 26. Luego, se aplica la producción S –> E para reducir E.val = 26 y la acción semántica asociada imprime el resultado E.val . Por lo tanto, la salida será 26. 

2. Atributos heredados: estos son los atributos que derivan sus valores de sus Nodes principales o hermanos, es decir, el valor de los atributos heredados se calcula por el valor de los Nodes principales o hermanos. 
Ejemplo:  

A --> BCD   { C.in = A.in, C.type = B.type } 

Cómputo de Atributos Heredados –  

  • Construya el SDD usando acciones semánticas.
  • El árbol de análisis anotado se genera y los valores de los atributos se calculan de arriba hacia abajo.

Ejemplo: Considere la siguiente gramática  

S --> T L
T --> int
T --> float
T --> double
L --> L1, id
L --> id

El SDD para la gramática anterior se puede escribir de la siguiente manera 

Supongamos una string de entrada int a, c para calcular los atributos heredados. El árbol de análisis anotado para la string de entrada es 

El valor de L Nodes se obtiene de T.type (hermano) que es básicamente un valor léxico obtenido como int, float o double. Luego, el Node L da el tipo de identificadores a y c. El cálculo del tipo se realiza de arriba hacia abajo o de orden transversal. Usando la función Enter_type, el tipo de identificadores a y c se inserta en la tabla de símbolos en la entrada de identificación correspondiente. 

Publicación traducida automáticamente

Artículo escrito por Ankit87 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 *