Mazdaywik / Refal-05

Очень минималистичный компилятор Рефала
https://mazdaywik.github.io/Refal-05/
Other
4 stars 3 forks source link

Синтаксис, совместимый с Рефалом-5 #2

Closed Mazdaywik closed 6 years ago

Mazdaywik commented 6 years ago

Цель

Должна быть возможность писать программы, которые будут корректны и с точки зрения Рефала-05, и классического Рефала-5, т.е. у обоих языков должно быть общее подмножество. И это подмножество должно быть достаточно выразительно для того, чтобы на нём написать компилятор.

Эскиз языка Рефал-05

Язык в первом приближении выглядит так:

Общее подмножество

Подзадачи

Mazdaywik commented 6 years ago

Синтаксис Рефала-05

Лексика

Лексика во многом повторяет лексику Простого Рефала версии 001. Типы токенов:

Псевдокомментарии предназначены для записи директив $ENUM и $EENUM невидимым для Рефала-5 способом. Если комментарий начинается с *$, но после $ не располагается известного ключевого слова — он игнорируется.

Пример:

*$ENUM True, False

эквивалентно

$ENUM True, False;

(в конце неявная точка с запятой). В обоих случаях насчитываются следующие лексемы:

$ENUM, True, ,, False, ;

При этом

*$FROM LibraryEx

является обычным комментарием, поскольку $FROM не является допустимым ключевым словом.

Запись

*$ENTRY Hello { = World }

является допустимой конструкцией, однако, невидимой для Рефала-5. Это грязный хак.

Грамматика

Здесь |, ε и  — метасимволы. В 〈угловых〉 скобках записаны типы токенов.

Program → ε | Program Element | Program;
Element → List; | Function | 〈native code〉
List → $ENUM 〈name〉 | $EENUM 〈name〉 | $EXTERN 〈name〉 | List, 〈name〉
Function → Scope 〈name〉 { Body }
Scope → $ENTRY | ε
Body → ε | Sentences; | Sentences | 〈native code〉
Sentences → Sentence | Sentences; Sentence
Sentence → Pattern = Result
Pattern → ε | Pattern PatternTerm
PatternTerm → Symbol | 〈variable〉 | (Pattern)
Result → ε | Result ResultTerm
ResultTerm → Symbol | 〈variable〉 | (Result) | <Result>
Symbol → 〈name〉 | 〈number〉 | 〈char〉
Mazdaywik commented 6 years ago

Сообщение коммита 05b53189abd5a79babae7fe6ebad531c2cf03cd2

Компилятор собирается собой и при помощи refc/refgo (close #2)

Старая стабильная версия (папка bootstrap) удалена, поскольку теперь компилятор раскручивается при помощи refc/refgo.