Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Классический и расширенный режимы Рефала-5λ #144

Closed
Mazdaywik opened this issue Dec 11, 2017 · 0 comments
Assignees
Labels

Comments

@Mazdaywik
Copy link
Member

Mazdaywik commented Dec 11, 2017

Эта задача — подзадача для #94

Требуется обеспечить работу 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;.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant