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

248 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

///////////////////////////////////////////////////////////
// ------------- 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
}