{ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "odin", "word": "identifier", "rules": { "source_file": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "declaration" }, { "type": "SYMBOL", "name": "_separator" } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "declaration" }, { "type": "BLANK" } ] } ] }, "block": { "type": "PREC", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "statement" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_separator" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "statement" } ] }, { "type": "BLANK" } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] } }, "tagged_block": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "SYMBOL", "name": "block" } ] }, "declaration": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "build_tag" }, { "type": "SYMBOL", "name": "package_declaration" }, { "type": "SYMBOL", "name": "import_declaration" }, { "type": "SYMBOL", "name": "procedure_declaration" }, { "type": "SYMBOL", "name": "overloaded_procedure_declaration" }, { "type": "SYMBOL", "name": "struct_declaration" }, { "type": "SYMBOL", "name": "enum_declaration" }, { "type": "SYMBOL", "name": "union_declaration" }, { "type": "SYMBOL", "name": "bit_field_declaration" }, { "type": "SYMBOL", "name": "variable_declaration" }, { "type": "SYMBOL", "name": "var_declaration" }, { "type": "SYMBOL", "name": "const_declaration" }, { "type": "SYMBOL", "name": "const_type_declaration" }, { "type": "SYMBOL", "name": "foreign_block" }, { "type": "SYMBOL", "name": "when_statement" }, { "type": "SYMBOL", "name": "_expression_no_tag" } ] }, "build_tag": { "type": "SEQ", "members": [ { "type": "STRING", "value": "#+" }, { "type": "PATTERN", "value": ".+" } ] }, "package_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "package" }, { "type": "SYMBOL", "name": "identifier" } ] }, "import_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "foreign" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "import" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "alias", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "identifier" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] } ] } ] }, "procedure_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "procedure" } ] }, "procedure": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "proc" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "calling_convention" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "parameters" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "->" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "named_type" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "where_clause" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "block" }, { "type": "SYMBOL", "name": "uninitialized" } ] }, { "type": "BLANK" } ] } ] } }, "where_clause": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "where" }, { "type": "SEQ", "members": [ { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SYMBOL", "name": "expression" } } ] } } ] } ] } }, "calling_convention": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\"odin\"" }, { "type": "STRING", "value": "\"contextless\"" }, { "type": "STRING", "value": "\"stdcall\"" }, { "type": "STRING", "value": "\"std\"" }, { "type": "STRING", "value": "\"cdecl\"" }, { "type": "STRING", "value": "\"c\"" }, { "type": "STRING", "value": "\"fastcall\"" }, { "type": "STRING", "value": "\"fast\"" }, { "type": "STRING", "value": "\"none\"" }, { "type": "STRING", "value": "\"system\"" } ] }, "overloaded_procedure_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "STRING", "value": "proc" }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "struct_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "STRING", "value": "struct" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "polymorphic_parameters" }, { "type": "BLANK" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "number" } ] }, { "type": "BLANK" } ] } ] } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "where_clause" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "enum_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "STRING", "value": "enum" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "union_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "STRING", "value": "union" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "polymorphic_parameters" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "bit_field_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "::" }, { "type": "STRING", "value": "bit_field" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "expression" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "variable_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "STRING", "value": ":=" }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "procedure" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "procedure" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, "const_declaration": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "STRING", "value": "::" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SEQ", "members": [ { "type": "ALIAS", "content": { "type": "STRING", "value": "#type" }, "named": true, "value": "tag" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "bit_set_type" }, { "type": "SYMBOL", "name": "pointer_type" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SEQ", "members": [ { "type": "ALIAS", "content": { "type": "STRING", "value": "#type" }, "named": true, "value": "tag" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "bit_set_type" }, { "type": "SYMBOL", "name": "pointer_type" } ] } ] } } ] } ] }, "const_type_declaration": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "expression" } ] } }, "foreign_block": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "foreign" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "block" } ] }, "attributes": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "attribute" } }, "attribute": { "type": "SEQ", "members": [ { "type": "STRING", "value": "@" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "STRING", "value": ")" } ] } ] } ] }, "parameters": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "parameter" }, { "type": "SYMBOL", "name": "default_parameter" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "parameter" }, { "type": "SYMBOL", "name": "default_parameter" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "parameter": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_param_header" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_param_header" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_param_type" }, { "type": "BLANK" } ] } ] } }, "_param_header": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "variadic_type" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "field_type" }, { "type": "SYMBOL", "name": "_procedure_type" } ] } ] }, "_param_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, "default_parameter": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":=" }, { "type": "SYMBOL", "name": "expression" } ] }, "polymorphic_parameters": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] } ] } } ] }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] } ] } } ] }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" } ] } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "field": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] } ] } } ] }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "BLANK" } ] } ] } }, "statement": { "type": "PREC", "value": 1, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "procedure_declaration" }, { "type": "SYMBOL", "name": "overloaded_procedure_declaration" }, { "type": "SYMBOL", "name": "struct_declaration" }, { "type": "SYMBOL", "name": "enum_declaration" }, { "type": "SYMBOL", "name": "union_declaration" }, { "type": "SYMBOL", "name": "bit_field_declaration" }, { "type": "SYMBOL", "name": "const_declaration" }, { "type": "SYMBOL", "name": "import_declaration" }, { "type": "SYMBOL", "name": "assignment_statement" }, { "type": "SYMBOL", "name": "update_statement" }, { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "when_statement" }, { "type": "SYMBOL", "name": "for_statement" }, { "type": "SYMBOL", "name": "switch_statement" }, { "type": "SYMBOL", "name": "defer_statement" }, { "type": "SYMBOL", "name": "break_statement" }, { "type": "SYMBOL", "name": "continue_statement" }, { "type": "SYMBOL", "name": "fallthrough_statement" }, { "type": "SYMBOL", "name": "label_statement" }, { "type": "SYMBOL", "name": "using_statement" }, { "type": "SYMBOL", "name": "return_statement" }, { "type": "SYMBOL", "name": "_expression_no_tag" }, { "type": "SYMBOL", "name": "var_declaration" }, { "type": "SYMBOL", "name": "foreign_block" }, { "type": "SYMBOL", "name": "tagged_block" }, { "type": "SYMBOL", "name": "block" } ] } }, "assignment_statement": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": ":=" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "procedure" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "procedure" } ] } ] } } ] } ] } }, "update_statement": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "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": "||=" }, { "type": "STRING", "value": "&&=" }, { "type": "STRING", "value": "&~=" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] } ] }, "if_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "initializer", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "assignment_statement" }, { "type": "SYMBOL", "name": "update_statement" }, { "type": "SYMBOL", "name": "var_declaration" } ] } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "block" } }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "statement" } } ] } ] }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "else_if_clause" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "else_clause" }, { "type": "BLANK" } ] } ] } }, "else_if_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "STRING", "value": "if" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "initializer", "content": { "type": "SYMBOL", "name": "assignment_statement" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "block" } }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "statement" } } ] } ] } ] }, "else_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "block" } }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "statement" } } ] } ] } ] }, "when_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "when" }, { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "block" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "SYMBOL", "name": "statement" } ] } ] }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "else_when_clause" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "else_clause" }, { "type": "BLANK" } ] } ] } }, "else_when_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "STRING", "value": "when" }, { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "block" } ] }, "for_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "initializer", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "assignment_statement" }, { "type": "SYMBOL", "name": "update_statement" }, { "type": "SYMBOL", "name": "var_declaration" } ] } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "post", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "update_statement" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_simple_assignment_statement" }, "named": true, "value": "assignment_statement" } ] } }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] } ] }, { "type": "SYMBOL", "name": "_for_in_expression" } ] }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "consequence", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "block" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "SYMBOL", "name": "statement" } ] } ] } } ] }, "_for_in_expression": { "type": "SEQ", "members": [ { "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": "in" }, { "type": "SYMBOL", "name": "expression" } ] }, "_simple_assignment_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": ":=" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" } ] } ] } } ] } ] }, "switch_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "switch" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "in" }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "condition", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "assignment_statement" }, { "type": "SYMBOL", "name": "_separator" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "switch_case" } }, { "type": "STRING", "value": "}" } ] }, "switch_case": { "type": "SEQ", "members": [ { "type": "STRING", "value": "case" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "condition", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "pointer_type" } ] } }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "FIELD", "name": "condition", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "pointer_type" } ] } } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "statement" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_separator" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "statement" } ] }, { "type": "BLANK" } ] } ] } } ] }, { "type": "BLANK" } ] } ] }, "defer_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "defer" }, { "type": "SYMBOL", "name": "statement" } ] }, "break_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "break" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "BLANK" } ] } ] }, "continue_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "continue" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "BLANK" } ] } ] }, "fallthrough_statement": { "type": "STRING", "value": "fallthrough" }, "var_declaration": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attributes" }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": ":" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] } ] }, { "type": "BLANK" } ] } ] } ] } ] } }, "return_statement": { "type": "PREC_RIGHT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "return" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "_procedure_type" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_nl_comma" }, "named": false, "value": "," } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "_procedure_type" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] } ] } }, "label_statement": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "for_statement" }, { "type": "SYMBOL", "name": "switch_statement" }, { "type": "SYMBOL", "name": "block" } ] } ] }, "using_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "using" }, { "type": "SYMBOL", "name": "expression" } ] }, "expression": { "type": "PREC_LEFT", "value": 0, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression_no_tag" }, { "type": "SYMBOL", "name": "tag" } ] } }, "_expression_no_tag": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "unary_expression" }, { "type": "SYMBOL", "name": "binary_expression" }, { "type": "SYMBOL", "name": "ternary_expression" }, { "type": "SYMBOL", "name": "call_expression" }, { "type": "SYMBOL", "name": "selector_call_expression" }, { "type": "SYMBOL", "name": "member_expression" }, { "type": "SYMBOL", "name": "index_expression" }, { "type": "SYMBOL", "name": "slice_expression" }, { "type": "SYMBOL", "name": "range_expression" }, { "type": "SYMBOL", "name": "cast_expression" }, { "type": "SYMBOL", "name": "parenthesized_expression" }, { "type": "SYMBOL", "name": "in_expression" }, { "type": "SYMBOL", "name": "variadic_expression" }, { "type": "SYMBOL", "name": "or_return_expression" }, { "type": "SYMBOL", "name": "or_continue_expression" }, { "type": "SYMBOL", "name": "or_break_expression" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "address" }, { "type": "SYMBOL", "name": "map_type" }, { "type": "SYMBOL", "name": "distinct_type" }, { "type": "SYMBOL", "name": "matrix_type" }, { "type": "SYMBOL", "name": "literal" }, { "type": "STRING", "value": "?" } ] }, "unary_expression": { "type": "PREC_RIGHT", "value": 16, "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": "expression" } } ] } }, "binary_expression": { "type": "CHOICE", "members": [ { "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": 3, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "or_else" } }, { "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": "STRING", "value": "&&" } }, { "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": ">" } }, { "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": ">=" } }, { "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": "<=" } }, { "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": "<" } }, { "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": "==" } }, { "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": "!=" } }, { "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": "~=" } }, { "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": "|" } }, { "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": 9, "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": "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": "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": "STRING", "value": ">>" } }, { "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": 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": 13, "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": 13, "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": 13, "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": 13, "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" } } ] } } ] }, "ternary_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "condition", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression_no_tag" }, { "type": "SYMBOL", "name": "struct" } ] } }, { "type": "CHOICE", "members": [ { "type": "PREC", "value": 2, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "?" }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "expression" } } ] } }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "if" }, { "type": "STRING", "value": "when" } ] }, { "type": "FIELD", "name": "consequence", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "STRING", "value": "else" }, { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "expression" } } ] } ] } ] } }, "call_expression": { "type": "PREC_LEFT", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "function", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "SYMBOL", "name": "_expression_no_tag" }, { "type": "SYMBOL", "name": "tag" } ] } }, { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "argument", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "struct_type" }, { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "procedure" } ] } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" } ] } ] }, { "type": "BLANK" } ] } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "argument", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "struct_type" }, { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "procedure" } ] } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" } ] } ] }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] } }, "selector_call_expression": { "type": "PREC_LEFT", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "function", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "STRING", "value": "->" }, { "type": "SYMBOL", "name": "call_expression" } ] } }, "member_expression": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "." }, { "type": "SYMBOL", "name": "expression" } ] } }, "index_expression": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] } }, "slice_expression": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "start", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "end", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] } }, "range_expression": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "..=" }, { "type": "STRING", "value": "..<" } ] }, { "type": "SYMBOL", "name": "expression" } ] } }, "cast_expression": { "type": "PREC_LEFT", "value": 14, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "_procedure_type" } ] }, { "type": "STRING", "value": ")" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "cast" }, { "type": "STRING", "value": "transmute" } ] }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": ")" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "auto_cast" }, { "type": "SYMBOL", "name": "expression" } ] } ] } ] } }, "in_expression": { "type": "PREC_RIGHT", "value": -1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "in" }, { "type": "STRING", "value": "not_in" } ] }, { "type": "SYMBOL", "name": "expression" } ] } }, "variadic_expression": { "type": "PREC_LEFT", "value": 20, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": ".." }, { "type": "SYMBOL", "name": "expression" } ] } }, "parenthesized_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ")" } ] }, "or_return_expression": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "or_return" } ] }, "or_continue_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "or_continue" }, { "type": "FIELD", "name": "label", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "BLANK" } ] } } ] } }, "or_break_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "or_break" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] } ] } }, "address": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "^" } ] }, "type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "pointer_type" }, { "type": "SYMBOL", "name": "variadic_type" }, { "type": "SYMBOL", "name": "array_type" }, { "type": "SYMBOL", "name": "map_type" }, { "type": "SYMBOL", "name": "union_type" }, { "type": "SYMBOL", "name": "bit_set_type" }, { "type": "SYMBOL", "name": "matrix_type" }, { "type": "SYMBOL", "name": "field_type" }, { "type": "SYMBOL", "name": "tuple_type" }, { "type": "SYMBOL", "name": "struct_type" }, { "type": "SYMBOL", "name": "enum_type" }, { "type": "SYMBOL", "name": "bit_field_type" }, { "type": "SYMBOL", "name": "constant_type" }, { "type": "SYMBOL", "name": "specialized_type" }, { "type": "SYMBOL", "name": "_procedure_type" }, { "type": "SYMBOL", "name": "distinct_type" }, { "type": "SYMBOL", "name": "empty_type" }, { "type": "SYMBOL", "name": "polymorphic_type" }, { "type": "SYMBOL", "name": "conditional_type" }, { "type": "STRING", "value": "..." } ] } }, "pointer_type": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "^" }, { "type": "SYMBOL", "name": "type" } ] } }, "variadic_type": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": ".." }, { "type": "SYMBOL", "name": "type" } ] } }, "array_type": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "dynamic" }, { "type": "STRING", "value": "^" }, { "type": "STRING", "value": "?" }, { "type": "SYMBOL", "name": "expression" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "BLANK" } ] } ] } }, "map_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "map" }, { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" } ] } }, "union_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "union" }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] } }, "bit_set_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "bit_set" }, { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "constant_type" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "matrix_type": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "matrix" }, { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "constant_type" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "constant_type" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" } ] } }, "field_type": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "IMMEDIATE_TOKEN", "content": { "type": "STRING", "value": "." } }, { "type": "SYMBOL", "name": "identifier" } ] } } ] }, "tuple_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "named_type" }, { "type": "SYMBOL", "name": "default_type" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "named_type" }, { "type": "SYMBOL", "name": "default_type" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "struct_type": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "struct" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "polymorphic_parameters" }, { "type": "BLANK" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "number" }, { "type": "BLANK" } ] } ] } }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_struct_members" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] } } ] } }, "_struct_members": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "struct_member" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "struct_member" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, "struct_member": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "using" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "identifier" } ] } ] } } ] }, { "type": "STRING", "value": ":" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "BLANK" } ] } ] }, "enum_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "enum" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "underlying_type", "content": { "type": "SYMBOL", "name": "type" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "bit_field_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "bit_field" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "expression" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "named_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "type" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "literal" } ] }, { "type": "BLANK" } ] } ] } }, "default_type": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "STRING", "value": ":=" }, { "type": "SYMBOL", "name": "expression" } ] }, "constant_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "$" }, { "type": "SYMBOL", "name": "type" } ] } }, "specialized_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "/" }, { "type": "SYMBOL", "name": "type" } ] } }, "_procedure_type": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "procedure" }, "named": true, "value": "procedure_type" }, "distinct_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "distinct" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "tag" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type" } ] } }, "empty_type": { "type": "STRING", "value": "!" }, "polymorphic_type": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "literal" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "literal" } ] } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "conditional_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "when" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "else" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": ")" } ] }, "literal": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "struct" }, { "type": "SYMBOL", "name": "map" }, { "type": "SYMBOL", "name": "bit_set" }, { "type": "SYMBOL", "name": "matrix" }, { "type": "SYMBOL", "name": "float" }, { "type": "SYMBOL", "name": "number" }, { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "character" }, { "type": "SYMBOL", "name": "boolean" }, { "type": "SYMBOL", "name": "nil" }, { "type": "SYMBOL", "name": "uninitialized" } ] } }, "struct": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "dynamic" }, { "type": "STRING", "value": "^" }, { "type": "STRING", "value": "?" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "field_identifier" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "identifier" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "struct_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "struct_field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "map": { "type": "SEQ", "members": [ { "type": "STRING", "value": "map" }, { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "bit_set": { "type": "SEQ", "members": [ { "type": "STRING", "value": "bit_set" }, { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "FIELD", "name": "underlying_type", "content": { "type": "SYMBOL", "name": "type" } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" }, { "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": "}" } ] }, "matrix": { "type": "SEQ", "members": [ { "type": "STRING", "value": "matrix" }, { "type": "STRING", "value": "[" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "]" }, { "type": "SYMBOL", "name": "type" }, { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "struct_field": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "_procedure_type" } ] } ] }, { "type": "BLANK" } ] } ] } }, "number": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "BLANK" } ] }, { "type": "PATTERN", "value": "[0-9][0-9_]*[ijk]?" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "BLANK" } ] }, { "type": "PATTERN", "value": "0[xh][0-9a-fA-F_]+[ijk]?" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "BLANK" } ] }, { "type": "PATTERN", "value": "0o[0-7][0-7]*[ijk]?" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "BLANK" } ] }, { "type": "PATTERN", "value": "0b[01][01_]*[ijk]?" } ] } ] } }, "string": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_string_literal" }, { "type": "SYMBOL", "name": "_raw_string_literal" } ] }, "_string_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string_content" }, { "type": "SYMBOL", "name": "escape_sequence" } ] } }, { "type": "STRING", "value": "\"" } ] }, "_raw_string_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "`" }, { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_raw_string_content" }, "named": true, "value": "string_content" } }, { "type": "STRING", "value": "`" } ] }, "character": { "type": "SEQ", "members": [ { "type": "STRING", "value": "'" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^'\\\\]" }, { "type": "SYMBOL", "name": "escape_sequence" } ] }, { "type": "STRING", "value": "'" } ] }, "string_content": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 1, "content": { "type": "PATTERN", "value": "[^\"\\\\]+" } } }, "_raw_string_content": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 1, "content": { "type": "PATTERN", "value": "[^`]+" } } }, "_escape_sequence": { "type": "CHOICE", "members": [ { "type": "PREC", "value": 2, "content": { "type": "IMMEDIATE_TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "PATTERN", "value": "[^abfnrtvxu'\\\"\\\\\\?]" } ] } } }, { "type": "PREC", "value": 1, "content": { "type": "SYMBOL", "name": "escape_sequence" } } ] }, "escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^xu0-7]" }, { "type": "PATTERN", "value": "[0-7]{1,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]+\\}" }, { "type": "PATTERN", "value": "U[0-9a-fA-F]{8}" } ] } ] } }, "boolean": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "true" }, { "type": "STRING", "value": "false" } ] }, "nil": { "type": "STRING", "value": "nil" }, "uninitialized": { "type": "STRING", "value": "---" }, "tag": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "#[a-zA-Z_][a-zA-Z0-9_]*" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "PATTERN", "value": "\\w*" }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] } }, "identifier": { "type": "PATTERN", "value": "[_\\p{XID_Start}][_\\p{XID_Continue}]*", "flags": "u" }, "field_identifier": { "type": "PREC", "value": -1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "." }, { "type": "SYMBOL", "name": "identifier" } ] } } ] } }, "keyword_identifier": { "type": "PREC", "value": -3, "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "nil" }, { "type": "STRING", "value": "false" }, { "type": "STRING", "value": "true" } ] } }, "_separator": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "STRING", "value": ";" } ] }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "//" }, { "type": "PATTERN", "value": "[^\\r\\n]*" } ] } } }, "extras": [ { "type": "SYMBOL", "name": "comment" }, { "type": "SYMBOL", "name": "block_comment" }, { "type": "PATTERN", "value": "\\s" }, { "type": "SYMBOL", "name": "_backslash" } ], "conflicts": [ [ "array_type" ], [ "_expression_no_tag", "struct" ] ], "precedences": [], "externals": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_backslash" }, { "type": "SYMBOL", "name": "_nl_comma" }, { "type": "SYMBOL", "name": "float" }, { "type": "SYMBOL", "name": "block_comment" }, { "type": "STRING", "value": "{" }, { "type": "STRING", "value": "\"" } ], "inline": [], "supertypes": [ "declaration", "expression", "literal", "statement" ] }