# data[].attributes.body
Dada una colección de atributos a....... a, el principio de la semântica dirigida por sintaxis implica que para cada regla gramatical Xo→→→ X, X2....... Xn,, (donde X, es un no terminal, mientras que las otras X, son símbolos arbitrarios), los valores de los atributos Xa, de cada símbolo gramatical X, están relacionados con los valores de los atributos de los otros simbolos en la regla. Si el mismo símbolo X, apareciera más de una vez en la regla gramatical, entonces cada ocurrencia tendría que distinguirse de las otras mediante una subindización adecuada, de manera que se puedan diferenciar los valores de atributo de diferentes ocurrencias.

# data[].attributes.body
El uso de una expresión if-then-else extiende las clases de expresiones que pueden apare- cer en una ecuación de atributo de una manera útil. La colección de expresiones permisibles en una ecuación de atributo se conoce como metalenguaje para la gramática con atributos. Por lo regular queremos un metalenguaje cuyo significado sea suficientemente claro para. que no surja confusión sobre su propia semántica. También deseamos un metalenguaje que sca cercano a un lenguaje de programación real, ya que, como veremos en breve, queremos convertir las ecuaciones de atributo en código de trabajo en un analizador semántico. En este libro utilizamos un metalenguaje que está limitado a expresiones aritméticas, lógicas y algunas otras clases de expresiones, junto con una expresión if-then-else, y ocasionalmente una expresión case o switch.

Una característica adicional útil al especificar ecuaciones de atributo es agregar al metalenguaje el uso de funciones cuyas definiciones se puedan dar en otra parte. Por ejemplo, en las gramáticas para números hemos estado escribiendo ecuaciones de atributo para cada una de las opciones de dígito. En cambio, podríamos adoptar una convención más concisa escribiendo la regla gramatical para dígito como dígito →→→ D (donde se entiende que D'es uno de los dígitos) y entonces escribir la ecuación de atributo correspondiente como
digito.val = numval(D)