Add else blocks to javascript grammar

This commit is contained in:
Max Brunsfeld 2014-03-25 23:40:53 -07:00
parent f601322956
commit 059f7ff9d5
3 changed files with 876 additions and 591 deletions

View file

@ -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

View file

@ -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)))))))))