Closed Mazdaywik closed 6 years ago
Лексика во многом повторяет лексику Простого Рефала версии 001. Типы токенов:
$ENTRY
, $EXTERN
, $ENUM
, $EENUM
._
и -
, начинающиеся с буквы (прописной или строчной). Дефисы и прочерки считаются эквивалентными./* … */
.*
.тип.имя
, где тип
— одно из s
, t
, e
, имя
— непустая последовательность букв, цифр, _
и -
, причём _
и -
не различаются.,
, ;
, {
, (
, )
, =
, <
, >
, }
.Псевдокомментарии предназначены для записи директив $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〉
Сообщение коммита 05b53189abd5a79babae7fe6ebad531c2cf03cd2
Компилятор собирается собой и при помощи refc/refgo (close #2)
Старая стабильная версия (папка bootstrap) удалена, поскольку теперь компилятор раскручивается при помощи refc/refgo.
Цель
Должна быть возможность писать программы, которые будут корректны и с точки зрения Рефала-05, и классического Рефала-5, т.е. у обоих языков должно быть общее подмножество. И это подмножество должно быть достаточно выразительно для того, чтобы на нём написать компилятор.
Эскиз языка Рефал-05
Язык в первом приближении выглядит так:
*$ENUM
/*$EENUM
, что обеспечит совместимость с Рефалом-5.Общее подмножество
*$ENUM
), или объявлено как*$EENUM
и во всех остальных единицах объявлено как$EXTERN
.Mu
.Mu
Рефала-5 умеет вызывать entry-функции из других единиц трансляции.Подзадачи