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