Portal/rsconcept/frontend/src/components/RSInput/rslang/rslangAST.grammar

248 lines
5.0 KiB
Plaintext
Raw Normal View History

///////////////////////////////////////////////////////////
// ------------- Generator Definitions --------------------
///////////////////////////////////////////////////////////
@detectDelim
///////////////////////////////////////////////////////////
// ------------- Precedence Definitions --------------------
///////////////////////////////////////////////////////////
@precedence {
plus @left minus @left,
times @left,
not @right,
log_equiv @left,
log_impl @left,
log_or @left,
log_and @left,
set_decart @left set_union @left set_intersect @left set_minus @left set_symminus @left,
set_bool @right,
quant @right
}
///////////////////////////////////////////////////////////
// ------------- Terminal Tokens --------------------------
///////////////////////////////////////////////////////////
@tokens {
space { @whitespace+ }
Integer { $[0-9]+ }
EmptySet { "∅" }
IntegerSet { "Z" }
BigPr { "Pr"$[1-9]$[0-9]*(","$[1-9]$[0-9]*)* }
SmallPr { "pr"$[1-9]$[0-9]*(","$[1-9]$[0-9]*)* }
Filter { "Fi"$[1-9]$[0-9]*(","$[1-9]$[0-9]*)* }
Card { "card" }
Bool { "bool" }
Debool { "debool" }
Red { "red" }
Global { $[XCSDAT]$[0-9]+ }
Function { "F"$[0-9]+ }
Predicate { "P"$[0-9]+ }
Radical { "R"$[0-9]+ }
Local { $[_a-zα-ω]($[a-zα-ω])*$[0-9]* }
PrefixR { "R" }
PrefixI { "I" }
PrefixD { "D" }
"¬"
"∀" "∃" "⇔" "⇒" "" "&"
""
"+" "-" "*" "" "\\" "∆" "∩" "×"
"∈" "∉" "⊆" "⊄" "⊂" ">" "≥" "≤" "<" "≠" "="
":∈" ":="
"," ";" "|"
"[" "]"
"{" "}"
"(" ")"
@precedence {
Filter
BigPr
Predicate
Function
Global
Radical
PrefixR
PrefixI
PrefixD
}
@precedence {
Card
Bool
Debool
Red
SmallPr
Local
}
}
@skip { space }
///////////////////////////////////////////////////////////////////////////////
// ------------------------- Grammar Rules ------------------------------------
///////////////////////////////////////////////////////////////////////////////
// ------------------------- Language Expression ------------------------------
@top Expression {
logic_or_setexpr |
Function_decl
}
logic_or_setexpr {
Logic |
Setexpr
}
Function_decl {
"[" Arguments "]" logic_or_setexpr
}
// ------------------------- Variables and arguments -------------------------
Arguments {
Declaration |
Arguments "," Declaration
}
Declaration {
Local "∈" Setexpr
}
Variable {
Local |
Tuple
}
Variable_pack {
Variable |
Variable_pack "," Variable
}
// ------------------------- Logic Expressions --------------------------------
Logic {
Logic_predicates |
Logic_unary |
Logic_binary |
"(" Logic ")"
}
Logic_predicates {
Variable ":∈" Setexpr |
Variable ":=" Setexpr |
Setexpr "∈" Setexpr |
Setexpr "∉" Setexpr |
Setexpr "⊆" Setexpr |
Setexpr "⊄" Setexpr |
Setexpr "⊂" Setexpr |
Setexpr ">" Setexpr |
Setexpr "≥" Setexpr |
Setexpr "<" Setexpr |
Setexpr "≤" Setexpr |
Setexpr "≠" Setexpr |
Setexpr "=" Setexpr
}
Logic_unary {
Negation { !not "¬" Logic } |
Predicate "[" Setexpr_enum "]" |
Logic_quantor
}
Logic_quantor {
"∀" Variable_pack "∈" Setexpr !quant Logic |
"∃" Variable_pack "∈" Setexpr !quant Logic
}
Logic_binary {
Logic !log_equiv "⇔" Logic |
Logic !log_impl "⇒" Logic |
Logic !log_or "" Logic |
Logic !log_and "&" Logic
}
// ------------------------- Set Expressions ----------------------------------
Setexpr {
Literal |
identifier |
Setexpr_binary |
Setexpr_generators |
Function "[" Setexpr_enum "]" |
TextFunction "(" Setexpr ")"
}
TextFunction {
BigPr |
SmallPr |
Card |
Bool |
Debool |
Red
}
Setexpr_enum {
Setexpr |
Setexpr_enum_min2
}
Setexpr_enum_min2 {
Setexpr_enum "," Setexpr
}
Literal {
Integer |
EmptySet |
IntegerSet
}
identifier {
Local |
Global |
Radical
}
Setexpr_binary {
Setexpr !plus "+" Setexpr |
Setexpr !minus "-" Setexpr |
Setexpr !times "*" Setexpr |
Setexpr !set_union "" Setexpr |
Setexpr !set_minus "\\" Setexpr |
Setexpr !set_symminus "∆" Setexpr |
Setexpr !set_intersect "∩" Setexpr |
Setexpr !set_decart "×" Setexpr |
"(" Setexpr_binary ")"
}
Setexpr_generators {
Enumeration |
Tuple |
Boolean |
Filter_expression |
Declarative |
Imperative |
Recursion
}
Enumeration {
"{" Setexpr_enum "}"
}
Tuple {
"(" Setexpr_enum_min2 ")"
}
Boolean {
!set_bool "" "(" Setexpr ")" |
!set_bool "" Boolean
}
Filter_expression {
Filter "[" Setexpr_enum "]" "(" Setexpr ")"
}
Declarative {
"{" Local "∈" Setexpr "|" Logic "}" |
PrefixD "{" Variable "∈" Setexpr "|" Logic "}"
}
Recursion {
PrefixR "{" Variable ":=" Setexpr ("|" Logic)? "|" Setexpr "}"
}
Imperative {
PrefixI "{" Setexpr "|" Imp_blocks "}"
}
Imp_blocks {
Logic |
Imp_blocks ";" Logic
}