stringtranslate.com

Gramática de atributos

Una gramática de atributos es una forma formal de complementar una gramática formal con 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 del árbol de sintaxis abstracta a cualquier otro lugar, de forma controlada y formal. [1]

Cada función semántica trata con atributos de símbolos que ocurren sólo en una regla de producción: tanto los parámetros de la función semántica como su resultado son atributos de símbolos de una regla 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 llama sintetizado ; de lo contrario se llama 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 se puede utilizar para describir toda la tarea a realizar además del análisis sintáctico de manera sencilla; en sistemas complicados, por ejemplo, al construir una herramienta de traducción de idiomas, como un compilador, se puede utilizar para validar comprobaciones semánticas asociadas con una gramática, que representa las reglas de un idioma que no se imparten explícitamente en la definición de sintaxis. También puede ser utilizado por analizadores o compiladores para traducir el árbol de sintaxis directamente a código para alguna máquina específica o a 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] autor de IMP .

Ejemplo

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

 ExprExpr + Término  ExprTérmino  TérminoTérmino * Factor  TérminoFactor  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 atributo 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 primero se deben calcular los valores de los hijos, este es un ejemplo de propagación ascendente. [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 en el padre o los hermanos. Los atributos heredados son convenientes para expresar la dependencia de una construcción de lenguaje de programación del contexto en el que aparece. Por ejemplo, podemos usar 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 de los padres y/o hermanos. Como en la siguiente producción,

S → A B C

donde A puede obtener valores de S, B y C. B puede tomar valores de S, A y C. Asimismo, C puede tomar valores de S, A y B.

Tipos especiales de gramáticas de atributos.

Ver también

Referencias

  1. ^ Knuth 1968, pag. 134.
  2. ^ Knuth 1968, pag. 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, pag. 130.

enlaces externos