You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Требуется обеспечить работу front-end’а Рефала-5λ в двух режимах: классическом (только синтаксис РЕФАЛа-5) и расширенном (полный синтаксис Рефала-5λ). Режим по умолчанию — расширенный. Явно можно установить тот или иной глобально при помощи ключей --classic, --extended, либо локально для файла псевдокомментариями *$CLASSIC и *$EXTENDED.
В обоих режимах будет разбираться расширенный синтаксис, однако при обнаружении расширенных конструкций в классическом режиме соответствующие сообщения будут добавляться в список ошибок. Таким образом, можно обойтись одним front-end’ом для двух режимов.
Уточнение 1. Комментарии *$CLASSIC и *$EXTENDED, как и любые другие комментарии, допустимы в любом месте программы. Но! Семантика определена, только если они встречаются на верхнем уровне: текст, следующий за комментарием *$CLASSIC на верхнем уровне (до конца файла или комментария *$EXTENDED, тоже на верхнем уровне), должен соответствовать синтаксису классического РЕФАЛа-5, и наоборот для *$EXTENDED.
Поведение компилятора не определено, если эти комментарии будут встречаться где-то внутри функций или $EXTERN‘ов. Но есть важное ограничение:
Любая корректная программа на классическом РЕФАЛе-5 является корректной программой на Рефале-5λ. Следовательно, если в корректную «классическую» программу в произвольные места натыкать комментариев *$CLASSIC и *$EXTENDED — они, во-первых, не будут синтаксическими ошибками, во-вторых, поведение программы никак не изменится.
Следствия.
Псевдокомментарий внутри конструкций расширенного Рефала-5λ может для простоты синтаксического анализа интерпретироваться как ошибка.
Если программа содержит расширенные конструкции, то псевдокомментарии внутри выражения могут включать и выключать расширенные конструкции до конца выражения. Не знаю, зачем это может понадобиться, но это просто сделать в синтаксическом анализаторе.
В программе с синтаксическими ошибками псевдокомментарии в неожиданных местах также могут считаться ошибками.
Уточнение 2. Псевдокомментарии SCP4 заканчиваются на точку с запятой. Не сложно разрешить и этим псевдокомментариям иметь такой же вид: *$CLASSIC; и *$EXTENDED;.
The text was updated successfully, but these errors were encountered:
Эта задача — подзадача для #94
Требуется обеспечить работу front-end’а Рефала-5λ в двух режимах: классическом (только синтаксис РЕФАЛа-5) и расширенном (полный синтаксис Рефала-5λ). Режим по умолчанию — расширенный. Явно можно установить тот или иной глобально при помощи ключей
--classic
,--extended
, либо локально для файла псевдокомментариями*$CLASSIC
и*$EXTENDED
.В обоих режимах будет разбираться расширенный синтаксис, однако при обнаружении расширенных конструкций в классическом режиме соответствующие сообщения будут добавляться в список ошибок. Таким образом, можно обойтись одним front-end’ом для двух режимов.
Уточнение 1. Комментарии
*$CLASSIC
и*$EXTENDED
, как и любые другие комментарии, допустимы в любом месте программы. Но! Семантика определена, только если они встречаются на верхнем уровне: текст, следующий за комментарием*$CLASSIC
на верхнем уровне (до конца файла или комментария*$EXTENDED
, тоже на верхнем уровне), должен соответствовать синтаксису классического РЕФАЛа-5, и наоборот для*$EXTENDED
.Поведение компилятора не определено, если эти комментарии будут встречаться где-то внутри функций или
$EXTERN
‘ов. Но есть важное ограничение:Любая корректная программа на классическом РЕФАЛе-5 является корректной программой на Рефале-5λ. Следовательно, если в корректную «классическую» программу в произвольные места натыкать комментариев
*$CLASSIC
и*$EXTENDED
— они, во-первых, не будут синтаксическими ошибками, во-вторых, поведение программы никак не изменится.Следствия.
Уточнение 2. Псевдокомментарии SCP4 заканчиваются на точку с запятой. Не сложно разрешить и этим псевдокомментариям иметь такой же вид:
*$CLASSIC;
и*$EXTENDED;
.The text was updated successfully, but these errors were encountered: