{
"name": "hare",
"rules": {
"unit": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "imports"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "declarations"
},
{
"type": "BLANK"
}
]
}
]
},
"imports": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "use_statement"
}
},
"use_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "use"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "::"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "name_list"
},
{
"type": "STRING",
"value": "}"
},
{
"type": "STRING",
"value": ";"
}
]
}
]
}
]
},
"name_list": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "name_list"
}
]
}
]
},
"declarations": {
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "export"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "declaration"
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"declaration": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "global_declaration"
},
{
"type": "SYMBOL",
"name": "constant_declaration"
},
{
"type": "SYMBOL",
"name": "type_declaration"
},
{
"type": "SYMBOL",
"name": "function_declaration"
}
]
},
"global_declaration": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "let"
},
{
"type": "SYMBOL",
"name": "global_bindings"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "const"
},
{
"type": "SYMBOL",
"name": "global_bindings"
}
]
}
]
},
"global_bindings": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "global_binding"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "global_bindings"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"global_binding": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "decl_attr"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"decl_attr": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@symbol"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "string_constant"
},
{
"type": "STRING",
"value": ")"
}
]
},
"constant_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "def"
},
{
"type": "SYMBOL",
"name": "constant_bindings"
}
]
},
"constant_bindings": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "constant_binding"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "constant_bindings"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"constant_binding": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"type_declaration": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "type_bindings"
}
]
},
"type_bindings": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type_bindings"
}
]
}
]
},
"function_declaration": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "fndec_attrs"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "fn"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "prototype"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"fndec_attrs": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "fndec_attr"
}
},
"fndec_attr": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@fini"
},
{
"type": "STRING",
"value": "@init"
},
{
"type": "STRING",
"value": "@test"
},
{
"type": "SYMBOL",
"name": "fntype_attr"
},
{
"type": "SYMBOL",
"name": "decl_attr"
}
]
},
"fntype_attr": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "@noreturn"
}
]
},
"type": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_inner_type"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "BLANK"
}
]
}
]
},
"_inner_type": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "const"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "storage_class"
}
]
},
"storage_class": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "scalar_type"
},
{
"type": "SYMBOL",
"name": "struct_type"
},
{
"type": "SYMBOL",
"name": "union_type"
},
{
"type": "SYMBOL",
"name": "tuple_type"
},
{
"type": "SYMBOL",
"name": "tagged_union_type"
},
{
"type": "SYMBOL",
"name": "slice_array_type"
},
{
"type": "SYMBOL",
"name": "function_type"
},
{
"type": "SYMBOL",
"name": "alias_type"
},
{
"type": "SYMBOL",
"name": "unwrapped_alias"
}
]
},
"scalar_type": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_type"
},
{
"type": "SYMBOL",
"name": "floating_type"
},
{
"type": "SYMBOL",
"name": "enum_type"
},
{
"type": "SYMBOL",
"name": "pointer_type"
},
{
"type": "STRING",
"value": "rune"
},
{
"type": "STRING",
"value": "str"
},
{
"type": "STRING",
"value": "bool"
},
{
"type": "STRING",
"value": "void"
}
]
},
"integer_type": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "i8"
},
{
"type": "STRING",
"value": "i16"
},
{
"type": "STRING",
"value": "i32"
},
{
"type": "STRING",
"value": "i64"
},
{
"type": "STRING",
"value": "u8"
},
{
"type": "STRING",
"value": "u16"
},
{
"type": "STRING",
"value": "u32"
},
{
"type": "STRING",
"value": "u64"
},
{
"type": "STRING",
"value": "int"
},
{
"type": "STRING",
"value": "uint"
},
{
"type": "STRING",
"value": "size"
},
{
"type": "STRING",
"value": "uintptr"
},
{
"type": "STRING",
"value": "char"
}
]
},
"floating_type": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "f32"
},
{
"type": "STRING",
"value": "f64"
}
]
},
"enum_type": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "enum"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "enum_values"
},
{
"type": "STRING",
"value": "}"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "enum"
},
{
"type": "SYMBOL",
"name": "integer_type"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "enum_values"
},
{
"type": "STRING",
"value": "}"
}
]
}
]
},
"enum_values": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "enum_value"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "enum_value"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "enum_values"
}
]
}
]
},
"enum_value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"pointer_type": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "nullable"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
}
]
},
"struct_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "struct"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "struct_union_fields"
},
{
"type": "STRING",
"value": "}"
}
]
},
"union_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "union"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "struct_union_fields"
},
{
"type": "STRING",
"value": "}"
}
]
},
"struct_union_fields": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "struct_union_field"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "struct_union_field"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "struct_union_fields"
}
]
}
]
},
"struct_union_field": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "offset_specifier"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SYMBOL",
"name": "struct_type"
},
{
"type": "SYMBOL",
"name": "union_type"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
]
},
"offset_specifier": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@offset"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"tuple_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "tuple_types"
},
{
"type": "STRING",
"value": ")"
}
]
},
"tuple_types": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "tuple_types"
}
]
}
]
},
"tagged_union_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "tagged_types"
},
{
"type": "STRING",
"value": ")"
}
]
},
"tagged_types": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "|"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "|"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
]
},
"slice_array_type": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "]"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "logical_or_expression"
},
{
"type": "STRING",
"value": "]"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "]"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "STRING",
"value": "_"
},
{
"type": "STRING",
"value": "]"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
}
]
},
"function_type": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "fntype_attr"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "fn"
},
{
"type": "SYMBOL",
"name": "prototype"
}
]
},
"prototype": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "_inner_type"
}
]
},
"parameter_list": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "STRING",
"value": "..."
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "STRING",
"value": ","
},
{
"type": "STRING",
"value": "..."
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"parameters": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parameter"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "parameters"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "parameter"
}
]
}
]
},
"parameter": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "_"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
]
},
"alias_type": {
"type": "SYMBOL",
"name": "identifier"
},
"unwrapped_alias": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"constant": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_constant"
},
{
"type": "SYMBOL",
"name": "floating_constant"
},
{
"type": "SYMBOL",
"name": "rune_constant"
},
{
"type": "SYMBOL",
"name": "string_constant"
},
{
"type": "STRING",
"value": "true"
},
{
"type": "STRING",
"value": "false"
},
{
"type": "STRING",
"value": "null"
},
{
"type": "STRING",
"value": "void"
}
]
},
"integer_constant": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0x"
},
{
"type": "SYMBOL",
"name": "hex_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_suffix"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0o"
},
{
"type": "SYMBOL",
"name": "octal_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_suffix"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "0b"
},
{
"type": "SYMBOL",
"name": "binary_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_suffix"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "decimal_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "exponent"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_suffix"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"hex_digits": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "hex_digit"
}
},
"hex_digit": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
},
{
"type": "STRING",
"value": "8"
},
{
"type": "STRING",
"value": "9"
},
{
"type": "STRING",
"value": "A"
},
{
"type": "STRING",
"value": "B"
},
{
"type": "STRING",
"value": "C"
},
{
"type": "STRING",
"value": "D"
},
{
"type": "STRING",
"value": "E"
},
{
"type": "STRING",
"value": "F"
},
{
"type": "STRING",
"value": "a"
},
{
"type": "STRING",
"value": "b"
},
{
"type": "STRING",
"value": "c"
},
{
"type": "STRING",
"value": "d"
},
{
"type": "STRING",
"value": "e"
},
{
"type": "STRING",
"value": "f"
}
]
},
"octal_digits": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "octal_digit"
}
},
"octal_digit": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
}
]
},
"binary_digits": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "binary_digit"
}
},
"binary_digit": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "STRING",
"value": "1"
}
]
},
"decimal_digits": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "decimal_digit"
}
},
"decimal_digit": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
},
{
"type": "STRING",
"value": "8"
},
{
"type": "STRING",
"value": "9"
}
]
},
"integer_suffix": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "i"
},
{
"type": "STRING",
"value": "u"
},
{
"type": "STRING",
"value": "z"
},
{
"type": "STRING",
"value": "i8"
},
{
"type": "STRING",
"value": "i16"
},
{
"type": "STRING",
"value": "i32"
},
{
"type": "STRING",
"value": "i64"
},
{
"type": "STRING",
"value": "u8"
},
{
"type": "STRING",
"value": "u16"
},
{
"type": "STRING",
"value": "u32"
},
{
"type": "STRING",
"value": "u64"
}
]
},
"floating_constant": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "decimal_digits"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "decimal_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "exponent"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "floating_suffix"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "decimal_digits"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "exponent"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "floating_suffix"
}
]
}
]
},
"exponent": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "e"
},
{
"type": "SYMBOL",
"name": "decimal_digits"
}
]
},
"floating_suffix": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "f32"
},
{
"type": "STRING",
"value": "f64"
}
]
},
"rune_constant": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "SYMBOL",
"name": "rune"
},
{
"type": "STRING",
"value": "'"
}
]
},
"rune": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\']"
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
},
"escape_sequence": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "named_escape"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"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}"
}
]
}
}
]
}
]
},
"named_escape": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "0"
},
{
"type": "STRING",
"value": "n"
},
{
"type": "STRING",
"value": "r"
},
{
"type": "STRING",
"value": "t"
},
{
"type": "STRING",
"value": "b"
},
{
"type": "STRING",
"value": "f"
},
{
"type": "STRING",
"value": "a"
},
{
"type": "STRING",
"value": "v"
},
{
"type": "STRING",
"value": "\\"
},
{
"type": "STRING",
"value": "'"
},
{
"type": "STRING",
"value": "\""
}
]
}
}
]
},
"string_constant": {
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string_chars"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "\""
}
]
}
},
"string_chars": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "string_char"
}
},
"string_char": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\\n\"]"
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
},
"array_literal": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "array_members"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"array_members": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "..."
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "array_members"
}
]
}
]
},
"enum_literal": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "::"
},
{
"type": "SYMBOL",
"name": "name"
}
]
},
"struct_literal": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "struct"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "field_values"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "struct_initializer"
},
{
"type": "STRING",
"value": "}"
}
]
}
]
},
"struct_initializer": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "field_values"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"field_values": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "field_value"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "field_values"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "field_value"
}
]
}
]
},
"field_value": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SYMBOL",
"name": "struct_literal"
}
]
},
"plain_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "constant"
},
{
"type": "SYMBOL",
"name": "array_literal"
},
{
"type": "SYMBOL",
"name": "enum_literal"
},
{
"type": "SYMBOL",
"name": "struct_literal"
}
]
},
"nested_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "plain_expression"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "tuple_items"
},
{
"type": "STRING",
"value": ")"
}
]
}
]
},
"tuple_items": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "tuple_items"
}
]
}
]
},
"allocation_expression": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "alloc"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "alloc"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "append"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "object_selector"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "append_values"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "append"
},
{
"type": "STRING",
"value": "("
},
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "append_values"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "free"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "delete"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "slicing_expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "delete"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "indexing_expression"
},
{
"type": "STRING",
"value": ")"
}
]
}
]
},
"append_values": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "append_values"
}
]
}
]
},
"assertion_expression": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "assert"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "assert"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "string_constant"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "static"
},
{
"type": "STRING",
"value": "assert"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "static"
},
{
"type": "STRING",
"value": "assert"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "string_constant"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "abort"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string_constant"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
}
]
},
"call_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "argument_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"argument_list": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "..."
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "argument_list"
}
]
}
]
},
"measurement_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "size_expression"
},
{
"type": "SYMBOL",
"name": "length_expression"
},
{
"type": "SYMBOL",
"name": "offset_expression"
}
]
},
"size_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "size"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ")"
}
]
},
"length_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "len"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"offset_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "offset"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "field_access_expression"
},
{
"type": "STRING",
"value": ")"
}
]
},
"field_access_expression": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "name"
}
]
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "FIELD",
"name": "selector",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "integer_constant"
}
]
}
}
]
}
]
},
"indexing_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": "]"
}
]
},
"slicing_expression": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "STRING",
"value": "["
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ".."
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
"error_propagation": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "STRING",
"value": "?"
}
]
},
"postfix_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "nested_expression"
},
{
"type": "SYMBOL",
"name": "allocation_expression"
},
{
"type": "SYMBOL",
"name": "assertion_expression"
},
{
"type": "SYMBOL",
"name": "call_expression"
},
{
"type": "SYMBOL",
"name": "field_access_expression"
},
{
"type": "SYMBOL",
"name": "indexing_expression"
},
{
"type": "SYMBOL",
"name": "measurement_expression"
},
{
"type": "SYMBOL",
"name": "slicing_expression"
},
{
"type": "SYMBOL",
"name": "error_propagation"
}
]
},
"object_selector": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "indexing_expression"
},
{
"type": "SYMBOL",
"name": "field_access_expression"
}
]
},
"unary_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "postfix_expression"
},
{
"type": "PREC_RIGHT",
"value": 13,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "STRING",
"value": "~"
},
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "*"
}
]
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "unary_expression"
}
}
]
}
},
{
"type": "PREC_RIGHT",
"value": 13,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "address",
"content": {
"type": "STRING",
"value": "&"
}
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "object_selector"
}
}
]
}
}
]
},
"cast_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "PREC_LEFT",
"value": 12,
"content": {
"type": "FIELD",
"name": "type_cast",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "cast_expression"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
},
{
"type": "PREC_LEFT",
"value": 12,
"content": {
"type": "FIELD",
"name": "as_cast",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "cast_expression"
},
{
"type": "STRING",
"value": "as"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
},
{
"type": "PREC_LEFT",
"value": 12,
"content": {
"type": "FIELD",
"name": "is_cast",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "cast_expression"
},
{
"type": "STRING",
"value": "is"
},
{
"type": "SYMBOL",
"name": "type"
}
]
}
}
}
]
},
"multiplicative_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "cast_expression"
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "cast_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "SYMBOL",
"name": "cast_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 11,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "STRING",
"value": "%"
},
{
"type": "SYMBOL",
"name": "cast_expression"
}
]
}
}
]
},
"additive_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "additive_expression"
},
{
"type": "STRING",
"value": "+"
},
{
"type": "SYMBOL",
"name": "multiplicative_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "additive_expression"
},
{
"type": "STRING",
"value": "-"
},
{
"type": "SYMBOL",
"name": "multiplicative_expression"
}
]
}
}
]
},
"shift_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "additive_expression"
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "STRING",
"value": "<<"
},
{
"type": "SYMBOL",
"name": "cast_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 9,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "multiplicative_expression"
},
{
"type": "STRING",
"value": ">>"
},
{
"type": "SYMBOL",
"name": "cast_expression"
}
]
}
}
]
},
"and_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "shift_expression"
},
{
"type": "PREC_LEFT",
"value": 6,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "and_expression"
},
{
"type": "STRING",
"value": "&"
},
{
"type": "SYMBOL",
"name": "shift_expression"
}
]
}
}
]
},
"exclusive_or_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "and_expression"
},
{
"type": "PREC_LEFT",
"value": 5,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "exclusive_or_expression"
},
{
"type": "STRING",
"value": "^"
},
{
"type": "SYMBOL",
"name": "and_expression"
}
]
}
}
]
},
"inclusive_or_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "exclusive_or_expression"
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
},
{
"type": "STRING",
"value": "|"
},
{
"type": "SYMBOL",
"name": "exclusive_or_expression"
}
]
}
}
]
},
"comparison_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
},
{
"type": "PREC_LEFT",
"value": 8,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "STRING",
"value": "<"
},
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 8,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "STRING",
"value": ">"
},
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 8,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "STRING",
"value": "<="
},
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 8,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "STRING",
"value": ">="
},
{
"type": "SYMBOL",
"name": "inclusive_or_expression"
}
]
}
}
]
},
"equality_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "comparison_expression"
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "equality_expression"
},
{
"type": "STRING",
"value": "=="
},
{
"type": "SYMBOL",
"name": "comparison_expression"
}
]
}
},
{
"type": "PREC_LEFT",
"value": 7,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "equality_expression"
},
{
"type": "STRING",
"value": "!="
},
{
"type": "SYMBOL",
"name": "comparison_expression"
}
]
}
}
]
},
"logical_and_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "equality_expression"
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "logical_and_expression"
},
{
"type": "STRING",
"value": "&&"
},
{
"type": "SYMBOL",
"name": "equality_expression"
}
]
}
}
]
},
"logical_xor_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "logical_and_expression"
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "logical_xor_expression"
},
{
"type": "STRING",
"value": "^^"
},
{
"type": "SYMBOL",
"name": "logical_and_expression"
}
]
}
}
]
},
"logical_or_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "logical_xor_expression"
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "logical_or_expression"
},
{
"type": "STRING",
"value": "||"
},
{
"type": "SYMBOL",
"name": "logical_xor_expression"
}
]
}
}
]
},
"if_expression": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "SYMBOL",
"name": "conditional_branch"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "SYMBOL",
"name": "conditional_branch"
},
{
"type": "STRING",
"value": "else"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"conditional_branch": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"for_loop": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "for"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "for_predicate"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"for_predicate": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "binding",
"content": {
"type": "SYMBOL",
"name": "binding_list"
}
},
{
"type": "STRING",
"value": ";"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ";"
},
{
"type": "FIELD",
"name": "afterthought",
"content": {
"type": "SYMBOL",
"name": "expression"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "binding_list"
},
{
"type": "STRING",
"value": ";"
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ";"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"label": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "name"
}
]
},
"switch_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "switch"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "switch_cases"
},
{
"type": "STRING",
"value": "}"
}
]
},
"switch_cases": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "switch_case"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "switch_case"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "switch_cases"
}
]
}
]
},
"switch_case": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "case_options"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"case_options": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "case_options"
}
]
}
]
},
"match_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "match"
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ")"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "match_cases"
},
{
"type": "STRING",
"value": "}"
}
]
},
"match_cases": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "match_case"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "match_case"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "match_cases"
}
]
}
]
},
"match_case": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"assignment": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "object_selector"
},
{
"type": "SYMBOL",
"name": "assignment_op"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "assignment_op"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "slicing_expression"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
}
},
"assignment_op": {
"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": ">>="
},
{
"type": "STRING",
"value": "&="
},
{
"type": "STRING",
"value": "|="
},
{
"type": "STRING",
"value": "^="
}
]
},
"binding_list": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "static"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "let"
},
{
"type": "SYMBOL",
"name": "bindings"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "static"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "const"
},
{
"type": "SYMBOL",
"name": "bindings"
}
]
}
]
},
"bindings": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "binding"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "bindings"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"binding": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "binding_names"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "binding_names"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
}
]
},
"binding_names": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "name"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "binding_names"
}
]
}
]
},
"deferred_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "defer"
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"expression_list": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "STRING",
"value": ";"
},
{
"type": "SYMBOL",
"name": "expression_list"
}
]
}
]
},
"control_statement": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "break"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "continue"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "return"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "binding_list"
},
{
"type": "SYMBOL",
"name": "deferred_expression"
},
{
"type": "SYMBOL",
"name": "logical_or_expression"
},
{
"type": "SYMBOL",
"name": "if_expression"
},
{
"type": "SYMBOL",
"name": "for_loop"
},
{
"type": "SYMBOL",
"name": "switch_expression"
},
{
"type": "SYMBOL",
"name": "match_expression"
},
{
"type": "SYMBOL",
"name": "control_statement"
},
{
"type": "SYMBOL",
"name": "compound_expression"
}
]
},
"compound_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "expression_list"
},
{
"type": "STRING",
"value": "}"
}
]
},
"identifier": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "::"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"name": {
"type": "PATTERN",
"value": "[a-zA-Z_]\\w*"
},
"comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "//"
},
{
"type": "PATTERN",
"value": "(\\\\(.|\\r?\\n)|[^\\\\\\n])*"
}
]
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s|\\\\\\r?\\n"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [
[
"integer_constant",
"floating_constant"
],
[
"identifier"
],
[
"bindings"
],
[
"for_predicate",
"expression"
],
[
"if_expression"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}