{ "name": "minizinc", "word": "identifier", "rules": { "source_file": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_item" }, { "type": "STRING", "value": ";" } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_item" }, { "type": "BLANK" } ] } ] } ] }, "_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "assignment" }, { "type": "SYMBOL", "name": "declaration" }, { "type": "SYMBOL", "name": "constraint" }, { "type": "SYMBOL", "name": "goal" }, { "type": "SYMBOL", "name": "include" }, { "type": "SYMBOL", "name": "output" } ] }, "assignment": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "expr", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "constraint": { "type": "SEQ", "members": [ { "type": "STRING", "value": "constraint" }, { "type": "SYMBOL", "name": "_expression" } ] }, "declaration": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "expr", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, { "type": "BLANK" } ] } ] }, "goal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "solve" }, { "type": "FIELD", "name": "strategy", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "satisfy" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "maximize" }, { "type": "SYMBOL", "name": "_expression" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "minimize" }, { "type": "SYMBOL", "name": "_expression" } ] } ] } } ] }, "include": { "type": "SEQ", "members": [ { "type": "STRING", "value": "include" }, { "type": "SYMBOL", "name": "string_literal" } ] }, "output": { "type": "SEQ", "members": [ { "type": "STRING", "value": "output" }, { "type": "SYMBOL", "name": "_expression" } ] }, "_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "array_comprehension" }, { "type": "SYMBOL", "name": "call" }, { "type": "SYMBOL", "name": "generator_call" }, { "type": "SYMBOL", "name": "if_then_else" }, { "type": "SYMBOL", "name": "indexed_access" }, { "type": "SYMBOL", "name": "infix_operator" }, { "type": "SYMBOL", "name": "prefix_operator" }, { "type": "SYMBOL", "name": "set_comprehension" }, { "type": "SYMBOL", "name": "string_interpolation" }, { "type": "SYMBOL", "name": "parenthesised_expression" } ] }, "parenthesised_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ")" } ] }, "array_comprehension": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "|" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "generator" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "generator" } ] } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "]" } ] }, "call": { "type": "PREC", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "arguments", "content": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "," } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "BLANK" } ] } ] } }, { "type": "STRING", "value": ")" } ] } }, "generator_call": { "type": "PREC", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "generators", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "generator" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "generator" } ] } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] } }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "(" }, { "type": "FIELD", "name": "template", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ")" } ] } }, "generator": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": "in" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "where" }, { "type": "SYMBOL", "name": "_expression" } ] }, { "type": "BLANK" } ] } ] }, "if_then_else": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "then" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "elseif" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "then" }, { "type": "SYMBOL", "name": "_expression" } ] } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "SYMBOL", "name": "_expression" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "endif" } ] }, "indexed_access": { "type": "PREC", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "collection", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": "[" }, { "type": "FIELD", "name": "indices", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_expression" } ] } } ] } }, { "type": "STRING", "value": "]" } ] } }, "infix_operator": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "<->" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "->" }, { "type": "STRING", "value": "<-" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "\\/" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "xor" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 3, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "/\\" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 4, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": "==" }, { "type": "STRING", "value": "!=" }, { "type": "STRING", "value": "<" }, { "type": "STRING", "value": "<=" }, { "type": "STRING", "value": ">" }, { "type": "STRING", "value": ">=" }, { "type": "STRING", "value": "in" }, { "type": "STRING", "value": "subset" }, { "type": "STRING", "value": "superset" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 5, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "union" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 6, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "diff" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 7, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "symdiff" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 9, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "intersect" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 8, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": ".." } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 10, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "-" }, { "type": "STRING", "value": "++" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 11, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "*" }, { "type": "STRING", "value": "/" }, { "type": "STRING", "value": "div" }, { "type": "STRING", "value": "mod" } ] } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 12, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "^" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, { "type": "PREC_LEFT", "value": 14, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "::" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } } ] } } ] }, "prefix_operator": { "type": "PREC", "value": 13, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "STRING", "value": "not" }, { "type": "STRING", "value": "¬" } ] } }, { "type": "SYMBOL", "name": "_expression" } ] } }, "set_comprehension": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "|" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "generator" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "generator" } ] } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "string_interpolation": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string_content" }, { "type": "BLANK" } ] }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\(" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ")" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string_content" }, { "type": "BLANK" } ] } ] } }, { "type": "STRING", "value": "\"" } ] }, "_type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "base_type" }, { "type": "SYMBOL", "name": "set_type" } ] }, "array_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "array" }, { "type": "STRING", "value": "[" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "base_type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "base_type" } ] } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "]" }, { "type": "STRING", "value": "of" }, { "type": "SYMBOL", "name": "base_type" } ] }, "base_type": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "var_par", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "var" }, { "type": "STRING", "value": "par" } ] } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "opt", "content": { "type": "STRING", "value": "opt" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "primitive_type" }, { "type": "SYMBOL", "name": "_expression" } ] } ] }, "primitive_type": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "ann" }, { "type": "STRING", "value": "bool" }, { "type": "STRING", "value": "float" }, { "type": "STRING", "value": "int" }, { "type": "STRING", "value": "string" } ] }, "set_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "set" }, { "type": "STRING", "value": "of" }, { "type": "SYMBOL", "name": "base_type" } ] }, "_literal": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "absent" }, { "type": "SYMBOL", "name": "array_literal" }, { "type": "SYMBOL", "name": "boolean_literal" }, { "type": "SYMBOL", "name": "float_literal" }, { "type": "SYMBOL", "name": "integer_literal" }, { "type": "SYMBOL", "name": "set_literal" }, { "type": "SYMBOL", "name": "string_literal" } ] }, "absent": { "type": "STRING", "value": "<>" }, "array_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "," } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "]" } ] }, "boolean_literal": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "true" }, { "type": "STRING", "value": "false" } ] }, "float_literal": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "\\d+\\.\\d+" }, { "type": "PATTERN", "value": "\\d+(\\.\\d+)?[Ee][+-]?\\d+" } ] } }, "integer_literal": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "PATTERN", "value": "0x[0-9a-fA-F]+" }, { "type": "PATTERN", "value": "0b[01]+" }, { "type": "PATTERN", "value": "0o[0-7]+" } ] } }, "set_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "," } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "string_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string_content" }, { "type": "BLANK" } ] }, "named": false, "value": "content" }, { "type": "STRING", "value": "\"" } ] }, "string_content": { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 1, "content": { "type": "PATTERN", "value": "[^\"\\n\\\\]+" } } }, { "type": "SYMBOL", "name": "escape_sequence" } ] } }, "escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^xuU]" }, { "type": "PATTERN", "value": "\\d{2,3}" }, { "type": "PATTERN", "value": "x[0-9a-fA-F]{2,}" }, { "type": "PATTERN", "value": "u[0-9a-fA-F]{4}" }, { "type": "PATTERN", "value": "U[0-9a-fA-F]{8}" } ] } ] } }, "identifier": { "type": "PATTERN", "value": "[A-Za-z][A-Za-z0-9_]*" }, "line_comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "%" }, { "type": "PATTERN", "value": ".*" } ] } }, "block_comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "/*" }, { "type": "PATTERN", "value": "([^*]|\\*[^\\/]|\\n)*?\\*?" }, { "type": "STRING", "value": "*/" } ] } } }, "extras": [ { "type": "PATTERN", "value": "\\s" }, { "type": "SYMBOL", "name": "line_comment" }, { "type": "SYMBOL", "name": "block_comment" } ], "conflicts": [ [ "_expression", "generator" ], [ "_expression", "assignment" ] ], "externals": [], "inline": [], "supertypes": [ "_expression", "_item", "_type" ] }