~repos /plum

#treesitter#compiler#wasm

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": []
}