[
{
"type": "args",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
},
{
"type": "bool",
"named": true,
"fields": {}
},
{
"type": "decl",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "decl_class",
"named": true
},
{
"type": "decl_fun",
"named": true
},
{
"type": "decl_stmt",
"named": true
},
{
"type": "decl_var",
"named": true
}
]
}
},
{
"type": "decl_class",
"named": true,
"fields": {
"base": {
"multiple": false,
"required": false,
"types": [
{
"type": "identifier",
"named": true
}
]
},
"extends": {
"multiple": false,
"required": false,
"types": [
{
"type": "extends",
"named": true
}
]
},
"method": {
"multiple": true,
"required": false,
"types": [
{
"type": "function",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
}
},
{
"type": "decl_fun",
"named": true,
"fields": {
"function": {
"multiple": false,
"required": true,
"types": [
{
"type": "function",
"named": true
}
]
}
}
},
{
"type": "decl_stmt",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "stmt_block",
"named": true
},
{
"type": "stmt_expr",
"named": true
},
{
"type": "stmt_for",
"named": true
},
{
"type": "stmt_if",
"named": true
},
{
"type": "stmt_print",
"named": true
},
{
"type": "stmt_return",
"named": true
},
{
"type": "stmt_while",
"named": true
}
]
}
},
{
"type": "decl_var",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
},
"value": {
"multiple": false,
"required": false,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "expr_call",
"named": true,
"fields": {
"args": {
"multiple": false,
"required": true,
"types": [
{
"type": "args",
"named": true
}
]
},
"callee": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "expr_field",
"named": true,
"fields": {
"field": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
},
"object": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "expr_infix",
"named": true,
"fields": {
"lt": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
},
"op": {
"multiple": false,
"required": true,
"types": [
{
"type": "!=",
"named": false
},
{
"type": "*",
"named": false
},
{
"type": "+",
"named": false
},
{
"type": "-",
"named": false
},
{
"type": "/",
"named": false
},
{
"type": "<",
"named": false
},
{
"type": "<=",
"named": false
},
{
"type": "=",
"named": false
},
{
"type": "==",
"named": false
},
{
"type": ">",
"named": false
},
{
"type": ">=",
"named": false
},
{
"type": "and",
"named": false
},
{
"type": "or",
"named": false
}
]
},
"rt": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "expr_prefix",
"named": true,
"fields": {
"op": {
"multiple": false,
"required": true,
"types": [
{
"type": "!",
"named": false
},
{
"type": "-",
"named": false
}
]
},
"rt": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "expr_primary",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "bool",
"named": true
},
{
"type": "grouping",
"named": true
},
{
"type": "nil",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "super",
"named": true
},
{
"type": "this",
"named": true
},
{
"type": "var",
"named": true
}
]
}
},
{
"type": "extends",
"named": true,
"fields": {}
},
{
"type": "for_paren",
"named": true,
"fields": {
"cond": {
"multiple": false,
"required": false,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
},
"incr": {
"multiple": false,
"required": false,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
},
"init": {
"multiple": false,
"required": false,
"types": [
{
"type": "decl_var",
"named": true
},
{
"type": "stmt_expr",
"named": true
}
]
}
}
},
{
"type": "function",
"named": true,
"fields": {
"body": {
"multiple": false,
"required": true,
"types": [
{
"type": "stmt_block",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
},
"params": {
"multiple": false,
"required": true,
"types": [
{
"type": "params",
"named": true
}
]
}
}
},
{
"type": "grouping",
"named": true,
"fields": {
"inner": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "params",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "program",
"named": true,
"fields": {
"decl": {
"multiple": true,
"required": false,
"types": [
{
"type": "decl",
"named": true
}
]
}
}
},
{
"type": "stmt_block",
"named": true,
"fields": {
"body": {
"multiple": true,
"required": false,
"types": [
{
"type": "decl",
"named": true
}
]
}
}
},
{
"type": "stmt_expr",
"named": true,
"fields": {
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "stmt_for",
"named": true,
"fields": {
"body": {
"multiple": false,
"required": true,
"types": [
{
"type": "decl_stmt",
"named": true
}
]
},
"paren": {
"multiple": false,
"required": true,
"types": [
{
"type": "for_paren",
"named": true
}
]
}
}
},
{
"type": "stmt_if",
"named": true,
"fields": {
"cond": {
"multiple": false,
"required": true,
"types": [
{
"type": "grouping",
"named": true
}
]
},
"else": {
"multiple": false,
"required": false,
"types": [
{
"type": "decl_stmt",
"named": true
}
]
},
"then": {
"multiple": false,
"required": true,
"types": [
{
"type": "decl_stmt",
"named": true
}
]
}
}
},
{
"type": "stmt_print",
"named": true,
"fields": {
"value": {
"multiple": false,
"required": true,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "stmt_return",
"named": true,
"fields": {
"value": {
"multiple": false,
"required": false,
"types": [
{
"type": "expr_call",
"named": true
},
{
"type": "expr_field",
"named": true
},
{
"type": "expr_infix",
"named": true
},
{
"type": "expr_prefix",
"named": true
},
{
"type": "expr_primary",
"named": true
}
]
}
}
},
{
"type": "stmt_while",
"named": true,
"fields": {
"body": {
"multiple": false,
"required": true,
"types": [
{
"type": "decl_stmt",
"named": true
}
]
},
"cond": {
"multiple": false,
"required": true,
"types": [
{
"type": "grouping",
"named": true
}
]
}
}
},
{
"type": "super",
"named": true,
"fields": {
"field": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
}
},
{
"type": "var",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
}
},
{
"type": "!",
"named": false
},
{
"type": "!=",
"named": false
},
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "*",
"named": false
},
{
"type": "+",
"named": false
},
{
"type": ",",
"named": false
},
{
"type": "-",
"named": false
},
{
"type": ".",
"named": false
},
{
"type": "/",
"named": false
},
{
"type": ";",
"named": false
},
{
"type": "<",
"named": false
},
{
"type": "<=",
"named": false
},
{
"type": "=",
"named": false
},
{
"type": "==",
"named": false
},
{
"type": ">",
"named": false
},
{
"type": ">=",
"named": false
},
{
"type": "and",
"named": false
},
{
"type": "class",
"named": false
},
{
"type": "comment",
"named": true
},
{
"type": "else",
"named": false
},
{
"type": "false",
"named": false
},
{
"type": "for",
"named": false
},
{
"type": "fun",
"named": false
},
{
"type": "identifier",
"named": true
},
{
"type": "if",
"named": false
},
{
"type": "nil",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "or",
"named": false
},
{
"type": "print",
"named": false
},
{
"type": "return",
"named": false
},
{
"type": "string",
"named": true
},
{
"type": "super",
"named": false
},
{
"type": "this",
"named": true
},
{
"type": "true",
"named": false
},
{
"type": "var",
"named": false
},
{
"type": "while",
"named": false
},
{
"type": "{",
"named": false
},
{
"type": "}",
"named": false
}
]