Ошибка — ожидалась точка с запятой
Смотрите на строку выше той, что указал компилятор: в конце предыдущего оператора нет точки с запятой. Компилятор замечает пропуск только тогда, когда встречает начало следующего оператора.
program Demo;
begin
writeln('Один')
writeln('Два');
end.Здесь ; пропущена в строке 3, а ошибку покажут на строке 4. PascalABC.NET пишет сообщение вида «Встречено 'writeln', а ожидалось ';'», Free Pascal — Fatal: Syntax error, ";" expected but "identifier WRITELN" found с номером строки в скобках после имени файла. Допишите ; после writeln('Один').
Где точка с запятой нужна, а где нет
Точка с запятой разделяет операторы и описания. Ставят её:
- после заголовка:
program Demo;; - после каждого описания в
varиconst:n: integer;; - между операторами внутри
begin … end; - после
endподпрограммы и послеendоператора, за которым идёт следующий оператор.
Не ставят:
- после
begin,repeat,then,else,do,of— за ними оператор только начинается; - после последнего
endпрограммы — там точка.
Перед end точку с запятой можно поставить, а можно и нет: writeln('a'); end и writeln('a') end — обе записи верны.
Перед else — нельзя
if x > 0 then
writeln('плюс');
else
writeln('не плюс');Это ошибка: точка с запятой заканчивает весь оператор if, и else оказывается без пары. PascalABC.NET пишет прямо: «Перед else нельзя ставить точку с запятой». Free Pascal — Syntax error, ";" expected but "ELSE" found. Уберите ; после writeln('плюс').
С begin … end правило то же: end else, а не end; else. Исключение — оператор case: в нём точка с запятой перед else допустима.
Лишняя точка с запятой после then и do
Эти ошибки компилятор не найдёт — программа соберётся, но будет работать неправильно:
if x > 0 then;
writeln('плюс');then; — условие управляет пустым оператором, а writeln выполняется всегда.
for i := 1 to 5 do;
writeln(i);Цикл пять раз выполняет пустой оператор, потом writeln срабатывает один раз. А while x > 0 do; с условием, которое внутри не меняется, зацикливает программу намертво.
Если ошибка в самом конце
end;вместоend.в конце программы — компилятор ждёт точку.- Лишний или недостающий
end—beginиendдолжны идти парами. Выравнивайте их отступами: пара стоит в одном столбце, и пропуск сразу виден. - Текст после
end.компилятор не читает — дописанные туда строки не выполнятся.