Набор библиотек для Рефала-5

Библиотека R5FW-Parser-Defs

Библиотека содержит несколько простых функций.

Токены (лексические домены) Рефала-5

Тип токена

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'

Каждый токен содержит тег токена, позицию в исходном тексте и необязательный атрибут токена.

Токены:

Токен Смысл
TkOpenBracket (
TkCloseBracket )
TkCloseCall >
TkOpenBlock {
TkCloseBlock }
TkComma ,
TkColon :
TkAssign =
TkSemicolon ;

Функция TokName

<TokName s.TokType> == s.CHAR*

Возвращает строковое (человекочитаемое) представление данного лексического домена.

Абстратное синтаксическое дерево Рефала-5

Описание абстрактного синтаксического дерева

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'

Функция Builtins

<Builtins> == (e.FunctionName)*

e.FunctionName ::= s.CHAR+

Функция возвращает имена встроенных функций, включая сокращённые имена для арифметических операций (+, -, /, %, *, ?).

Функция InlineExpr

<InlineExpr t.Term*> == s.CHAR*

Функция получает выражение и преобразует его в текстовую форму в одну строчку.