{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "inference",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "use_directive"
},
{
"type": "SYMBOL",
"name": "spec_definition"
},
{
"type": "SYMBOL",
"name": "_definition"
}
]
}
},
"word": {
"type": "SYMBOL",
"name": "identifier"
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_block"
},
{
"type": "SYMBOL",
"name": "expression_statement"
},
{
"type": "SYMBOL",
"name": "assign_statement"
},
{
"type": "SYMBOL",
"name": "return_statement"
},
{
"type": "SYMBOL",
"name": "loop_statement"
},
{
"type": "SYMBOL",
"name": "if_statement"
},
{
"type": "SYMBOL",
"name": "variable_definition_statement"
},
{
"type": "SYMBOL",
"name": "constant_definition"
},
{
"type": "SYMBOL",
"name": "type_definition_statement"
},
{
"type": "SYMBOL",
"name": "assert_statement"
},
{
"type": "SYMBOL",
"name": "break_statement"
}
]
},
"_definition": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "constant_definition"
},
{
"type": "SYMBOL",
"name": "function_definition"
},
{
"type": "SYMBOL",
"name": "external_function_definition"
},
{
"type": "SYMBOL",
"name": "type_definition_statement"
},
{
"type": "SYMBOL",
"name": "enum_definition"
},
{
"type": "SYMBOL",
"name": "struct_definition"
}
]
},
"visibility": {
"type": "STRING",
"value": "pub"
},
"_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_embedded_type"
},
{
"type": "SYMBOL",
"name": "_bracketed_generic_name"
},
{
"type": "SYMBOL",
"name": "_name"
}
]
},
"_embedded_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_i8"
},
{
"type": "SYMBOL",
"name": "type_i16"
},
{
"type": "SYMBOL",
"name": "type_i32"
},
{
"type": "SYMBOL",
"name": "type_i64"
},
{
"type": "SYMBOL",
"name": "type_u8"
},
{
"type": "SYMBOL",
"name": "type_u16"
},
{
"type": "SYMBOL",
"name": "type_u32"
},
{
"type": "SYMBOL",
"name": "type_u64"
},
{
"type": "SYMBOL",
"name": "type_bool"
},
{
"type": "SYMBOL",
"name": "type_unit"
},
{
"type": "SYMBOL",
"name": "type_array"
},
{
"type": "SYMBOL",
"name": "type_fn"
}
]
},
"type_i8": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "i8"
}
},
"type_i16": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "i16"
}
},
"type_i32": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "i32"
}
},
"type_i64": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "i64"
}
},
"type_u8": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "u8"
}
},
"type_u16": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "u16"
}
},
"type_u32": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "u32"
}
},
"type_u64": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "u64"
}
},
"type_bool": {
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "bool"
}
},
"type_unit": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ")"
}
}
]
},
"type_array": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ";"
},
{
"type": "FIELD",
"name": "length",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "_name"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"type_fn": {
"type": "SEQ",
"members": [
{
"type": "PREC",
"value": 1500,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "fn"
},
{
"type": "FIELD",
"name": "arguments",
"content": {
"type": "SYMBOL",
"name": "argument_list"
}
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "->"
},
{
"type": "FIELD",
"name": "returns",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"_literal": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "array_literal"
},
{
"type": "SYMBOL",
"name": "bool_literal"
},
{
"type": "SYMBOL",
"name": "string_literal"
},
{
"type": "SYMBOL",
"name": "number_literal"
},
{
"type": "SYMBOL",
"name": "unit_literal"
}
]
},
"_expression": {
"type": "PREC",
"value": 300,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_non_lval_expression"
},
{
"type": "SYMBOL",
"name": "_lval_expression"
}
]
}
},
"_lval_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_simple_name"
},
{
"type": "SYMBOL",
"name": "member_access_expression"
},
{
"type": "SYMBOL",
"name": "array_index_access_expression"
},
{
"type": "SYMBOL",
"name": "function_call_expression"
}
]
},
"_non_lval_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_literal"
},
{
"type": "SYMBOL",
"name": "type_member_access_expression"
},
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "struct_expression"
},
{
"type": "SYMBOL",
"name": "prefix_unary_expression"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
},
{
"type": "SYMBOL",
"name": "uzumaki_keyword"
}
]
},
"_block": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "SYMBOL",
"name": "assume_block"
},
{
"type": "SYMBOL",
"name": "forall_block"
},
{
"type": "SYMBOL",
"name": "exists_block"
},
{
"type": "SYMBOL",
"name": "unique_block"
}
]
},
"array_index_access_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "array",
"content": {
"type": "SYMBOL",
"name": "_lval_expression"
}
},
{
"type": "STRING",
"value": "["
},
{
"type": "FIELD",
"name": "index",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"member_access_expression": {
"type": "PREC",
"value": 2000,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "SYMBOL",
"name": "member_access_expression"
}
]
}
},
{
"type": "STRING",
"value": "."
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_simple_name"
}
}
]
}
},
"_identifier_like_embedded_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_i8"
},
{
"type": "SYMBOL",
"name": "type_i16"
},
{
"type": "SYMBOL",
"name": "type_i32"
},
{
"type": "SYMBOL",
"name": "type_i64"
},
{
"type": "SYMBOL",
"name": "type_u8"
},
{
"type": "SYMBOL",
"name": "type_u16"
},
{
"type": "SYMBOL",
"name": "type_u32"
},
{
"type": "SYMBOL",
"name": "type_u64"
},
{
"type": "SYMBOL",
"name": "type_bool"
},
{
"type": "SYMBOL",
"name": "type_fn"
}
]
},
"type_member_access_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC",
"value": 2000,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_member_access_expression"
},
{
"type": "SYMBOL",
"name": "_identifier_like_embedded_type"
},
{
"type": "SYMBOL",
"name": "_name"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
}
]
}
},
{
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "::"
}
},
"named": false,
"value": "::"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_simple_name"
}
}
]
}
},
{
"type": "PREC",
"value": 2000,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "SYMBOL",
"name": "_bracketed_generic_name"
}
},
{
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "::"
}
},
"named": false,
"value": "::"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_simple_name"
}
}
]
}
}
]
},
"function_call_expression": {
"type": "PREC_DYNAMIC",
"value": 1500,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "function",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_lval_expression"
},
{
"type": "SYMBOL",
"name": "type_member_access_expression"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
}
]
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument_name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": ":"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument_name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": ":"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"struct_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "field_name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "field_value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "field_name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "field_value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"expression_statement": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": ";"
}
]
},
"assign_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "left",
"content": {
"type": "SYMBOL",
"name": "_lval_expression"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "right",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"assert_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "assert"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": ";"
}
]
},
"break_statement": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "break"
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"parenthesized_expression": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": ")"
}
]
}
},
"prefix_unary_expression": {
"type": "PREC",
"value": 1000,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "unary_not"
},
{
"type": "SYMBOL",
"name": "unary_minus"
},
{
"type": "SYMBOL",
"name": "unary_bitnot"
}
]
}
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
},
"binary_expression": {
"type": "CHOICE",
"members": [
{
"type": "PREC_RIGHT",
"value": 990,
"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": 490,
"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": 480,
"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": 590,
"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": 570,
"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": 580,
"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": 800,
"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": 800,
"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": 970,
"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": 970,
"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": 980,
"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": 980,
"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": 980,
"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": 700,
"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": 700,
"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": 600,
"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": 600,
"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": 700,
"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": 700,
"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"
}
}
]
}
}
]
},
"variable_definition_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "let"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "mut",
"content": {
"type": "SYMBOL",
"name": "mut_keyword"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"type_definition_statement": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "visibility",
"content": {
"type": "SYMBOL",
"name": "visibility"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"constant_definition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "visibility",
"content": {
"type": "SYMBOL",
"name": "visibility"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "const"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"spec_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "spec"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_definition"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"enum_definition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "visibility",
"content": {
"type": "SYMBOL",
"name": "visibility"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "enum"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "variant",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "variant",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"struct_definition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "visibility",
"content": {
"type": "SYMBOL",
"name": "visibility"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "struct"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "field",
"content": {
"type": "SYMBOL",
"name": "struct_field"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "FIELD",
"name": "method",
"content": {
"type": "SYMBOL",
"name": "function_definition"
}
}
]
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"struct_field": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
"block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "FIELD",
"name": "statement",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"function_definition": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "visibility",
"content": {
"type": "SYMBOL",
"name": "visibility"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "fn"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "SYMBOL",
"name": "type_argument_list_definition"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "argument_list",
"content": {
"type": "SYMBOL",
"name": "argument_list"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "->"
},
{
"type": "FIELD",
"name": "returns",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_block"
}
}
]
},
"external_function_definition": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "external"
},
{
"type": "STRING",
"value": "fn"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "argument_list",
"content": {
"type": "SYMBOL",
"name": "argument_list"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "->"
},
{
"type": "FIELD",
"name": "returns",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"argument_list": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "argument_declaration"
},
{
"type": "SYMBOL",
"name": "self_reference"
},
{
"type": "SYMBOL",
"name": "ignore_argument"
},
{
"type": "SYMBOL",
"name": "_type"
}
]
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "argument_declaration"
},
{
"type": "SYMBOL",
"name": "self_reference"
},
{
"type": "SYMBOL",
"name": "ignore_argument"
},
{
"type": "SYMBOL",
"name": "_type"
}
]
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"argument_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "mut",
"content": {
"type": "SYMBOL",
"name": "mut_keyword"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
"self_reference": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "mut",
"content": {
"type": "SYMBOL",
"name": "mut_keyword"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "self"
}
]
},
"ignore_argument": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "_"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
}
]
},
"assume_block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "assume"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "block"
}
}
]
},
"forall_block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "forall"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "block"
}
}
]
},
"exists_block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "exists"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "block"
}
}
]
},
"unique_block": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "unique"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "block"
}
}
]
},
"if_statement": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "if_arm",
"content": {
"type": "SYMBOL",
"name": "_block"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "else_if_condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "else_if_arm",
"content": {
"type": "SYMBOL",
"name": "_block"
}
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "FIELD",
"name": "else_arm",
"content": {
"type": "SYMBOL",
"name": "_block"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"loop_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "loop"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_block"
}
}
]
},
"use_directive": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "segment",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "::"
},
{
"type": "FIELD",
"name": "segment",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "::"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "imported_type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "imported_type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "imported_type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "imported_type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
}
]
},
{
"type": "STRING",
"value": "}"
},
{
"type": "STRING",
"value": "from"
},
{
"type": "FIELD",
"name": "from_literal",
"content": {
"type": "SYMBOL",
"name": "string_literal"
}
}
]
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"return_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "return"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"uzumaki_keyword": {
"type": "STRING",
"value": "@"
},
"mut_keyword": {
"type": "STRING",
"value": "mut"
},
"unary_not": {
"type": "STRING",
"value": "!"
},
"unary_minus": {
"type": "STRING",
"value": "-"
},
"unary_bitnot": {
"type": "STRING",
"value": "~"
},
"bool_literal": {
"type": "CHOICE",
"members": [
{
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "true"
}
},
{
"type": "TOKEN",
"content": {
"type": "STRING",
"value": "false"
}
}
]
},
"string_literal": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_string_literal_content"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "\""
}
]
},
"_string_literal_content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "PATTERN",
"value": "[^\"\\\\\\n]+"
}
}
},
"number_literal": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1001,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "PATTERN",
"value": "\\d+"
}
]
}
}
},
"unit_literal": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ")"
}
}
]
},
"array_literal": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"qualified_identifier": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
}
]
},
"_name": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "type_qualified_name"
},
{
"type": "SYMBOL",
"name": "qualified_name"
},
{
"type": "SYMBOL",
"name": "_simple_name"
}
]
},
"type_qualified_name": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "alias",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "::"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_simple_name"
}
}
]
},
"_simple_name": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "generic_name"
}
]
},
"qualified_name": {
"type": "PREC",
"value": 2000,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "qualifier",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": "."
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_simple_name"
}
}
]
}
},
"generic_name": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "base_type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "type_argument_list"
}
]
},
"_bracketed_generic_name": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "generic_name"
},
{
"type": "STRING",
"value": ")"
}
]
},
"type_argument_list_definition": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "'"
}
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "'"
}
}
]
}
}
]
}
},
"type_argument_list": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "'"
}
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_type"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "'"
}
}
]
}
}
]
}
},
"_reserved_identifier": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "constructor"
},
{
"type": "STRING",
"value": "proof"
},
{
"type": "STRING",
"value": "uzumaki"
}
]
},
"_identifier": {
"type": "PATTERN",
"value": "[A-Za-z_]\\w*"
},
"identifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_identifier"
},
{
"type": "SYMBOL",
"name": "_reserved_identifier"
}
]
},
"_docstring": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "PATTERN",
"value": "\\/\\/\\/[^\\n\\r]*"
}
}
},
"_comment": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 0,
"content": {
"type": "PATTERN",
"value": "\\/\\/[^\\n\\r]*"
}
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "_docstring"
},
{
"type": "SYMBOL",
"name": "_comment"
}
],
"conflicts": [
[
"_simple_name",
"generic_name"
],
[
"_lval_expression",
"_name"
],
[
"qualified_name",
"member_access_expression"
],
[
"_bracketed_generic_name",
"_simple_name"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}