UNPKG

@amaanq/tree-sitter-func

Version:
2,172 lines 67 kB
{ "name": "func", "word": "identifier", "rules": { "translation_unit": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_top_level_item" } }, "_top_level_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "function_definition" }, { "type": "SYMBOL", "name": "include_directive" }, { "type": "SYMBOL", "name": "pragma_directive" }, { "type": "SYMBOL", "name": "global_var_declarations" }, { "type": "SYMBOL", "name": "const_var_declarations" } ] }, "include_directive": { "type": "SEQ", "members": [ { "type": "STRING", "value": "#include" }, { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_string_literal" }, "named": true, "value": "include_path" }, { "type": "STRING", "value": ";" } ] }, "pragma_directive": { "type": "SEQ", "members": [ { "type": "STRING", "value": "#pragma" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "version" }, { "type": "STRING", "value": "not-version" }, { "type": "STRING", "value": "test-version-set" } ] }, { "type": "CHOICE", "members": [ { "type": "ALIAS", "content": { "type": "PATTERN", "value": "(\\^|<=|>=|<|>|=)" }, "named": true, "value": "version_operator" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\"" }, { "type": "BLANK" } ] }, { "type": "ALIAS", "content": { "type": "PATTERN", "value": "\\d" }, "named": true, "value": "major_version" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "." }, { "type": "ALIAS", "content": { "type": "PATTERN", "value": "\\d" }, "named": true, "value": "minor_version" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "." }, { "type": "ALIAS", "content": { "type": "PATTERN", "value": "\\d" }, "named": true, "value": "patch_version" } ] }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "\"" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ";" } ] }, "global_var_declarations": { "type": "SEQ", "members": [ { "type": "STRING", "value": "global" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_global_var_declaration" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_global_var_declaration" } ] } } ] }, { "type": "STRING", "value": ";" } ] }, "const_var_declarations": { "type": "SEQ", "members": [ { "type": "STRING", "value": "const" }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "BLANK" } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_const_var_declaration" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_const_var_declaration" } ] } } ] }, { "type": "STRING", "value": ";" } ] }, "_global_var_declaration": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_type" }, { "type": "BLANK" } ] } }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } } ] }, "_const_var_declaration": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "_type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_atomic_type" }, { "type": "SYMBOL", "name": "function_type" } ] }, "function_type": { "type": "PREC_RIGHT", "value": 100, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_atomic_type" }, { "type": "STRING", "value": "->" }, { "type": "SYMBOL", "name": "_type" } ] } }, "_atomic_type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "primitive_type" }, { "type": "SYMBOL", "name": "var" }, { "type": "SYMBOL", "name": "hole_type" }, { "type": "SYMBOL", "name": "type_identifier" }, { "type": "SYMBOL", "name": "tensor_type" }, { "type": "SYMBOL", "name": "unit_type" }, { "type": "SYMBOL", "name": "tuple_type" }, { "type": "SYMBOL", "name": "_parenthesized_type" } ] }, "_parenthesized_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_type" }, { "type": "STRING", "value": ")" } ] }, "primitive_type": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "int" }, { "type": "STRING", "value": "cell" }, { "type": "STRING", "value": "slice" }, { "type": "STRING", "value": "builder" }, { "type": "STRING", "value": "cont" }, { "type": "STRING", "value": "tuple" } ] }, "tensor_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_type" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_type" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "tuple_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_type" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "var": { "type": "STRING", "value": "var" }, "hole_type": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "underscore" }, "named": true, "value": "hole_type" }, "unit_type": { "type": "STRING", "value": "()" }, "type_identifier": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "identifier" }, "named": true, "value": "type_identifier" }, "_expression": { "type": "SYMBOL", "name": "_expr10" }, "_expr10": { "type": "PREC", "value": 10, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr13" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "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": "|=" }, { "type": "STRING", "value": "^=" } ] }, { "type": "SYMBOL", "name": "_expr10" } ] }, { "type": "BLANK" } ] } ] } }, "_expr13": { "type": "PREC", "value": 13, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr15" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "?" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "_expr13" } ] }, { "type": "BLANK" } ] } ] } }, "_expr15": { "type": "PREC", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr17" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "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": "SYMBOL", "name": "_expr17" } ] }, { "type": "BLANK" } ] } ] } }, "_expr17": { "type": "PREC_LEFT", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr20" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<<" }, { "type": "STRING", "value": ">>" }, { "type": "STRING", "value": "~>>" }, { "type": "STRING", "value": "^>>" } ] }, { "type": "SYMBOL", "name": "_expr20" } ] } } ] } }, "_expr20": { "type": "PREC_LEFT", "value": 20, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_expr30" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "-" }, { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "|" }, { "type": "STRING", "value": "^" } ] }, { "type": "SYMBOL", "name": "_expr30" } ] } } ] } }, "_expr30": { "type": "PREC_LEFT", "value": 30, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr75" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "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": "SYMBOL", "name": "_expr75" } ] } } ] } }, "_expr75": { "type": "PREC", "value": 75, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "~" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_expr80" } ] } }, "_expr80": { "type": "PREC_LEFT", "value": 80, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expr90" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "method_call" } } ] } }, "method_call": { "type": "PREC_LEFT", "value": 80, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "." }, { "type": "STRING", "value": "~" } ] }, { "type": "FIELD", "name": "method_name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "_expr100" } } ] } }, "_expr90": { "type": "PREC_LEFT", "value": 90, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expr100" }, { "type": "SYMBOL", "name": "variable_declaration" }, { "type": "SYMBOL", "name": "function_application" } ] } }, "function_application": { "type": "PREC_LEFT", "value": 90, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "function", "content": { "type": "SYMBOL", "name": "_nontype_expr100" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "parenthesized_expression" }, { "type": "SYMBOL", "name": "tensor_expression" }, { "type": "SYMBOL", "name": "unit_literal" } ] } } } ] } }, "variable_declaration": { "type": "PREC_LEFT", "value": 90, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type_expression" } }, { "type": "FIELD", "name": "variable", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "tuple_expression" }, { "type": "SYMBOL", "name": "tensor_expression" }, { "type": "SYMBOL", "name": "parenthesized_expression" } ] } } ] } }, "type_expression": { "type": "PREC", "value": 101, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "primitive_type" }, { "type": "STRING", "value": "type" }, { "type": "SYMBOL", "name": "var" }, { "type": "SYMBOL", "name": "parenthesized_type_expression" }, { "type": "SYMBOL", "name": "tensor_type_expression" }, { "type": "SYMBOL", "name": "tuple_type_expression" } ] } }, "parenthesized_type_expression": { "type": "PREC", "value": 101, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "type_expression" }, { "type": "STRING", "value": ")" } ] } }, "tensor_type_expression": { "type": "PREC", "value": 101, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_expression" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_expression" } ] } } ] }, { "type": "STRING", "value": ")" } ] } }, "tuple_type_expression": { "type": "PREC", "value": 101, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_expression" } ] } } ] }, { "type": "STRING", "value": "]" } ] } }, "_nontype_expr100": { "type": "PREC", "value": 100, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "parenthesized_expression" }, { "type": "SYMBOL", "name": "tensor_expression" }, { "type": "SYMBOL", "name": "tuple_expression" }, { "type": "SYMBOL", "name": "unit_literal" }, { "type": "SYMBOL", "name": "primitive_type" }, { "type": "SYMBOL", "name": "identifier" }, { "type": "SYMBOL", "name": "number" }, { "type": "SYMBOL", "name": "underscore" }, { "type": "SYMBOL", "name": "string" } ] } }, "_expr100": { "type": "PREC", "value": 100, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type_expression" }, { "type": "SYMBOL", "name": "_nontype_expr100" } ] } }, "unit_literal": { "type": "STRING", "value": "()" }, "parenthesized_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ")" } ] }, "tensor_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "REPEAT1", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_expression" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "tuple_expression": { "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": "]" } ] }, "function_definition": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type_variables", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type_variables_list" }, { "type": "BLANK" } ] } }, { "type": "FIELD", "name": "return_type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "function_name" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "parameter_list" } }, { "type": "FIELD", "name": "specifiers", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "impure" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "inline" }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "method_id" }, { "type": "BLANK" } ] } ] } }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": ";" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "block_statement" } }, { "type": "FIELD", "name": "asm_body", "content": { "type": "SYMBOL", "name": "asm_function_body" } } ] } ] }, "function_name": { "type": "PATTERN", "value": "(`.*`)|((\\.|~)?(([a-zA-Z_](\\w|['?:])+)|([a-zA-Z])))" }, "inline": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "inline" }, { "type": "STRING", "value": "inline_ref" } ] }, "method_id": { "type": "SEQ", "members": [ { "type": "STRING", "value": "method_id" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "number" }, { "type": "SYMBOL", "name": "string" } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] }, "type_variables_list": { "type": "SEQ", "members": [ { "type": "STRING", "value": "forall" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "type" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type_identifier" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "type" }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "type_identifier" } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "->" } ] }, "parameter_list": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "parameter_declaration" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "parameter_declaration" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "parameter_declaration": { "type": "PREC", "value": 1, "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "BLANK" } ] }, { "type": "ALIAS", "content": { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "identifier" } }, { "type": "SYMBOL", "name": "underscore" } ] }, "named": true, "value": "parameter" } ] }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } } ] } }, "asm_function_body": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "asm_specifier" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "asm_instruction" } }, { "type": "STRING", "value": ";" } ] }, "asm_specifier": { "type": "SEQ", "members": [ { "type": "STRING", "value": "asm" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "identifier" }, "named": true, "value": "parameter" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "->" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "number" } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] }, "asm_instruction": { "type": "CHOICE", "members": [ { "type": "PREC", "value": 2, "content": { "type": "SYMBOL", "name": "multiline_asm_instruction" } }, { "type": "PREC", "value": 1, "content": { "type": "ALIAS", "content": { "type": "TOKEN", "content": { "type": "PATTERN", "value": "\"[^\"]*\"" } }, "named": true, "value": "asm_instruction" } } ] }, "multiline_asm_instruction": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"\"\"" }, { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "_multiline_string_fragment" }, "named": true, "value": "multiline_string_fragment" } }, { "type": "STRING", "value": "\"\"\"" } ] }, "_multiline_string_fragment": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[^\"]+" }, { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "\"[^\"]*\"" }, { "type": "REPEAT", "content": { "type": "PATTERN", "value": "[^\"]+" } } ] } ] } }, "_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "return_statement" }, { "type": "SYMBOL", "name": "block_statement" }, { "type": "SYMBOL", "name": "expression_statement" }, { "type": "SYMBOL", "name": "empty_statement" }, { "type": "SYMBOL", "name": "repeat_statement" }, { "type": "SYMBOL", "name": "if_statement" }, { "type": "SYMBOL", "name": "do_statement" }, { "type": "SYMBOL", "name": "while_statement" }, { "type": "SYMBOL", "name": "try_statement" } ] }, "return_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "return" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ";" } ] }, "block_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_statement" } }, { "type": "STRING", "value": "}" } ] }, "expression_statement": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ";" } ] }, "empty_statement": { "type": "STRING", "value": ";" }, "repeat_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "repeat" }, { "type": "FIELD", "name": "count", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "block_statement" } } ] }, "if_statement": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "if" }, { "type": "STRING", "value": "ifnot" } ] }, { "type": "SYMBOL", "name": "_if_statement_contents" } ] }, "_if_statement_contents": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "FIELD", "name": "consequent", "content": { "type": "SYMBOL", "name": "block_statement" } }, { "type": "FIELD", "name": "alternative", "content": { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "SYMBOL", "name": "block_statement" } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "elseif" }, { "type": "STRING", "value": "elseifnot" } ] }, { "type":