Skip to content

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.