Fact Format¶
This page describes the EBNF grammar for the fact format used by the constraint handler. It describes how to build terms for types, expressions, statements, facts, and result facts.
Basic terms¶
<type> ::=
| "bool" | "float" | "int" | "none" | "string" | "symbol"
| "function" | "set" | "multimap"
<bool> ::= "true" | "false"
<int> ::= any integer literal
<string> ::= any string literal (enclosed in quotes)
<name> ::= any suitable string
<term> ::= <int> | <string> | <symbol>
<terms> ::= <term> | <term> "," <terms>
<symbol> ::= <name> | <name> "(" <terms> ")"
<term-list> ::= "(" ")" | "(" <term> "," <term-list> ")"
Building Expression Terms¶
<val> ::= "bad" | "val" "(" <type> "," <term> ")"
<operator> ::=
| "python" "(" <string> ")"
| <lambda-expr>
| <variable>
| <bool-operator>
| <conditional-operator>
| <float-operator>
| <int-operator>
| <multimap-operator>
| <set-operator>
| <string-operator>
<eq-operator> ::= "eq" | "neq"
<comp-operator> ::= <eq-operator> | "leq" | "lt" | "geq" | "gt"
<bool-operator> ::=
| <eq-operator> | "conj" | "disj" | "leqv"
| "limp" | "lnot" | "lxor" | "snot" | "wnot"
<conditional-operator> ::= "if" | "default" | "ite" | "hasValue"
<float-operator> ::=
| <comp-operator> | "sqrt" | "cos" | "sin" | "tan"
| "acos" | "asin" | "atan" | "abs" | "minus"
| "add" | "sub" | "mult" | "int_div" | "float_div" | "pow" | "floor"
| "ceil" | "max" | "min"
<int-operator> ::=
| <comp-operator> | "add" | "sub" | "mult"
| "int_div" | "float_div" | "pow" | "abs" | "minus" | "max" | "min"
<multimap-operator> ::=
| <eq-operator> | "find" | "multimap_fold" | "multimap_isin" | "multimap_make"
| "countKeys" | "countEntries" | "sumIntEntries"
| "maxEntries" | "minEntries"
<set-operator> ::=
| <eq-operator> | "union" | "inter" | "diff" | "subset" | "set_make"
| "set_isin" | "set_notin" | "length" | "set_fold"
<string-operator> ::= <eq-operator> | "concat" | "length"
<lambda-expr> ::= "lambda" "(" <term-list> "," <expression> ")"
<tuple-expr> ::= "(" ")" | "(" <expressions> ")"
<expression> ::=
| <val>
| "variable" "(" <term> ")"
| "operation" "(" <operator> "," <expression-list> ")"
| <lambda-expr>
| "python" "(" <string> ")"
| <tuple-expr>
<expression-list> ::= "(" ")" | "(" <expression> "," <expression-list> ")"
<expressions> ::= <expression> | <expression> "," <expressions>
Building Statement Terms¶
<statement> ::=
| "assert" "(" <expression> ")"
| "assign" "(" <term> "," <expression> ")"
| "if" "(" <expression> "," <statement> "," <statement> ")"
| "noop"
| "statement_python" "(" <string> ")"
| "seq2" "(" <statement> "," <statement> ")"
| "while" "(" <int> "," <expression> "," <statement> ")"
Building Facts and Declarations¶
<domain> ::= "definition" | "boolDomain" | "fromFacts" | "fromList" "(" <expression-list> ")" | "set" | "multimap"
<variable-atom> ::=
| "variable_declare" "(" <term> "," <domain> ")"
| "variable_declare" "(" <term> "," <term> "," <domain> ")"
| "variable_declareOptional" "(" <term> ")"
| "variable_define" "(" <term> "," <expression> ")"
| "variable_define" "(" <term> "," <term> "," <expression> ")"
| "variable_domain" "(" <term> "," <expression> ")"
<multimap-atom> ::=
| "multimap_declare" "(" <term> ")"
| "multimap_declare" "(" <term> "," <term> ")"
| "multimap_assign" "(" <term> "," <expression> "," <expression> ")"
| "multimap_assign" "(" <term> "," <term> "," <expression> "," <expression> ")"
<set-atom> ::=
| "set_declare" "(" <term> ")"
| "set_declare" "(" <term> "," <term> ")"
| "set_assign" "(" <term> "," <expression> ")"
| "set_assign" "(" <term> "," <term> "," <expression> ")"
| "set_baseDomain" "(" <term> "," <expression> ")"
| "set_baseDomain" "(" <term> "," <term> "," <expression> ")"
<execution-atom> ::=
| "execution_declare" "(" <term> "," <statement> "," <term-list> "," <term-list> ")"
| "execution_declare" "(" <term> "," <term> "," <statement> "," <term-list> "," <term-list> ")"
| "execution_run" "(" <term> ")"
| "execution_run" "(" <term> "," <term> ")"
<optimize-atom> ::=
| "optimize_maximizeSum" "(" <expression> "," <term> ")"
| "optimize_maximizeSum" "(" <expression> "," <term> "," <expression> ")"
| "optimize_maximizeSum" "(" <term> "," <expression> "," <term> "," <expression> ")"
| "optimize_precision" "(" <expression> ")"
| "optimize_precision" "(" <expression> "," <expression> ")"
<preference-atom> ::=
| "preference_maximizeScore"
| "preference_holds" "(" <expression> ")"
| "preference_holds" "(" <expression> "," <int> ")"
| "preference_holds" "(" <term> "," <expression> "," <int> ")"
| "preference_variableValue" "(" <term> "," <expression> ")"
| "preference_variableValue" "(" <term> "," <expression> "," <int> ")"
| "preference_variableValue" "(" <term> "," <term> "," <expression> "," <int> ")"
<warning-control-atom> ::=
| "warning_forbid" "(" <term> ")"
| "warning_forbid" "(" <term> "," <term> ")"
| "warning_ignore" "(" <term> ")"
| "warning_ignore" "(" <term> "," <term> ")"
<atom> ::=
| "ensure" "(" <expression> ")"
| "ensure" "(" <term> "," <expression> ")"
| "bool_evaluate" "(" <expression> ")"
| "bool_evaluate" "(" <term> "," <expression> ")"
| "evaluate" "(" <operator> "," <expression-list> ")"
| "evaluate" "(" <term> "," <operator> "," <expression-list> ")"
| <variable-atom>
| <multimap-atom>
| <set-atom>
| <execution-atom>
| <optimize-atom>
| <preference-atom>
| <warning-control-atom>
Result Facts¶
<expression-warning> ::=
| "notImplemented"
| "pythonError"
| "syntaxError"
| "zeroDivisionError"
<preference-warning> ::=
| "unsupported"
<statement-warning> ::=
| "evaluatorError"
| "notImplemented"
| "pythonError"
<type-warning> ::=
| "failed_operation"
<variable-warning> ::=
| "badValue"
| "emptyDomain"
| "multipleDeclarations"
| "multipleDefinitions"
| "undeclared"
| "confusingName"
<warning-symbol> ::=
| "expression" "(" <expression-warning> ")"
| "otherError"
| "preference" "(" <preference-warning> ")"
| "propagator"
| "statement" "(" <statement-warning> ")"
| "type" "(" <type-warning> ")"
| "variable" "(" <variable-warning> ")"
<atom> ::=
| "value" "(" <term> "," <val> ")"
| "evaluated" "(" <operator> "," <expression-list> "," <val> ")"
| "set_value" "(" <term> "," <val> ")"
| "multimap_value" "(" <term> "," <val> "," <val> ")"
| "preference_score" "(" <int> ")"
| "warning" "(" <warning-symbol> "," <term-list> "," <term> ")"