~repos /plum
git clone https://pyrossh.dev/repos/plum.git
A statically typed, imperative programming language inspired by rust, python
tooling/tree-sitter-plum/src/grammar.json
{ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "plum", "rules": { "source": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "module" }, { "type": "BLANK" } ] }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "import" } }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "class" }, { "type": "SYMBOL", "name": "trait" }, { "type": "SYMBOL", "name": "enum" }, { "type": "SYMBOL", "name": "fn" }, { "type": "SYMBOL", "name": "const" } ] } } ] }, "module": { "type": "SEQ", "members": [ { "type": "STRING", "value": "module" }, { "type": "SYMBOL", "name": "mod_identifier" } ] }, "import": { "type": "SEQ", "members": [ { "type": "STRING", "value": "import" }, { "type": "SYMBOL", "name": "url" } ] }, "url": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z_0-9]*" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "/" }, { "type": "PATTERN", "value": "[a-zA-Z_][a-zA-Z_0-9]*" } ] } } ] }, "generics": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "generic_type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "generic_type" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "generic_type": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "generic" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "+" }, { "type": "SYMBOL", "name": "type_identifier" } ] } } ] } ] }, { "type": "BLANK" } ] } ] }, "type": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "FIELD", "name": "generics", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type" } ] } } ] }, { "type": "STRING", "value": "]" } ] }, { "type": "BLANK" } ] } } ] }, { "type": "SYMBOL", "name": "generic" } ] }, "variadic_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "..." }, { "type": "SYMBOL", "name": "type" } ] }, "class": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "type_identifier" } }, { "type": "FIELD", "name": "implements", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_identifier" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } }, { "type": "FIELD", "name": "generics", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "generics" }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "FIELD", "name": "fields", "content": { "type": "CHOICE", "members": [ { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "class_field" }, "named": true, "value": "field" } }, { "type": "BLANK" } ] } }, { "type": "SYMBOL", "name": "_dedent" } ] }, "class_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "var_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type" } } ] }, "trait": { "type": "SEQ", "members": [ { "type": "STRING", "value": "trait" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "type_identifier" } }, { "type": "FIELD", "name": "generics", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "generics" }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "FIELD", "name": "fields", "content": { "type": "CHOICE", "members": [ { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "trait_field" }, "named": true, "value": "field" } }, { "type": "BLANK" } ] } }, { "type": "SYMBOL", "name": "_dedent" } ] }, "trait_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "fn_identifier" } }, { "type": "FIELD", "name": "params", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "param" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "param" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] } }, { "type": "FIELD", "name": "returns", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "->" }, { "type": "SYMBOL", "name": "return_type" } ] }, { "type": "BLANK" } ] } } ] }, "param": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "var_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type" }, { "type": "SYMBOL", "name": "variadic_type" } ] } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "expression" } } ] }, { "type": "BLANK" } ] } ] }, "return_type": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "FIELD", "name": "generics", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "generics" }, { "type": "BLANK" } ] } } ] }, "enum": { "type": "SEQ", "members": [ { "type": "STRING", "value": "enum" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "type_identifier" } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "CHOICE", "members": [ { "type": "REPEAT", "content": { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "enum_field" }, "named": true, "value": "field" } }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "enum_field": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "type_identifier" } }, { "type": "FIELD", "name": "parameters", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_identifier" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } } ] }, "fn": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "fn_identifier" } }, { "type": "FIELD", "name": "type", "content": { "type": "CHOICE", "members": [ { "type": "ALIAS", "content": { "type": "SYMBOL", "name": "fn_type" }, "named": true, "value": "type" }, { "type": "BLANK" } ] } }, { "type": "FIELD", "name": "params", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "param" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "param" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] } }, { "type": "FIELD", "name": "returns", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "->" }, { "type": "SYMBOL", "name": "return_type" } ] }, { "type": "BLANK" } ] } }, { "type": "FIELD", "name": "body", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "=" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "body" } ] } ] } } ] } }, "fn_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "<" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_identifier" } ] } } ] }, { "type": "STRING", "value": ">" } ] }, "body": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_statement" } }, { "type": "SYMBOL", "name": "_dedent" } ] }, "_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "assign" }, { "type": "SYMBOL", "name": "break" }, { "type": "SYMBOL", "name": "continue" }, { "type": "SYMBOL", "name": "assert" }, { "type": "SYMBOL", "name": "for" }, { "type": "SYMBOL", "name": "while" }, { "type": "SYMBOL", "name": "if" }, { "type": "SYMBOL", "name": "match" }, { "type": "SYMBOL", "name": "return" }, { "type": "SYMBOL", "name": "todo" }, { "type": "SYMBOL", "name": "primary_expression" } ] }, "const": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "const_identifier" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "expression" } ] }, "assign": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "var_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "var_identifier" } ] } } ] }, { "type": "STRING", "value": "=" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "expression" } ] } } ] } ] }, "try": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "try" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "fn_call" }, { "type": "BLANK" } ] } ] } }, "assert": { "type": "SEQ", "members": [ { "type": "STRING", "value": "assert" }, { "type": "SYMBOL", "name": "expression" } ] }, "return": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "return" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "BLANK" } ] } ] } }, "break": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "break" } }, "continue": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "continue" } }, "todo": { "type": "PREC_LEFT", "value": 0, "content": { "type": "STRING", "value": "todo" } }, "if": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } }, { "type": "REPEAT", "content": { "type": "FIELD", "name": "alternative", "content": { "type": "SYMBOL", "name": "else_if" } } }, { "type": "CHOICE", "members": [ { "type": "FIELD", "name": "otherwise", "content": { "type": "SYMBOL", "name": "else" } }, { "type": "BLANK" } ] } ] }, "else_if": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "else": { "type": "SEQ", "members": [ { "type": "STRING", "value": "else" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "for": { "type": "SEQ", "members": [ { "type": "STRING", "value": "for" }, { "type": "FIELD", "name": "left", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "var_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "var_identifier" } ] } } ] } }, { "type": "STRING", "value": "in" }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "while": { "type": "SEQ", "members": [ { "type": "STRING", "value": "while" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "dotted_name": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "var_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "." }, { "type": "SYMBOL", "name": "var_identifier" } ] } } ] } }, "match": { "type": "PREC_LEFT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "match" }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "subject", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "FIELD", "name": "subject", "content": { "type": "SYMBOL", "name": "expression" } } ] } } ] }, { "type": "STRING", "value": "is" }, { "type": "REPEAT", "content": { "type": "FIELD", "name": "case", "content": { "type": "SYMBOL", "name": "case" } } } ] } }, "case": { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "case_pattern" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "case_pattern" } ] } } ] }, { "type": "STRING", "value": "=>" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "case_pattern": { "type": "PREC", "value": 1, "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "class_pattern" }, { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "integer" }, { "type": "SYMBOL", "name": "float" }, { "type": "SYMBOL", "name": "dotted_name" }, { "type": "STRING", "value": "_" } ] } }, "class_pattern": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "dotted_name" }, { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "case_pattern" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "case_pattern" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "comparison_operator" }, { "type": "SYMBOL", "name": "not_operator" }, { "type": "SYMBOL", "name": "boolean_operator" }, { "type": "SYMBOL", "name": "primary_expression" }, { "type": "SYMBOL", "name": "ternary_expression" } ] }, "primary_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "binary_operator" }, { "type": "SYMBOL", "name": "self" }, { "type": "SYMBOL", "name": "var_identifier" }, { "type": "SYMBOL", "name": "type_identifier" }, { "type": "SYMBOL", "name": "string" }, { "type": "SYMBOL", "name": "integer" }, { "type": "SYMBOL", "name": "float" }, { "type": "SYMBOL", "name": "unary_operator" }, { "type": "SYMBOL", "name": "attribute" }, { "type": "SYMBOL", "name": "fn_call" }, { "type": "SYMBOL", "name": "class_call" }, { "type": "SYMBOL", "name": "parenthesized_expression" } ] }, "parenthesized_expression": { "type": "PREC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "}" } ] } }, "not_operator": { "type": "PREC", "value": 12, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "!" }, { "type": "FIELD", "name": "argument", "content": { "type": "SYMBOL", "name": "expression" } } ] } }, "boolean_operator": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 11, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "&&" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "expression" } } ] } }, { "type": "PREC_LEFT", "value": 10, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "||" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "expression" } } ] } } ] }, "binary_operator": { "type": "CHOICE", "members": [ { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "+" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "-" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 19, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "*" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 19, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "/" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 19, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "%" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 14, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "|" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "&" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 16, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "^" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": "<<" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": ">>" } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, { "type": "PREC_LEFT", "value": 9, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "left", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "FIELD", "name": "operator", "content": { "type": "STRING", "value": ".." } }, { "type": "FIELD", "name": "right", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } } ] }, "unary_operator": { "type": "PREC", "value": 20, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "operator", "content": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "-" } ] } }, { "type": "FIELD", "name": "argument", "content": { "type": "SYMBOL", "name": "primary_expression" } } ] } }, "comparison_operator": { "type": "PREC_LEFT", "value": 13, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "primary_expression" }, { "type": "FIELD", "name": "operator", "content": { "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": "primary_expression" } ] } }, "closure": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "FIELD", "name": "parameters", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "var_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "var_identifier" } ] } } ] }, { "type": "BLANK" } ] } }, { "type": "STRING", "value": "|" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "body" } } ] }, "attribute": { "type": "PREC", "value": 23, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "object", "content": { "type": "SYMBOL", "name": "primary_expression" } }, { "type": "STRING", "value": "." }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "var_identifier" }, { "type": "SYMBOL", "name": "fn_call" } ] } ] } }, "fn_call": { "type": "PREC", "value": 23, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "function", "content": { "type": "SYMBOL", "name": "fn_identifier" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "fn_argument_list" } } ] } }, "fn_argument_list": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "keyword_argument" }, { "type": "SYMBOL", "name": "pair_argument" } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "SYMBOL", "name": "keyword_argument" }, { "type": "SYMBOL", "name": "pair_argument" } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "keyword_argument": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "var_identifier" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "expression" } } ] }, "pair_argument": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "string" } }, { "type": "STRING", "value": "=>" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "expression" } } ] }, "class_call": { "type": "PREC", "value": 23, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type_identifier" } }, { "type": "FIELD", "name": "arguments", "content": { "type": "SYMBOL", "name": "class_argument_list" } } ] } }, "class_argument_list": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "var_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "expression" } } ] }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "var_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "expression" } } ] } ] } } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "," }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ")" } ] }, "ternary_expression": { "type": "PREC_RIGHT", "value": -1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": "?" }, { "type": "SYMBOL", "name": "expression" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "expression" } ] } }, "string": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "string_start" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "interpolation" }, { "type": "SYMBOL", "name": "string_content" } ] } }, { "type": "SYMBOL", "name": "string_end" } ] }, "string_content": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escape_interpolation" }, { "type": "SYMBOL", "name": "escape_sequence" }, { "type": "SYMBOL", "name": "_not_escape_sequence" }, { "type": "SYMBOL", "name": "_string_content" } ] } } }, "interpolation": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "SYMBOL", "name": "primary_expression" }, { "type": "STRING", "value": "}" } ] }, "escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 1, "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": "\\d{1,3}" }, { "type": "PATTERN", "value": "\\r?\\n" }, { "type": "PATTERN", "value": "['\"abfrntv\\\\]" }, { "type": "PATTERN", "value": "N\\{[^}]+\\}" } ] } ] } } }, "_not_escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "STRING", "value": "\\" } }, "float": { "type": "TOKEN", "content": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[eE]" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[+-]" }, { "type": "BLANK" } ] }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } } ] } } ] }, { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "." }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } }, { "type": "CHOICE", "members": [ { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[eE]" }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[+-]" }, { "type": "BLANK" } ] }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } } ] } }, { "type": "BLANK" } ] } ] } ] }, { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[fF]" }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } }, { "type": "PATTERN", "value": "[fF]" } ] } ] } }, "integer": { "type": "CHOICE", "members": [ { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "PATTERN", "value": "[1-9]" }, { "type": "BLANK" } ] }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9]+" } ] } } ] } } ] } }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "0" }, { "type": "PATTERN", "value": "[xX]" }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[0-9a-fA-F]+" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[0-9a-fA-F]+" } ] } } ] } } ] } }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "0" }, { "type": "PATTERN", "value": "[bB]" }, { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "[01]" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "PATTERN", "value": "_+" }, { "type": "PATTERN", "value": "[01]" } ] } } ] } } ] } } ] }, "self": { "type": "PATTERN", "value": "self" }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "#" }, { "type": "PATTERN", "value": ".*" } ] } }, "identifier": { "type": "PATTERN", "value": "[_a-z][_a-zA-Z0-9]*" }, "generic": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "a" }, { "type": "SYMBOL", "name": "b" }, { "type": "SYMBOL", "name": "c" }, { "type": "SYMBOL", "name": "d" } ] }, "a": { "type": "TOKEN", "content": { "type": "STRING", "value": "a" } }, "b": { "type": "TOKEN", "content": { "type": "STRING", "value": "b" } }, "c": { "type": "TOKEN", "content": { "type": "STRING", "value": "c" } }, "d": { "type": "TOKEN", "content": { "type": "STRING", "value": "d" } }, "mod_identifier": { "type": "PATTERN", "value": "[a-z]+(_[a-z0-9]+)*" }, "const_identifier": { "type": "PATTERN", "value": "[A-Z]+(_[A-Z0-9]+)*" }, "var_identifier": { "type": "PATTERN", "value": "[a-z]+(_[a-z0-9]+)*" }, "fn_identifier": { "type": "PATTERN", "value": "[a-z][a-zA-Z0-9]*" }, "type_identifier": { "type": "PATTERN", "value": "[A-Z][a-zA-Z0-9]*" } }, "extras": [ { "type": "SYMBOL", "name": "comment" }, { "type": "PATTERN", "value": "[\\s\\f\\uFEFF\\u2060\\u200B]|\\r?\\n" } ], "conflicts": [], "precedences": [], "externals": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SYMBOL", "name": "_dedent" }, { "type": "SYMBOL", "name": "string_start" }, { "type": "SYMBOL", "name": "_string_content" }, { "type": "SYMBOL", "name": "escape_interpolation" }, { "type": "SYMBOL", "name": "string_end" }, { "type": "SYMBOL", "name": "comment" }, { "type": "STRING", "value": "]" }, { "type": "STRING", "value": ")" }, { "type": "STRING", "value": "}" }, { "type": "STRING", "value": "except" } ], "inline": [ "generic_type", "generic" ], "supertypes": []}