UNPKG

tree-sitter-gdscript

Version:
2,268 lines (2,267 loc) 98.1 kB
{ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "gdscript", "word": "_identifier", "rules": { "source": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_statement" } }, "_identifier": { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z_0-9]*" }, "identifier": { "type": "SYMBOL", "name": "_identifier" }, "name": { "type": "SYMBOL", "name": "_identifier" }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "#" }, { "type": "PATTERN", "value": ".*" } ] } }, "true": { "type": "STRING", "value": "true" }, "false": { "type": "STRING", "value": "false" }, "null": { "type": "STRING", "value": "null" }, "static_keyword": { "type": "STRING", "value": "static" }, "remote_keyword": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "remote" }, { "type": "STRING", "value": "master" }, { "type": "STRING", "value": "puppet" }, { "type": "STRING", "value": "remotesync" }, { "type": "STRING", "value": "mastersync" }, { "type": "STRING", "value": "puppetsync" } ] }, "escape_sequence": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "u[a-fA-F\\d]{4}" }, { "type": "PATTERN", "value": "U[a-fA-F\\d]{8}" }, { "type": "PATTERN", "value": "x[a-fA-F\\d]{2}" }, { "type": "PATTERN", "value": "o\\d{3}" }, { "type": "PATTERN", "value": "\\r\\n" }, { "type": "PATTERN", "value": "[^uxo]" } ] } ] } }, "string": { "type": "SEQ", "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_string_start" }, "named": false, "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escape_sequence" }, { "type": "SYMBOL", "name": "_string_content" } ] } }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_string_end" }, "named": false, "value": "\"" } ] }, "float": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } }, { "type": "STRING", "value": "." }, { "type": "CHOICE", "members": [ { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[eE][\\+-]?" }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } } ] }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "." }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[eE][\\+-]?" }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } } ] }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } }, { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[eE][\\+-]?" }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } } ] } ] } ] } }, "integer": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "0x" }, { "type": "STRING", "value": "0X" } ] }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "_?[A-Fa-f0-9]+" } } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "0o" }, { "type": "STRING", "value": "0O" } ] }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "_?[0-7]+" } } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "0b" }, { "type": "STRING", "value": "0B" } ] }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "_?[0-1]+" } } ] }, { "type": "REPEAT1", "content": { "type": "PATTERN", "value": "[0-9]+_?" } } ] } }, "string_name": { "type": "SEQ", "members": [ { "type": "STRING", "value": "&" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "string" }, "named": false, "value": "value" } ] }, "node_path": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "@" }, { "type": "STRING", "value": "^" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "PATTERN", "value": "[0-9a-zA-Z_/\\- .]*" }, { "type": "STRING", "value": "\"" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "'" }, { "type": "PATTERN", "value": "[0-9a-zA-Z_/\\- .]*" }, { "type": "STRING", "value": "'" } ] } ] } ] } }, "get_node": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "$" }, { "type": "STRING", "value": "%" } ] }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "PATTERN", "value": "[0-9a-zA-Z_/\\- .]*" }, { "type": "STRING", "value": "\"" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "'" }, { "type": "PATTERN", "value": "[0-9a-zA-Z_/\\- .]*" }, { "type": "STRING", "value": "'" } ] } ] }, { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z_/0-9]*" } ] } ] } }, "type": { "type": "PREC", "value": 20, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "attribute" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "subscript" } ] } }, "_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_simple_statements" }, { "type": "SYMBOL", "name": "_compound_statement" } ] }, "body": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_simple_statements" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_statement" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_body_end" }, { "type": "SYMBOL", "name": "_dedent" } ] } ] } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_body_end" } ] } ] }, "_simple_statements": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_simple_statement" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": ";" }, { "type": "SYMBOL", "name": "_simple_statement" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": ";" }, { "type": "BLANK" } ] } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_body_end" } ] } ] }, "_simple_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_annotations" }, { "type": "SYMBOL", "name": "tool_statement" }, { "type": "SYMBOL", "name": "signal_statement" }, { "type": "SYMBOL", "name": "class_name_statement" }, { "type": "SYMBOL", "name": "extends_statement" }, { "type": "SYMBOL", "name": "expression_statement" }, { "type": "SYMBOL", "name": "export_variable_statement" }, { "type": "SYMBOL", "name": "onready_variable_statement" }, { "type": "SYMBOL", "name": "variable_statement" }, { "type": "SYMBOL", "name": "const_statement" }, { "type": "SYMBOL", "name": "return_statement" }, { "type": "SYMBOL", "name": "pass_statement" }, { "type": "SYMBOL", "name": "break_statement" }, { "type": "SYMBOL", "name": "breakpoint_statement" }, { "type": "SYMBOL", "name": "continue_statement" } ] }, "expression_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "SYMBOL", "name": "assignment" }, { "type": "SYMBOL", "name": "augmented_assignment" } ] }, "annotation": { "type": "SEQ", "members": [ { "type": "STRING", "value": "@" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "arguments" }, { "type": "BLANK" } ] } ] }, "_annotations": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "annotation" } }, "annotations": { "type": "SYMBOL", "name": "_annotations" }, "inferred_type": { "type": "CHOICE", "members": [ { "type": "STRING", "value": ":=" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "STRING", "value": "=" } ] } ] }, "_variable_assignment": { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_rhs_expression" } } ] }, "_variable_inferred_type_assignment": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "inferred_type" } }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_rhs_expression" } } ] }, "_variable_typed_assignment": { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_rhs_expression" } } ] }, "_variable_typed_definition": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type" } } ] }, { "type": "SYMBOL", "name": "_variable_typed_assignment" } ] }, "set_body": { "type": "SEQ", "members": [ { "type": "STRING", "value": "set" }, { "type": "SYMBOL", "name": "parameters" }, { "type": "STRING", "value": ":" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "body" }, "named": false, "value": "body" } ] }, "get_body": { "type": "SEQ", "members": [ { "type": "STRING", "value": "get" }, { "type": "CHOICE", "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "parameters" }, "named": false, "value": "()" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "body" }, "named": false, "value": "body" } ] }, "_set_assign": { "type": "SEQ", "members": [ { "type": "STRING", "value": "set" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "set", "content": { "type": "SYMBOL", "name": "setter" } } ] }, "_get_assign": { "type": "SEQ", "members": [ { "type": "STRING", "value": "get" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "get", "content": { "type": "SYMBOL", "name": "getter" } } ] }, "_setget_body": { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "set", "content": { "type": "SYMBOL", "name": "set_body" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "get", "content": { "type": "SYMBOL", "name": "get_body" } }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "get", "content": { "type": "SYMBOL", "name": "get_body" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "set", "content": { "type": "SYMBOL", "name": "set_body" } }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_set_assign" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_get_assign" } ] }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_get_assign" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_set_assign" } ] }, { "type": "BLANK" } ] } ] } ] }, { "type": "SYMBOL", "name": "_dedent" } ] } ] }, "setter": { "type": "SYMBOL", "name": "_identifier" }, "getter": { "type": "SYMBOL", "name": "_identifier" }, "setget": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_setget_body" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "setget" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "setter" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "setter" }, { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "getter" } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "getter" } ] } ] } ] } ] }, "_variable_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "annotations" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "static", "content": { "type": "SYMBOL", "name": "static_keyword" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "var" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "name" } }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_variable_typed_definition" }, { "type": "SYMBOL", "name": "_variable_inferred_type_assignment" }, { "type": "SYMBOL", "name": "_variable_assignment" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "setget", "content": { "type": "SYMBOL", "name": "setget" } }, { "type": "BLANK" } ] } ] }, "variable_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "remote_keyword" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_variable_statement" } ] }, "export_variable_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "export" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "export_arguments", "content": { "type": "SYMBOL", "name": "arguments" } }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "onready" }, { "type": "SYMBOL", "name": "remote_keyword" } ] }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_variable_statement" } ] }, "onready_variable_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "onready" }, { "type": "SYMBOL", "name": "_variable_statement" } ] }, "const_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "const" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "name" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_variable_inferred_type_assignment" }, { "type": "SYMBOL", "name": "_variable_typed_assignment" }, { "type": "SYMBOL", "name": "_variable_assignment" } ] } ] }, "return_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "return" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_rhs_expression" }, { "type": "BLANK" } ] } ] }, "pass_statement": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "pass" } }, "break_statement": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "break" } }, "breakpoint_statement": { "type": "STRING", "value": "breakpoint" }, "continue_statement": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "continue" } }, "tool_statement": { "type": "STRING", "value": "tool" }, "signal_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "signal" }, { "type": "SYMBOL", "name": "name" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "parameters" }, { "type": "BLANK" } ] } ] }, "class_name_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "class_name" }, { "type": "SYMBOL", "name": "name" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "FIELD", "name": "icon_path", "content": { "type": "SYMBOL", "name": "string" } } ] }, { "type": "BLANK" } ] } ] }, "extends_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "extends" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "type" } ] } ] }, "_compound_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "for_statement" }, { "type": "SYMBOL", "name": "while_statement" }, { "type": "SYMBOL", "name": "function_definition" }, { "type": "SYMBOL", "name": "constructor_definition" }, { "type": "SYMBOL", "name": "class_definition" }, { "type": "SYMBOL", "name": "enum_definition" }, { "type": "SYMBOL", "name": "match_statement" } ] }, "if_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } }, { "type": "REPEAT", "content": { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "elif_clause" } } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "else_clause" } }, { "type": "BLANK" } ] } ] }, "elif_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "elif" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "else_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "for_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type" } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "in" }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "while_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "while" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "class_definition": { "type": "SEQ", "members": [ { "type": "STRING", "value": "class" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "name" } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "extends", "content": { "type": "SYMBOL", "name": "extends_statement" } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "enum_definition": { "type": "SEQ", "members": [ { "type": "STRING", "value": "enum" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "name" } }, { "type": "BLANK" } ] }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "enumerator_list" } } ] }, "enumerator_list": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "enumerator" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "enumerator" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "STRING", "value": "}" } ] }, "_enumerator_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "integer" }, { "type": "SYMBOL", "name": "binary_operator" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "unary_operator" }, { "type": "SYMBOL", "name": "attribute" }, { "type": "SYMBOL", "name": "subscript" }, { "type": "SYMBOL", "name": "call" }, { "type": "SYMBOL", "name": "parenthesized_expression" } ] }, "enumerator": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "_enumerator_expression" } } ] }, { "type": "BLANK" } ] } ] }, "match_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "match" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "match_body" } } ] }, "match_body": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "pattern_section" } }, { "type": "SYMBOL", "name": "_dedent" } ] }, "pattern_guard": { "type": "SEQ", "members": [ { "type": "STRING", "value": "when" }, { "type": "SYMBOL", "name": "_expression" } ] }, "pattern_section": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_pattern" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_pattern" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "pattern_guard" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "_pattern": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_primary_expression" }, { "type": "SYMBOL", "name": "pattern_binding" } ] }, "pattern_binding": { "type": "SEQ", "members": [ { "type": "STRING", "value": "var" }, { "type": "SYMBOL", "name": "identifier" } ] }, "pattern_open_ending": { "type": "STRING", "value": ".." }, "_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_primary_expression" }, { "type": "SYMBOL", "name": "conditional_expression" }, { "type": "SYMBOL", "name": "await_expression" } ] }, "_primary_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "binary_operator" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "integer" }, { "type": "SYMBOL", "name": "float" }, { "type": "SYMBOL", "name": "true" }, { "type": "SYMBOL", "name": "false" }, { "type": "SYMBOL", "name": "null" }, { "type": "SYMBOL", "name": "unary_operator" }, { "type": "SYMBOL", "name": "string_name" }, { "type": "SYMBOL", "name": "node_path" }, { "type": "SYMBOL", "name": "get_node" }, { "type": "SYMBOL", "name": "attribute" }, { "type": "SYMBOL", "name": "subscript" }, { "type": "SYMBOL", "name": "base_call" }, { "type": "SYMBOL", "name": "call" }, {