feat: Major grammar improvements and refactoring

- Refactor statement parsing with proper precedence handling
- Improve block structure parsing with indent/dedent support
- Enhance control flow parsing (conditionals, loops)
- Add print command support
- Improve function declaration parsing
- Update scanner for better string and comment handling
- Add comprehensive test corpus
- Better handling of newlines and statement boundaries
This commit is contained in:
2025-11-26 22:19:38 +01:00
parent b7942e9f79
commit 4d61f91e06
9 changed files with 15323 additions and 18695 deletions

483
src/node-types.json generated
View File

@@ -1,19 +1,4 @@
[
{
"type": "activate_command",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "argument_list",
"named": true,
@@ -42,6 +27,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "comma_sep",
"named": true
@@ -63,7 +52,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -98,8 +87,23 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
"type": "array_elements",
"named": true
}
]
}
},
{
"type": "array_elements",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "array",
@@ -122,7 +126,7 @@
"named": true
},
{
"type": "comma_sep",
"type": "color_code",
"named": true
},
{
@@ -142,7 +146,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -200,6 +204,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -217,7 +225,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -275,6 +283,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -292,7 +304,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -339,7 +351,7 @@
"named": true
},
{
"type": "command_statement",
"type": "command",
"named": true
},
{
@@ -358,10 +370,6 @@
"type": "else_clause",
"named": true
},
{
"type": "else_if_clause",
"named": true
},
{
"type": "expression_statement",
"named": true
@@ -379,7 +387,7 @@
"named": true
},
{
"type": "new_expression",
"type": "print_command",
"named": true
},
{
@@ -398,21 +406,6 @@
"named": true,
"fields": {}
},
{
"type": "brew_command",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "identifier",
"named": true
}
]
}
},
{
"type": "call_expression",
"named": true,
@@ -441,6 +434,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -458,7 +455,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -505,39 +502,31 @@
"fields": {}
},
{
"type": "command_statement",
"type": "command",
"named": true,
"fields": {},
"children": {
"multiple": false,
"multiple": true,
"required": true,
"types": [
{
"type": "activate_command",
"type": "enchantment_level",
"named": true
},
{
"type": "brew_command",
"type": "identifier",
"named": true
},
{
"type": "disable_enable_command",
"type": "number",
"named": true
},
{
"type": "equip_command",
"type": "star_level",
"named": true
},
{
"type": "loadout_command",
"named": true
},
{
"type": "play_command",
"named": true
},
{
"type": "print_command",
"type": "string",
"named": true
}
]
@@ -575,6 +564,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -592,7 +585,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -622,30 +615,10 @@
]
}
},
{
"type": "disable_enable_command",
"named": true,
"fields": {}
},
{
"type": "else_clause",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "block",
"named": true
}
]
}
},
{
"type": "else_if_clause",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
@@ -674,6 +647,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -691,7 +668,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -736,21 +713,6 @@
]
}
},
{
"type": "equip_command",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "item_criteria",
"named": true
}
]
}
},
{
"type": "expression_statement",
"named": true,
@@ -779,6 +741,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -796,7 +762,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -858,6 +824,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -875,7 +845,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -905,77 +875,6 @@
]
}
},
{
"type": "function_body",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "block_comment",
"named": true
},
{
"type": "break_statement",
"named": true
},
{
"type": "command_statement",
"named": true
},
{
"type": "comment",
"named": true
},
{
"type": "conditional",
"named": true
},
{
"type": "continue_statement",
"named": true
},
{
"type": "else_clause",
"named": true
},
{
"type": "else_if_clause",
"named": true
},
{
"type": "expression_statement",
"named": true
},
{
"type": "for_loop",
"named": true
},
{
"type": "function_declaration",
"named": true
},
{
"type": "import_statement",
"named": true
},
{
"type": "new_expression",
"named": true
},
{
"type": "return_statement",
"named": true
},
{
"type": "variable_declaration",
"named": true
}
]
}
},
{
"type": "function_declaration",
"named": true,
@@ -993,10 +892,10 @@
},
"children": {
"multiple": true,
"required": false,
"required": true,
"types": [
{
"type": "function_body",
"type": "block",
"named": true
},
{
@@ -1049,6 +948,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1066,7 +969,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1097,7 +1000,7 @@
}
},
{
"type": "item_criteria",
"type": "interpolation",
"named": true,
"fields": {},
"children": {
@@ -1105,7 +1008,31 @@
"required": true,
"types": [
{
"type": "enchantment_level",
"type": "array",
"named": true
},
{
"type": "assignment_expression",
"named": true
},
{
"type": "binary_expression",
"named": true
},
{
"type": "boolean",
"named": true
},
{
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
},
{
@@ -1113,23 +1040,40 @@
"named": true
},
{
"type": "star_level",
"type": "index_expression",
"named": true
}
]
}
},
{
"type": "loadout_command",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
},
{
"type": "member_expression",
"named": true
},
{
"type": "new_statement",
"named": true
},
{
"type": "null",
"named": true
},
{
"type": "number",
"named": true
},
{
"type": "parenthesized_expression",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "unary_expression",
"named": true
},
{
"type": "update_expression",
"named": true
}
]
}
@@ -1162,6 +1106,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1179,7 +1127,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1221,7 +1169,7 @@
}
},
{
"type": "new_expression",
"type": "new_statement",
"named": true,
"fields": {},
"children": {
@@ -1278,6 +1226,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1295,7 +1247,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1326,7 +1278,7 @@
}
},
{
"type": "play_command",
"type": "print_args",
"named": true,
"fields": {},
"children": {
@@ -1334,11 +1286,34 @@
"required": true,
"types": [
{
"type": "identifier",
"type": "print_argument",
"named": true
}
]
}
},
{
"type": "print_argument",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "color_code",
"named": true
},
{
"type": "number",
"type": "interpolation",
"named": true
},
{
"type": "print_text",
"named": true
},
{
"type": "string",
"named": true
}
]
@@ -1353,19 +1328,26 @@
"required": false,
"types": [
{
"type": "color_code",
"type": "print_args",
"named": true
},
{
"type": "identifier",
"type": "print_continuation",
"named": true
},
}
]
}
},
{
"type": "print_continuation",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "number",
"named": true
},
{
"type": "string",
"type": "interpolation",
"named": true
}
]
@@ -1399,6 +1381,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1416,7 +1402,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1449,7 +1435,6 @@
{
"type": "source_file",
"named": true,
"root": true,
"fields": {},
"children": {
"multiple": true,
@@ -1464,7 +1449,7 @@
"named": true
},
{
"type": "command_statement",
"type": "command",
"named": true
},
{
@@ -1483,10 +1468,6 @@
"type": "else_clause",
"named": true
},
{
"type": "else_if_clause",
"named": true
},
{
"type": "expression_statement",
"named": true
@@ -1504,7 +1485,7 @@
"named": true
},
{
"type": "new_expression",
"type": "print_command",
"named": true
},
{
@@ -1566,6 +1547,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1583,7 +1568,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1641,6 +1626,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1658,7 +1647,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1726,6 +1715,10 @@
"type": "call_expression",
"named": true
},
{
"type": "color_code",
"named": true
},
{
"type": "float",
"named": true
@@ -1743,7 +1736,7 @@
"named": true
},
{
"type": "new_expression",
"type": "new_statement",
"named": true
},
{
@@ -1903,15 +1896,7 @@
"named": false
},
{
"type": "L",
"named": false
},
{
"type": "P",
"named": false
},
{
"type": "R",
"type": "@",
"named": false
},
{
@@ -1923,15 +1908,7 @@
"named": false
},
{
"type": "abilities",
"named": false
},
{
"type": "activate",
"named": false
},
{
"type": "banner",
"type": "^",
"named": false
},
{
@@ -1942,10 +1919,6 @@
"type": "break_statement",
"named": true
},
{
"type": "brew",
"named": false
},
{
"type": "color_code",
"named": true
@@ -1958,26 +1931,6 @@
"type": "continue_statement",
"named": true
},
{
"type": "disable",
"named": false
},
{
"type": "enable",
"named": false
},
{
"type": "equip",
"named": false
},
{
"type": "equipL",
"named": false
},
{
"type": "equipR",
"named": false
},
{
"type": "false",
"named": false
@@ -1994,10 +1947,6 @@
"type": "func",
"named": false
},
{
"type": "hud",
"named": false
},
{
"type": "identifier",
"named": true
@@ -2006,10 +1955,6 @@
"type": "import",
"named": false
},
{
"type": "loadout",
"named": false
},
{
"type": "module_path",
"named": true
@@ -2018,10 +1963,6 @@
"type": "new",
"named": false
},
{
"type": "npcDialog",
"named": false
},
{
"type": "null",
"named": true
@@ -2031,16 +1972,8 @@
"named": true
},
{
"type": "pause",
"named": false
},
{
"type": "play",
"named": false
},
{
"type": "player",
"named": false
"type": "print_text",
"named": true
},
{
"type": "return",