[
{
"type": "assign_expr",
"named": true,
"fields": {
"assignee": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
},
"expr": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"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": "|=",
"named": false
}
]
}
}
},
{
"type": "block",
"named": true,
"fields": {
"expr": {
"multiple": true,
"required": false,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"stmts": {
"multiple": true,
"required": false,
"types": [
{
"type": "break_stmt",
"named": true
},
{
"type": "continue_stmt",
"named": true
},
{
"type": "expr_stmt",
"named": true
},
{
"type": "for_stmt",
"named": true
},
{
"type": "let_stmt",
"named": true
},
{
"type": "loop_stmt",
"named": true
},
{
"type": "return_stmt",
"named": true
},
{
"type": "while_stmt",
"named": true
}
]
}
}
},
{
"type": "bool",
"named": true,
"fields": {}
},
{
"type": "break_stmt",
"named": true,
"fields": {}
},
{
"type": "call_expr",
"named": true,
"fields": {
"args": {
"multiple": true,
"required": false,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": ",",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"func": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
}
}
},
{
"type": "cast_expr",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
},
{
"type": "type",
"named": true
}
]
}
},
{
"type": "continue_stmt",
"named": true,
"fields": {}
},
{
"type": "expr_stmt",
"named": true,
"fields": {
"expr": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": ";",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
}
}
},
{
"type": "for_stmt",
"named": true,
"fields": {
"block": {
"multiple": false,
"required": true,
"types": [
{
"type": "block",
"named": true
}
]
},
"cond": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"initializer": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
},
"update": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
}
}
},
{
"type": "function_definition",
"named": true,
"fields": {
"body": {
"multiple": false,
"required": true,
"types": [
{
"type": "block",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
},
"params": {
"multiple": true,
"required": false,
"types": [
{
"type": ",",
"named": false
},
{
"type": "parameter",
"named": true
}
]
},
"return_type": {
"multiple": true,
"required": false,
"types": [
{
"type": "->",
"named": false
},
{
"type": "type",
"named": true
}
]
}
}
},
{
"type": "if_expr",
"named": true,
"fields": {
"cond": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"else_block": {
"multiple": true,
"required": false,
"types": [
{
"type": "block",
"named": true
},
{
"type": "else",
"named": false
},
{
"type": "if_expr",
"named": true
}
]
},
"then_block": {
"multiple": false,
"required": true,
"types": [
{
"type": "block",
"named": true
}
]
}
}
},
{
"type": "infix_expr",
"named": true,
"fields": {
"lhs": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"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": "<=",
"named": false
},
{
"type": "==",
"named": false
},
{
"type": ">",
"named": false
},
{
"type": ">=",
"named": false
},
{
"type": ">>",
"named": false
},
{
"type": "^",
"named": false
},
{
"type": "|",
"named": false
},
{
"type": "||",
"named": false
}
]
},
"rhs": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
}
}
},
{
"type": "let_stmt",
"named": true,
"fields": {
"expr": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
},
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
},
"type": {
"multiple": true,
"required": false,
"types": [
{
"type": ":",
"named": false
},
{
"type": "type",
"named": true
}
]
}
}
},
{
"type": "loop_stmt",
"named": true,
"fields": {
"block": {
"multiple": false,
"required": true,
"types": [
{
"type": "block",
"named": true
}
]
}
}
},
{
"type": "parameter",
"named": true,
"fields": {
"name": {
"multiple": false,
"required": true,
"types": [
{
"type": "ident",
"named": true
}
]
},
"type": {
"multiple": false,
"required": true,
"types": [
{
"type": "type",
"named": true
}
]
}
}
},
{
"type": "prefix_expr",
"named": true,
"fields": {
"expr": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
}
}
},
{
"type": "program",
"named": true,
"root": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "break_stmt",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "continue_stmt",
"named": true
},
{
"type": "expr_stmt",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "for_stmt",
"named": true
},
{
"type": "function_definition",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "let_stmt",
"named": true
},
{
"type": "loop_stmt",
"named": true
},
{
"type": "prefix_expr",
"named": true
},
{
"type": "return_stmt",
"named": true
},
{
"type": "while_stmt",
"named": true
}
]
}
},
{
"type": "return_stmt",
"named": true,
"fields": {
"expr": {
"multiple": true,
"required": false,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"named": true
}
]
}
}
},
{
"type": "type",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "ident",
"named": true
}
]
}
},
{
"type": "while_stmt",
"named": true,
"fields": {
"block": {
"multiple": false,
"required": true,
"types": [
{
"type": "block",
"named": true
}
]
},
"cond": {
"multiple": true,
"required": true,
"types": [
{
"type": "(",
"named": false
},
{
"type": ")",
"named": false
},
{
"type": "assign_expr",
"named": true
},
{
"type": "block",
"named": true
},
{
"type": "bool",
"named": true
},
{
"type": "call_expr",
"named": true
},
{
"type": "cast_expr",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "ident",
"named": true
},
{
"type": "if_expr",
"named": true
},
{
"type": "infix_expr",
"named": true
},
{
"type": "int",
"named": true
},
{
"type": "prefix_expr",
"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": "-=",
"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": "^=",
"named": false
},
{
"type": "as",
"named": false
},
{
"type": "block_comment",
"named": true,
"extra": true
},
{
"type": "break",
"named": false
},
{
"type": "char",
"named": true
},
{
"type": "continue",
"named": false
},
{
"type": "else",
"named": false
},
{
"type": "false",
"named": false
},
{
"type": "float",
"named": true
},
{
"type": "fn",
"named": false
},
{
"type": "for",
"named": false
},
{
"type": "ident",
"named": true
},
{
"type": "if",
"named": false
},
{
"type": "int",
"named": true
},
{
"type": "let",
"named": false
},
{
"type": "line_comment",
"named": true,
"extra": true
},
{
"type": "loop",
"named": false
},
{
"type": "mut",
"named": false
},
{
"type": "return",
"named": false
},
{
"type": "true",
"named": false
},
{
"type": "while",
"named": false
},
{
"type": "{",
"named": false
},
{
"type": "|",
"named": false
},
{
"type": "|=",
"named": false
},
{
"type": "||",
"named": false
},
{
"type": "}",
"named": false
}
]