R5FW-Parser-DefsБиблиотека содержит несколько простых функций.
t.Token ::= (s.TokType t.Pos e.TokValue)
s.TokType ~ e.TokValue ::=
TkName ~ s.CHAR*
TkCompound ~ s.CHAR*
TkMacroDigit ~ s.NUMBER
TkChar ~ s.CHAR
TkVariable ~ s.VarType e.VarName
TkOpenBracket, TkCloseBracket, TkCloseCall,
TkOpenBlock, TkCloseBlock ~ пусто
TkOpenCall ~ s.CHAR* -- имя функции
TkComma, TkColon, TkAssign, TkSemicolon ~ пусто
TkExtern, TkEntry ~ пусто
TkSpecComment ~ char*
TkEOF ~ пусто
TkError ~ s.CHAR* -- сообщение об ошибке в лексике
s.VarType ::= 's' | 't' | 'e'
Каждый токен содержит тег токена, позицию в исходном тексте и необязательный атрибут токена.
s.TokType — тег токена,t.Pos — позиция в исходном файле,e.TokValue — атрибут токена.Токены:
TkName — идентификатор (имя функции или составной символ в идентификаторной
форме), атрибут — последовательность литер.TkCompound — составной символ, записанный в двойных кавычках. Атрибут —
последовательность литер (escape-последовательности преобразованы в их
значения).TkMacroDigit — макроцифра, атрибут — её значение.TkChar — токен-литера, атрибут — литера. Если несколько токенов записаны
внутри одних кавычек, каждому из них соответствует отдельный токен TkChar.
Например, 'H20' → (TkChar t.1 'H') (TkChar t.2 '2') (TkChar t.3 'O').TkVariable переменная, атрибут — её тип (s, t или e) и её индекс.| Токен | Смысл |
|---|---|
TkOpenBracket |
( |
TkCloseBracket |
) |
TkCloseCall |
> |
TkOpenBlock |
{ |
TkCloseBlock |
} |
TkComma |
, |
TkColon |
: |
TkAssign |
= |
TkSemicolon |
; |
TkOpenCall — открывающая угловая скобка, атрибут — имя вызываемой функции.TkSpecComment — комментарий, начинающийся на *$. Атрибут — текст
комментария (включая знаки *$ в начале).TkEOF — служебный токен конца файла.TkError — служебный токен, сообщение о лексической ошибке.TokName<TokName s.TokType> == s.CHAR*
Возвращает строковое (человекочитаемое) представление данного лексического домена.
t.Refal5-AST ::= t.Unit*
t.Unit ::= t.Function | t.Extern | t.SpecialComment
t.Extern ::= (Extern (t.SrcPos e.Name)*)
t.SpecialComment ::= (SpecialComment t.SrcPos e.Text)
t.Function ::= (Function t.SrcPos (e.Name) s.Scope t.Sentence+)
s.Scope ::= Entry | Local
t.Sentence ::= (t.Pattern (Condition t.Result t.Pattern)* e.SentenceTail)
e.SentenceTail ::= RETURN t.Result | CALL-BLOCK t.Result t.Sentence*
t.Pattern, t.Result ::= (t.Term*)
t.Term ::=
(Symbol Word e.Chars*)
| (Symbol Number s.Number)
| (Symbol Char s.Char)
| (Variable t.SrcPos s.VarType e.Index)
| (Brackets t.Term*)
| (Call t.SrcPos (e.Function) t.Terms*)
s.VarType ::= 's' | 't' | 'e'
t.Unit — элемент верхнего уровня: функция, объявление $EXTERN или
специальный комментарий.t.Function — определение функции на Рефале.t.Extern — последовательность имён, объявленная одной директивой $EXTERN.t.SpecialComment — специальный комментарий — строка, которая начинается
с *$ и расположена вне функции.s.Scope — область видимости функции, Entry для функций, определённых
с ключевым словом $ENTRY и Local для функций без этого ключевого слова.t.Sentence — предложение функции. Состоит из образца, нуля и более условий
и окончания предложенияt.Pattern — образцовое выражение.e.SentenceTail — окончание предложения. Может быть либо простой правой
частью (RETURN), либо вызовом блока (CALL-BLOCK).t.Result — результатное выражение.t.Term — терм выражения, может быть:
Symbol Word — словом (составным символом),Symbol Number — макроцифрой,Symbol Char — литерой,Variable — переменной,Brackets — скобочным термом,Call — вызовом функции (недопустим внутри образца).s.VarType — тип переменной.Builtins<Builtins> == (e.FunctionName)*
e.FunctionName ::= s.CHAR+
Функция возвращает имена встроенных функций, включая сокращённые имена для
арифметических операций (+, -, /, %, *, ?).
InlineExpr<InlineExpr t.Term*> == s.CHAR*
Функция получает выражение и преобразует его в текстовую форму в одну строчку.