Ejecución
Antes de ejecutar el compilador, se cambia el fichero intput.txt para probar la etapa de identificación:
DATA
float price;
int price; // Error: redefined variable
CODE
print price;
print value; // Error: undefined variable
Ahora ya se podría ejecutar el compilador y sólo quedaría comprobar si la etapa de identificación ha realizado las dos tareas que le correspondían: validar y enlazar.
Validar
El compilador valida correctamente la entrada, ya que notifica los dos errores que contiene la entrada:
bash
Error in Identification: [3:6] Variable already defined: price
Error in Identification: [7:8] Undefined variable: value
2 errors detected.
Enlazar
Para ver si ha enlazado correctamente, se puede observar el AST que se ha generado en AST.html:
Program =
| varDefinitions List<VarDefinition> =
| . 0: VarDefinition = . . . . . . . . . . [2:8 2:13] float price;
| . | type FloatType = . . . . . . . . . .[null null]
| . | name = "price" string
| . 1: VarDefinition = . . . . . . . . . . [3:6 3:11] int price;
| . | type IntType = . . . . . . . . . . .[null null]
| . | name = "price" string
| statements List<Statement> =
| . 0: Print = . . . . . . . . . . . . . . [6:8 6:13] print price;
| . | expression Variable = . . . . . . . [6:8 6:13] print price;
| . | . name = "price" string
| . | . varDefinition = VarDefinition{ type=FloatType{} name=price}
| . 1: Print = . . . . . . . . . . . . . . [7:8 7:13] print value;
| . | expression Variable = . . . . . . . [7:8 7:13] print value;
| . | . name = "value" string
| . | . varDefinition = null VarDefinition
En el html anterior se puede ver el valor que ha tomado el atributo varDefinition (en verde) en cada nodo:
- El primero se ha enlazado correctamente con la definición.
- El segundo, al no haber sido definida la variable, ha quedado a null.