this repo has no description
at develop 6.6 kB view raw
1% A MiniZinc model 2<model> ::= [ <item> ";" ... ] 3 4% Items 5<item> ::= <include-item> 6 | <var-decl-item> 7 | <enum-item> 8 | <assign-item> 9 | <constraint-item> 10 | <solve-item> 11 | <output-item> 12 | <predicate-item> 13 | <test-item> 14 | <function-item> 15 | <annotation-item> 16 17<ti-expr-and-id> ::= <ti-expr> ":" <ident> 18 19% Include items 20<include-item> ::= "include" <string-literal> 21 22% Variable declaration items 23<var-decl-item> ::= <ti-expr-and-id> <annotations> [ "=" <expr> ] 24 25% Enum items 26<enum-item> ::= "enum" <ident> <annotations> [ "=" <enum-cases> ] 27 28<enum-cases> ::= "{" <ident> "," ... "}" 29 30% Assign items 31<assign-item> ::= <ident> "=" <expr> 32 33% Constraint items 34<constraint-item> ::= "constraint" <string-annotation> <expr> 35 36% Solve item 37<solve-item> ::= "solve" <annotations> "satisfy" 38 | "solve" <annotations> "minimize" <expr> 39 | "solve" <annotations> "maximize" <expr> 40 41% Output items 42<output-item> ::= "output" <expr> 43 44% Annotation items 45<annotation-item> ::= "annotation" <ident> <params> 46 47% Predicate, test and function items 48<predicate-item> ::= "predicate" <operation-item-tail> 49 50<test-item> ::= "test" <operation-item-tail> 51 52<function-item> ::= "function" <ti-expr> ":" <operation-item-tail> 53 54<operation-item-tail> ::= <ident> <params> <annotations> [ "=" <expr> ] 55 56<params> ::= [ ( <ti-expr-and-id> "," ... ) ] 57 58% Type-inst expressions 59<ti-expr> ::= <base-ti-expr> 60 | <array-ti-expr> 61 62<base-ti-expr> ::= <var-par> <opt-ti> <set-ti> <base-ti-expr-tail> 63 64<var-par> ::= "var" | "par" | ε 65 66<opt-ti> ::= "opt" | ε 67 68<set-ti> ::= "set" "of" | ε 69 70<base-type> ::= "bool" 71 | "int" 72 | "float" 73 | "string" 74 75<base-ti-expr-tail> ::= <ident> 76 | <base-type> 77 | <ti-variable-expr-tail> 78 | "ann" 79 | { <expr> "," ... } 80 | <num-expr> ".." <num-expr> 81 82% Type-inst variables 83<ti-variable-expr-tail> ::= $[A-Za-z][A-Za-z0-9_]* 84 85% Array type-inst expressions 86<array-ti-expr> ::= "array" [ <ti-expr> "," ... ] "of" <base-ti-expr> 87 | "list" "of" <base-ti-expr> 88 89% Expressions 90<expr> ::= <expr-atom> <expr-binop-tail> 91 92<expr-atom> ::= <expr-atom-head> <expr-atom-tail> <annotations> 93 94<expr-binop-tail> ::= [ <bin-op> <expr> ] 95 96<expr-atom-head> ::= <builtin-un-op> <expr-atom> 97 | "(" <expr> ")" 98 | <ident-or-quoted-op> 99 | "_" 100 | <bool-literal> 101 | <int-literal> 102 | <float-literal> 103 | <string-literal> 104 | <set-literal> 105 | <set-comp> 106 | <array-literal> 107 | <array-literal-2d> 108 | <array-comp> 109 | <ann-literal> 110 | <if-then-else-expr> 111 | <let-expr> 112 | <call-expr> 113 | <gen-call-expr> 114 115<expr-atom-tail> ::= ε 116 | <array-access-tail> <expr-atom-tail> 117 118% Numeric expressions 119<num-expr> ::= <num-expr-atom> <num-expr-binop-tail> 120 121<num-expr-atom> ::= <num-expr-atom-head> <expr-atom-tail> <annotations> 122 123<num-expr-binop-tail> ::= [ <num-bin-op> <num-expr> ] 124 125<num-expr-atom-head> ::= <builtin-num-un-op> <num-expr-atom> 126 | "(" <num-expr> ")" 127 | <ident-or-quoted-op> 128 | <int-literal> 129 | <float-literal> 130 | <if-then-else-expr> 131 | <let-expr> 132 | <call-expr> 133 | <gen-call-expr> 134 135% Built-in operators 136<builtin-op> ::= <builtin-bin-op> | <builtin-un-op> 137 138<bin-op> ::= <builtin-bin-op> | <ident> 139 140<builtin-bin-op> ::= "<->" | "->" | "<-" | "\/" | "xor" | "/\" | "<" | ">" | "<=" | ">=" | "==" | "=" | "!=" 141 | "in" | "subset" | "superset" | "union" | "diff" | "symdiff" 142 | ".." | "intersect" | "++" | <builtin-num-bin-op> 143 144<builtin-un-op> ::= "not" | <builtin-num-un-op> 145 146% Built-in numeric operators 147<num-bin-op> ::= <builtin-num-bin-op> | ‘<ident>‘ 148 149<builtin-num-bin-op> ::= "+" | "-" | "*" | "/" | "div" | "mod" 150 151<builtin-num-un-op> ::= "+" | "-" 152 153% Boolean literals 154<bool-literal> ::= "false" | "true" 155 156% Integer literals 157<int-literal> ::= [0-9]+ 158 | 0x[0-9A-Fa-f]+ 159 | 0o[0-7]+ 160 161% Float literals 162<float-literal> ::= [0-9]+"."[0-9]+ 163 | [0-9]+"."[0-9]+[Ee][-+]?[0-9]+ 164 | [0-9]+[Ee][-+]?[0-9]+ 165 | 0[xX]([0-9a-fA-F]*"."[0-9a-fA-F]+|[0-9a-fA-F]+".")([pP][+-]?[0-9]+) 166 | (0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+) 167 168% String literals 169<string-contents> ::= ([^"\n\] | \[^\n(])* 170 171<string-literal> ::= """ <string-contents> """ 172 | """ <string-contents> "\(" <string-interpolate-tail> 173 174<string-interpolate-tail> ::= <expr> ")"<string-contents>""" 175 | <expr> ")"<string-contents>"\(" <string-interpolate-tail> 176 177% Set literals 178<set-literal> ::= "{" [ <expr> "," ... ] "}" 179 180% Set comprehensions 181<set-comp> ::= "{" <expr> "|" <comp-tail> "}" 182 183<comp-tail> ::= <generator> [ "where" <expr> ] "," ... 184 185<generator> ::= <ident> "," ... "in" <expr> 186 187% Array literals 188<array-literal> ::= "[" [ <expr> "," ... ] "]" 189 190% 2D Array literals 191<array-literal-2d> ::= "[|" [ (<expr> "," ...) "|" ... ] "|]" 192 193% Array comprehensions 194<array-comp> ::= "[" <expr> "|" <comp-tail> "]" 195 196% Array access 197<array-access-tail> ::= "[" <expr> "," ... "]" 198 199% Annotation literals 200<ann-literal> ::= <ident> [ "(" <expr> "," ... ")" ] 201 202% If-then-else expressions 203<if-then-else-expr> ::= "if" <expr> "then" <expr> [ "elseif" <expr> "then" <expr> ]* "else" <expr> "endif" 204 205% Call expressions 206<call-expr> ::= <ident-or-quoted-op> [ "(" <expr> "," ... ")" ] 207 208% Let expressions 209<let-expr> ::= "let" "{" <let-item> ";" ... "}" "in" <expr> 210 211<let-item> ::= <var-decl-item> 212 | <constraint-item> 213 214% Generator call expressions 215<gen-call-expr> ::= <ident-or-quoted-op> "(" <comp-tail> ")" "(" <expr> ")" 216 217% Miscellaneous 218 219% Identifiers 220<ident> ::= [A-Za-z][A-Za-z0-9_]* | [^\xa\xd\x0]* 221 222% Identifiers and quoted operators 223<ident-or-quoted-op> ::= <ident> 224 | <builtin-op> 225 226% Annotations 227<annotations> ::= [ "::" <annotation> ]* 228 229<annotation> ::= <expr-atom-head> <expr-atom-tail> 230 231<string-annotation> ::= "::" <string-literal>