Skip to content

Especificación

Extracción de Requisitos

El primer paso de esta la especificación, como en todos los demás capítulos, es la extracción de los requisitos propios de la etapa actual de entre todos los de la descripción del lenguaje. Los requisitos extraídos son:

  • En la sección DATA se realizan las definiciones de variables (no puede haber definiciones en la sección CODE).
  • Las variables solo pueden ser de tipo int tipo float. Las variables de tipo entero ocupan 2 bytes y las reales 4.

El primer requisito supone que no habrá variables locales y, por tanto, todas las direcciones son absolutas (no habrá direccionamiento relativo).

Especificación en gramática atribuida

En esta fase se necesita añadir más información al árbol, en concreto, la dirección de cada variable. Por tanto, se utilizarán de nuevo una gramática atribuida, ya que permiten indicar qué información se va a añadir en forma de atributos (las direcciones) y cómo obtienen estos su valor mediante reglas semánticas.

A continuación, se incluye la gramática abstracta finalizada que formaliza los requisitos anteriores:

Attributes

SymbolAtribute NameJava TypeSyn/InhDescription
varDefinitionaddressintInheritedVariable address

Auxiliary Functions

NameDescription
size(type)Type size in bytes

Rules

NodePredicatesFunctions
program → varDefinition* statement*varDefinitioni.address = ∑size(varDefinitionj.type)
| 0 ≤ j < i
varDefinition → type name:string
intType:type → ε
floatType:type → ε
print:statement → expression
assignment:statement → left:expression right:expression
arithmetic:expression → left:expression operator:string right:expression
variable:expression → name:string
intLiteral:expression → intValue:int
floatLiteral:expression → floatValue:float

La regla semántica en program simplemente indica que la dirección de una variable es la suma de los tamaños de todas las variables definidas antes que ella.

Nótese que el atributo address se ha definido como heredado, ya que dicho atributo se asigna a las varDefinition desde su nodo padre program.

Por último, nótese que no se ha definido ningún predicado en la gramática (segunda columna de la tabla). Esto es lógico ya que con el semántico acabaron las fases de análisis y, por tanto, ya no hay errores que detectar. Simplemente se usa la parte de las gramáticas atribuidas que nos permite añadir más información al árbol (atributos y funciones semánticas).