Add else blocks to javascript grammar
This commit is contained in:
parent
f601322956
commit
059f7ff9d5
3 changed files with 876 additions and 591 deletions
|
|
@ -4,6 +4,10 @@ namespace tree_sitter {
|
|||
namespace examples {
|
||||
using namespace tree_sitter::rules;
|
||||
|
||||
static rule_ptr optional(const rule_ptr &rule) {
|
||||
return choice({ rule, blank() });
|
||||
}
|
||||
|
||||
static rule_ptr comma_sep(const rule_ptr &element) {
|
||||
return choice({
|
||||
seq({
|
||||
|
|
@ -25,17 +29,20 @@ namespace tree_sitter {
|
|||
seq({ sym("assignment"), sym("_terminator") }),
|
||||
seq({ sym("expression"), sym("_terminator") }) }) },
|
||||
{ "if_statement", seq({
|
||||
sym("_IF"),
|
||||
sym("_if"),
|
||||
str("("),
|
||||
sym("expression"),
|
||||
str(")"),
|
||||
sym("statement_block") }) },
|
||||
sym("statement_block"),
|
||||
optional(seq({
|
||||
sym("_else"),
|
||||
sym("statement_block") })) }) },
|
||||
{ "statement_block", seq({
|
||||
str("{"),
|
||||
repeat(sym("statement")),
|
||||
str("}") }) },
|
||||
{ "assignment", seq({
|
||||
sym("_VAR"),
|
||||
sym("_var"),
|
||||
sym("identifier"),
|
||||
str("="),
|
||||
sym("expression") })},
|
||||
|
|
@ -61,8 +68,9 @@ namespace tree_sitter {
|
|||
str("["),
|
||||
comma_sep(err(sym("expression"))),
|
||||
str("]") }) },
|
||||
{ "_VAR", str("var") },
|
||||
{ "_IF", str("if") },
|
||||
{ "_var", str("var") },
|
||||
{ "_if", str("if") },
|
||||
{ "_else", str("else") },
|
||||
{ "string", pattern("\"([^\"]|\\\\\")+\"") },
|
||||
{ "identifier", pattern("[\\w_$]+") },
|
||||
{ "number", pattern("\\d+(.\\d+)?") },
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -11,7 +11,7 @@ var x = {};
|
|||
==========================================
|
||||
parses if statements
|
||||
==========================================
|
||||
if (duh) {
|
||||
if (theCondition) {
|
||||
var x = 2;
|
||||
}
|
||||
---
|
||||
|
|
@ -20,3 +20,18 @@ if (duh) {
|
|||
(expression (identifier))
|
||||
(statement_block (statement (assignment (identifier) (expression (literal (number)))))))))
|
||||
|
||||
==========================================
|
||||
parses if-else statements
|
||||
==========================================
|
||||
if (theCondition) {
|
||||
var x = 2;
|
||||
} else {
|
||||
var x = 4;
|
||||
}
|
||||
---
|
||||
(program (statement
|
||||
(if_statement
|
||||
(expression (identifier))
|
||||
(statement_block (statement (assignment (identifier) (expression (literal (number))))))
|
||||
(statement_block (statement (assignment (identifier) (expression (literal (number)))))))))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue