Closed prospero78 closed 3 years ago
Имя процедуры в конце можно не указывать (я это сделал по предложению одного пользователя). Также, по его же предложению я сделал ключевые слова в нижнем регистре (ключ -lower при компиляции) и спец. синтаксис для условной компиляции (но, конечно, всем этим можно не пользоваться).
Если с с нижним регистром я соглашусь, то отсутствие имени процедуры в окончании процедуры несколько ломает логику. Имхо, это дополнительное синтаксическое правило.
Специально сейчас посмотрел 20 файлов проекта "Оберон" у Вирта и вижу, что везде, где есть вложенные процедуры --везде в окончании имя процедуры дублируется.
Кроме того, заметил у него в процедурах -- двойное объявление VAR. А у тебя с такими штуками компилер не справляется)) Хотя, опять же, считаю, что в данном случае Вирт не прав. Двойной VAR противоречит его же описанию.
ProcedureBody = DeclarationSequence [BEGIN StatementSequence]
[RETURN expression] END.
DeclarationSequence = [CONST {ConstDeclaration ";"}]
[TYPE {TypeDeclaration ";"}] [VAR {VariableDeclaration ";"}]
{ProcedureDeclaration ";"}.
Из сообщения о языке явно следует, что секция VAR может быть один раз.
Что касается условной компиляции, то внутреннего какого-то отторжения нет (понятно, что не хочешь -- не пользуйся). Но, как по мне -- я бы сделал префиксный выбор файлов, в зависимости от целевой платформы. Ну, или те же опции компилятора через комментарии.
Да мне самому не нравится пропуск имени процедуры. Но вот посчитал тот пользователь, что так проще "ближе к паскалю", я и сделал имя процедуры в конце необязательным. Но сам отказываться от такого синтаксиса не собираюсь.
Не, работает и ладно. Если бы компиль не мог переварить наличие имени -- вот это было бы действительно плохо. Я всего лишь пытаюсь отделить мухи от котлет))
Код ниже прекрасно работает. Без указания имени процедуры в завершении процедуры.
Вывод:
Специально сейчас посмотрел у Вирта в сообщении -- там указана форма без имени процедуры после
END
. Но в словесном описании указано, что имя в конце надо. Технически это ошибка в формальном описании. Думаю что, я это дело подправляю в форме комментариев в своём переводе сообщения.Трындец... В сообщении нашёл на стр. 10 неправильно оформленный код. И оформлен он существенно не правильно (
;
)