Skip to content

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.

SymbolAtribute NameJava TypeSyn/InhDescription
varDefinitionaddressintInheritedVariable 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;
    }

}