Add switch statements to javascript grammar
This commit is contained in:
parent
129d2b9314
commit
2191a7d988
3 changed files with 6440 additions and 3827 deletions
|
|
@ -8,6 +8,10 @@ namespace tree_sitter_examples {
|
|||
return choice({ rule, blank() });
|
||||
}
|
||||
|
||||
static rule_ptr in_braces(rule_ptr rule) {
|
||||
return seq({ str("{"), rule, str("}") });
|
||||
}
|
||||
|
||||
static rule_ptr comma_sep(rule_ptr element) {
|
||||
return choice({
|
||||
seq({ element, repeat(seq({ str(","), element })) }),
|
||||
|
|
@ -20,15 +24,14 @@ namespace tree_sitter_examples {
|
|||
{ "statement", choice({
|
||||
sym("statement_block"),
|
||||
sym("if_statement"),
|
||||
sym("switch_statement"),
|
||||
sym("for_statement"),
|
||||
sym("break_statement"),
|
||||
sym("var_declaration"),
|
||||
sym("expression_statement") }) },
|
||||
|
||||
// Statements
|
||||
{ "statement_block", seq({
|
||||
str("{"),
|
||||
err(repeat(sym("statement"))),
|
||||
str("}") }) },
|
||||
{ "statement_block", in_braces(err(repeat(sym("statement")))) },
|
||||
{ "for_statement", seq({
|
||||
sym("_for"),
|
||||
str("("),
|
||||
|
|
@ -49,6 +52,25 @@ namespace tree_sitter_examples {
|
|||
optional(seq({
|
||||
sym("_else"),
|
||||
sym("statement") })) }) },
|
||||
{ "switch_statement", seq({
|
||||
sym("_switch"),
|
||||
str("("),
|
||||
err(sym("expression")),
|
||||
str(")"),
|
||||
in_braces(repeat(sym("switch_case"))) }) },
|
||||
{ "switch_case", seq({
|
||||
choice({
|
||||
seq({
|
||||
sym("_case"),
|
||||
sym("expression"),
|
||||
}),
|
||||
sym("_default")
|
||||
}),
|
||||
str(":"),
|
||||
repeat(sym("statement")) }) },
|
||||
{ "break_statement", seq({
|
||||
sym("_break"),
|
||||
sym("_terminator") }) },
|
||||
{ "var_declaration", seq({
|
||||
sym("_var"),
|
||||
choice({
|
||||
|
|
@ -112,16 +134,20 @@ namespace tree_sitter_examples {
|
|||
str("]") }) },
|
||||
|
||||
// Keywords
|
||||
{ "_terminator", pattern("[;\n]") },
|
||||
{ "_var", str("var") },
|
||||
{ "_for", str("for") },
|
||||
{ "_if", str("if") },
|
||||
{ "_function", str("function") },
|
||||
{ "_break", str("break") },
|
||||
{ "_case", str("case") },
|
||||
{ "_default", str("default") },
|
||||
{ "_else", str("else") },
|
||||
{ "_for", str("for") },
|
||||
{ "_function", str("function") },
|
||||
{ "_if", str("if") },
|
||||
{ "_switch", str("switch") },
|
||||
{ "_var", str("var") },
|
||||
{ "null", str("null") },
|
||||
{ "true", str("true") },
|
||||
{ "false", str("false") },
|
||||
|
||||
{ "_terminator", pattern("[;\n]") },
|
||||
{ "string", pattern("\"([^\"]|\\\\\")+\"") },
|
||||
{ "identifier", pattern("\\a[\\w_$]*") },
|
||||
{ "number", pattern("\\d+(.\\d+)?") },
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -87,3 +87,35 @@ x.theMethod(5, 6);
|
|||
(property_access (identifier) (identifier))
|
||||
(number) (number))))
|
||||
|
||||
===========================================
|
||||
parses switch statements
|
||||
===========================================
|
||||
switch(x) {
|
||||
case "hello":
|
||||
print("one");
|
||||
break;
|
||||
case z():
|
||||
print("two");
|
||||
break;
|
||||
default:
|
||||
print("three");
|
||||
}
|
||||
---
|
||||
(program
|
||||
(switch_statement (identifier)
|
||||
(switch_case
|
||||
(string)
|
||||
(expression_statement (function_call (identifier) (string)))
|
||||
(break_statement))
|
||||
(switch_case
|
||||
(function_call (identifier))
|
||||
(expression_statement (function_call (identifier) (string)))
|
||||
(break_statement))
|
||||
(switch_case
|
||||
(expression_statement (function_call (identifier) (string))))))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue