Esperando [END]

Dentro de las palabras reservadas BEGIN y END se espera un bloque de sentencias, así como dentro de sentencias como las que siguen:

  IF ... ELSE ... END
  LOOP ... END
  WHILE ... END
  FOR ... END
  FROM ... END
  SWITCH ... END

Un bloque de sentencias acaba (y sólo puede acabar) con cualquiera de estas tres palabras reservadas: END, UNTIL o ELSE.

En el programa hay un bloque que se esperaba que acabara con la palabra reservada END pero finaliza con otra palabra; los dos casos más probables son:

- Que se haya perdido un REPEAT o un IF acabando el bloque de sentencias con un UNTIL o un ELSE; en este caso, se debe buscar el REPEAT o IF asociado.

Ejemplo:
PROGRAM mi_juego;
BEGIN
//  REPEAT
    //...
    UNTIL (key(_esc)); // Error: Esperando [END].
END


  En este ejemplo el bloque de sentencias que comenzó con el BEGIN del programa principal ha acabado con un UNTIL (puesto que se ha comentado accidentalmente el REPEAT), y el compilador esperaba que este bloque acabara con un END.

- Que se haya perdido un END de alguna sentencia y llegue el siguiente PROCESS, FUNCTION o el final del programa esperando el END que se ha perdido.

Ejemplo:
PROGRAM mi_juego;
BEGIN
    IF (x<0) x++;
END
PROCESS mi_proceso() // Error: Esperando [END].
BEGIN
    //...
END


  En este caso no se ha puesto el END del IF interpretando el compilador que el IF acaba al llegar el siguiente END (el del BEGIN) y por tanto, al llegar el nuevo PROCESS o FUNCTION, se sigue esperando el END del BEGIN.


Ver: Sintaxis - END