{
"name": "cairo",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_item"
}
},
"identifier": {
"type": "PATTERN",
"value": "[a-zA-Z_][a-zA-Z0-9_]*"
},
"_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_simple_identifier"
},
{
"type": "SYMBOL",
"name": "primitive_type"
},
{
"type": "SYMBOL",
"name": "path_expression"
},
{
"type": "SYMBOL",
"name": "literal_expression"
},
{
"type": "SYMBOL",
"name": "boolean_expression"
},
{
"type": "SYMBOL",
"name": "parenthesized_expression"
},
{
"type": "SYMBOL",
"name": "unary_expression"
},
{
"type": "SYMBOL",
"name": "binary_expression"
},
{
"type": "SYMBOL",
"name": "tuple_expression"
},
{
"type": "SYMBOL",
"name": "function_call_expression"
},
{
"type": "SYMBOL",
"name": "struct_ctor_call_expression"
},
{
"type": "SYMBOL",
"name": "block_expression"
},
{
"type": "SYMBOL",
"name": "match_expression"
},
{
"type": "SYMBOL",
"name": "if_expression"
},
{
"type": "SYMBOL",
"name": "error_propagation_expression"
}
]
},
"_simple_identifier": {
"type": "PREC",
"value": 1,
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
"primitive_type": {
"type": "PREC",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "felt"
},
{
"type": "STRING",
"value": "bool"
}
]
}
},
"path_expression": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_path_segment"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "::"
},
{
"type": "SYMBOL",
"name": "_path_segment"
}
]
}
}
]
}
},
"_path_segment": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "simple_path_segment"
},
{
"type": "SYMBOL",
"name": "generic_argument_path_segment"
}
]
},
"simple_path_segment": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
},
"generic_argument_path_segment": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "::"
},
{
"type": "FIELD",
"name": "generic_argument",
"content": {
"type": "SYMBOL",
"name": "_generic_arguments"
}
}
]
},
"_generic_arguments": {
"type": "PREC_RIGHT",
"value": 10,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
}
]
},
{
"type": "STRING",
"value": ">"
}
]
}
},
"boolean_expression": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "true"
},
{
"type": "STRING",
"value": "false"
}
]
},
"literal_expression": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "integer_literal"
}
]
},
"integer_literal": {
"type": "PATTERN",
"value": "[0-9]+"
},
"parenthesized_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"unary_expression": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "SYMBOL",
"name": "_unary_operator"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"_unary_operator": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "STRING",
"value": "-"
}
]
},
"binary_expression": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "operator",
"content": {
"type": "SYMBOL",
"name": "_binary_operator"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"_binary_operator": {
"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": "STRING",
"value": "<="
},
{
"type": "STRING",
"value": ">"
},
{
"type": "STRING",
"value": ">="
}
]
},
"tuple_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_arguments": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"function_call_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"struct_ctor_call_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_struct_argument_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"_struct_argument_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"single_struct_argument": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_struct_argument_expression"
}
]
},
"struct_argument_tail": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ".."
},
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"_struct_argument": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "single_struct_argument"
},
{
"type": "SYMBOL",
"name": "struct_argument_tail"
}
]
},
"_struct_argument_list": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_struct_argument"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "argument",
"content": {
"type": "SYMBOL",
"name": "_struct_argument"
}
}
]
}
}
]
},
"block_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"match_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "match"
},
{
"type": "FIELD",
"name": "match_value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "match_arm"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "match_arm"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"match_arm": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "pattern",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
},
{
"type": "STRING",
"value": "=>"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"if_expression": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "if"
},
{
"type": "FIELD",
"name": "condition",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "FIELD",
"name": "consequence",
"content": {
"type": "SYMBOL",
"name": "block_expression"
}
},
{
"type": "REPEAT",
"content": {
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "else_if_clause"
}
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "alternative",
"content": {
"type": "SYMBOL",
"name": "else_clause"
}
},
{
"type": "BLANK"
}
]
}
]
},
"else_if_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "STRING",
"value": "if"
},
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "block_expression"
}
]
},
"else_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "else"
},
{
"type": "SYMBOL",
"name": "block_expression"
}
]
},
"error_propagation_expression": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "expression",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
},
{
"type": "STRING",
"value": "?"
}
]
},
"comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "//"
},
{
"type": "PATTERN",
"value": ".*"
}
]
}
},
"_pattern": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "_"
},
{
"type": "SYMBOL",
"name": "pattern_literal"
},
{
"type": "SYMBOL",
"name": "pattern_identifier"
},
{
"type": "SYMBOL",
"name": "pattern_struct"
},
{
"type": "SYMBOL",
"name": "pattern_tuple"
},
{
"type": "SYMBOL",
"name": "pattern_enum"
},
{
"type": "SYMBOL",
"name": "path_expression"
}
]
},
"pattern_literal": {
"type": "SYMBOL",
"name": "literal_expression"
},
"pattern_identifier": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_modifier_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
}
]
}
},
"_modifier_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "modifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "modifier"
}
]
}
}
]
},
"modifier": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "mut"
},
{
"type": "STRING",
"value": "&"
}
]
},
"pattern_struct": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "STRING",
"value": "{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_struct_pattern_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"_struct_pattern_list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "struct_pattern"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "struct_pattern"
}
]
}
}
]
},
"struct_pattern": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": "with"
},
{
"type": "STRING",
"value": ".."
}
]
},
"_struct_patter_with": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
}
]
},
"pattern_tuple": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"pattern_enum": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_type_clause": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"_return__type_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "->"
},
{
"type": "FIELD",
"name": "return_type",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
"_statement_list": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_statement"
}
},
"_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "let_statement"
},
{
"type": "SYMBOL",
"name": "expression_statement"
},
{
"type": "SYMBOL",
"name": "return_statement"
}
]
},
"let_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "let"
},
{
"type": "FIELD",
"name": "pattern",
"content": {
"type": "SYMBOL",
"name": "_pattern"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_type_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"expression_statement": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "match_expression"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "STRING",
"value": ";"
}
]
}
]
},
"return_statement": {
"type": "PREC",
"value": -1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "return"
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_expression"
}
}
]
}
},
"_param_name": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "_"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"param": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_modifier_list"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_param_name"
}
},
{
"type": "SYMBOL",
"name": "_type_clause"
}
]
},
"_implicits_clause": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "implicits"
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "implicit",
"content": {
"type": "SYMBOL",
"name": "implicit"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "implicit",
"content": {
"type": "SYMBOL",
"name": "implicit"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"implicit": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_type_clause"
}
]
},
"_function_signature": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "parameter",
"content": {
"type": "SYMBOL",
"name": "param"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "parameter",
"content": {
"type": "SYMBOL",
"name": "param"
}
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_return__type_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_implicits_clause"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_no_panic_token"
},
{
"type": "BLANK"
}
]
}
]
},
"_no_panic_token": {
"type": "STRING",
"value": "no_panic"
},
"_struct_member": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "SYMBOL",
"name": "_type_clause"
}
]
},
"_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "module"
},
{
"type": "SYMBOL",
"name": "use"
},
{
"type": "SYMBOL",
"name": "free_function"
},
{
"type": "SYMBOL",
"name": "extern_function"
},
{
"type": "SYMBOL",
"name": "extern_type"
},
{
"type": "SYMBOL",
"name": "trait"
},
{
"type": "SYMBOL",
"name": "impl"
},
{
"type": "SYMBOL",
"name": "struct"
},
{
"type": "SYMBOL",
"name": "enum"
}
]
},
"module": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "mod"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"attribute_arguments": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_expression"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"attribute": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "attribute_arguments"
},
{
"type": "STRING",
"value": "]"
}
]
},
"free_function": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "func"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "FIELD",
"name": "type_parameters",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "SYMBOL",
"name": "_function_signature"
},
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "block_expression"
}
}
]
},
"extern_function": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "extern"
},
{
"type": "STRING",
"value": "func"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_function_signature"
},
{
"type": "SYMBOL",
"name": "block_expression"
}
]
},
"extern_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "extern"
},
{
"type": "STRING",
"value": "type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
},
"trait": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "trait"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_trait_body"
}
},
{
"type": "STRING",
"value": ";"
}
]
}
]
},
"_trait_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_trait_item"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_trait_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_trait_function"
}
]
},
"_trait_function": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "func"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_function_signature"
},
{
"type": "STRING",
"value": ";"
}
]
},
"impl": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "impl"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "of"
},
{
"type": "FIELD",
"name": "trait",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "body",
"content": {
"type": "SYMBOL",
"name": "_impl_body"
}
},
{
"type": "STRING",
"value": ";"
}
]
}
]
},
"_impl_body": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_item"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"struct": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "struct"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_struct_member"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_struct_member"
}
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"enum": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "enum"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "identifier"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_wrapped_generic_parameters"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_struct_member"
}
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "FIELD",
"name": "member",
"content": {
"type": "SYMBOL",
"name": "_struct_member"
}
}
]
}
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"use": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "use"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "path_expression"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
"generic_param": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "parenthesized_expression"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"_wrapped_generic_parameters": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "generic_param"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "generic_param"
}
]
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ">"
}
]
}
},
"extras": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "PATTERN",
"value": "\\s"
}
],
"conflicts": [
[
"_expression",
"struct_ctor_call_expression"
],
[
"_path_segment",
"pattern_identifier"
],
[
"parenthesized_expression",
"tuple_expression"
],
[
"function_call_expression",
"_expression"
],
[
"_expression",
"expression_statement"
],
[
"simple_path_segment",
"generic_argument_path_segment"
],
[
"return_statement",
"expression_statement"
],
[
"_generic_arguments",
"binary_expression"
],
[
"pattern_identifier",
"path_expression"
],
[
"identifier",
"path_expression"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}