stringtranslate.com

Gramática de atributos

Una gramática de atributos es una forma formal de complementar una gramática formal con el procesamiento de información semántica. La información semántica se almacena en atributos asociados con símbolos terminales y no terminales de la gramática. Los valores de los atributos son el resultado de reglas de evaluación de atributos asociadas con producciones de la gramática. Los atributos permiten la transferencia de información desde cualquier lugar en el árbol de sintaxis abstracta a cualquier otro lugar, de una manera controlada y formal. [1]

Cada función semántica se ocupa de los atributos de los símbolos que aparecen solo en una regla de producción: tanto los parámetros de la función semántica como su resultado son atributos de los símbolos de una regla en particular. Cuando una función semántica define el valor de un atributo del símbolo en el lado izquierdo de la regla, el atributo se denomina sintetizado ; de lo contrario, se denomina heredado . [2] Por lo tanto, los atributos sintetizados sirven para pasar información semántica hacia arriba en el árbol de análisis, mientras que los atributos heredados permiten que los valores se pasen desde los nodos principales hacia abajo y a través del árbol de sintaxis.

En aplicaciones simples, como la evaluación de expresiones aritméticas, la gramática de atributos puede utilizarse para describir toda la tarea que se realizará además del análisis sintáctico de una manera sencilla; en sistemas complicados, por ejemplo, al construir una herramienta de traducción de lenguajes, como un compilador, puede utilizarse para validar comprobaciones semánticas asociadas con una gramática, que representan las reglas de un lenguaje que no se imparten explícitamente en la definición de sintaxis. También puede utilizarse por analizadores sintácticos o compiladores para traducir el árbol sintáctico directamente en código para alguna máquina específica, o en algún lenguaje intermedio .

Historia

Las gramáticas de atributos fueron inventadas por Donald Knuth y Peter Wegner . [3] Si bien a Donald Knuth se le atribuye el concepto general, Peter Wegner inventó los atributos heredados durante una conversación con Knuth. Algunas ideas embrionarias se remontan [3] al trabajo de Edgar T. "Ned" Irons, [4] el autor de IMP .

Ejemplo

La siguiente es una gramática simple libre de contexto que puede describir un lenguaje compuesto de multiplicación y suma de números enteros.

 ExprExpr + Término  ExprTérmino Término   Término * Factor Término   Factor Factor   "(" Expr ")" Factorentero

La siguiente gramática de atributos se puede utilizar para calcular el resultado de una expresión escrita en la gramática. Tenga en cuenta que esta gramática solo utiliza valores sintetizados y, por lo tanto, es una gramática con atributos S.

 Expr 1Expr 2 + Término [ Expr 1 .valor = Expr 2 .valor + Término .valor ] ExprTérmino [ Expr .valor = Término .valor ] Término 1Término 2 * Factor [ Término 1 .valor = Término 2 .valor * Factor .valor ] TérminoFactor [ Término .valor = Factor .valor ] Factor → "(" Expr ")" [ Factor .valor = Expr .valor ] Factorentero [ Factor .valor = strToInt( entero .str) ]

Atributos sintetizados

Un atributo sintetizado se calcula a partir de los valores de los atributos de los hijos. Dado que los valores de los hijos deben calcularse primero, este es un ejemplo de propagación de abajo hacia arriba. [5] Para definir formalmente un atributo sintetizado, sea una gramática formal, donde

Entonces, dada una cadena de símbolos no terminales y un nombre de atributo , es un atributo sintetizado si se cumplen estas tres condiciones:

Atributos heredados

Un atributo heredado en un nodo del árbol de análisis se define utilizando los valores de atributo del padre o de los hermanos. Los atributos heredados son convenientes para expresar la dependencia de una construcción del lenguaje de programación en el contexto en el que aparece. Por ejemplo, podemos utilizar un atributo heredado para realizar un seguimiento de si un identificador aparece en el lado izquierdo o derecho de una asignación para decidir si se necesita la dirección o el valor del identificador. A diferencia de los atributos sintetizados, los atributos heredados pueden tomar valores del padre o de los hermanos. Como en la siguiente producción,

S → ABC

donde A puede obtener valores de S, B y C. B puede tomar valores de S, A y C. Del mismo modo, C puede tomar valores de S, A y B.

Tipos especiales de gramáticas de atributos

Véase también

Referencias

  1. ^ Knuth 1968, pág. 134.
  2. ^ Knuth 1968, pág. 132.
  3. ^ ab DE Knuth: La génesis de las gramáticas de atributos. Actas de la conferencia internacional sobre gramáticas de atributos y sus aplicaciones (1990), LNCS, vol. 461, 1–12.
  4. ^ "Principal".
  5. ^ Knuth 1968, pág. 130.

Enlaces externos