А куда делся BEGIN? о_О
BEGIN не нужен, если нет statements. См. грамматику.
В грамматике неточность.
Я бы не стал "исправлять" по своему разумению вполне формальную оригинальную запись. Потому что так можно далеко зайти (особенно если иметь "непаскальный" опыт).
По ней вдобавок получается, что после StatementSequence перед RETURN не должно быть точки с запятой, что опровергают все примеры.
Именно так. Точка с запятой
может отсутствовать. Поэтому примеры ничего не опровергают. Видимо Вирт по привычке всегда ее ставит (RETURN как не-statement появился недавно) .
По хорошему должно быть как-то так:
По-хорошему - идиотизм запрещать точку с запятой после последнего филда и после RETURN. Здравый смысл принесенный в жертву формалистике.