248 lines
5.0 KiB
Plaintext
248 lines
5.0 KiB
Plaintext
///////////////////////////////////////////////////////////
|
||
// ------------- 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
|
||
}
|