tree-sitter-gdscript
Version:
Grammar for Godot's built-in scripting language.
2,268 lines (2,267 loc) • 98.1 kB
JSON
{
"$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"
},
{