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.
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.
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.