Implementación de la Tabla de Atributos
Siguiendo la tabla de atributos de la gramática atribuida, se deben añadir el atributo address
a la clase VarDefinition
.
Symbol | Atribute Name | Java Type | Syn/Inh | Description |
varDefinition | address | int | Inherited | Variable address |
De nuevo, aunque se podría hacer a mano, en este apartado se hará automáticamente con VGen. Para ello bastará con indicar en el fichero de entrada de VGen, /specifications/AbstractGrammar.txt los atributos que añade la etapa actual.
java
CATEGORIES
...
NODES
program -> ...
...
// -----------------------
ATTRIBUTE GRAMMAR Identification
variable -> varDefinition;
// -----------------------
ATTRIBUTE GRAMMAR TypeChecking
expression -> type;
expression -> lvalue:boolean;
// -----------------------
ATTRIBUTE GRAMMAR MemoryAllocation
varDefinition -> [inh] address:int; // Inherited attribute
Ahora sólo quedaría regenerar el código.
bash
c:\mlang> vgen.bat
Esto produce los siguientes cambios en la clase 'VarDefinition':
java
/*
varDefinition -> type:type name:string
PHASE MemoryAllocation
varDefinition -> address:int
*/
public class VarDefinition extends AbstractAST {
// varDefinition -> type string
private Type type;
private String name;
// PHASE MemoryAllocation
private int address;
// ... (ommited for brevity)
// --------------------------------
// PHASE MemoryAllocation
public void setAddress(int address) {
this.address = address;
}
public int getAddress() {
return address;
}
}