Add if statements to javascript grammar

This commit is contained in:
Max Brunsfeld 2014-03-24 19:18:20 -07:00
parent aac0786449
commit 42214ba0eb
3 changed files with 1315 additions and 1130 deletions

View file

@ -17,30 +17,31 @@ namespace tree_sitter {
Grammar javascript() {
return Grammar({
{ "program", repeat(sym("statement")) },
{ "terminator", choice({ str(";"), str("\n") }) },
{ "terminator", choice({
str(";"),
str("\n") }) },
{ "statement", choice({
sym("if"),
seq({ sym("expression"), _sym("terminator") }),
seq({ sym("assignment"), _sym("terminator") }) }) },
{ "if", seq({
str("if"),
sym("if_statement"),
seq({ sym("assignment"), _sym("terminator") }),
seq({ sym("expression"), _sym("terminator") }) }) },
{ "if_statement", seq({
_sym("IF"),
str("("),
sym("expression"),
str(")"),
sym("block")
}) },
{ "block", seq({
sym("statement_block") }) },
{ "statement_block", seq({
str("{"),
repeat(sym("statement")),
str("}")
}) },
str("}") }) },
{ "assignment", seq({
str("var"),
_sym("VAR"),
sym("identifier"),
str("="),
sym("expression") })},
{ "expression", choice({
sym("literal") }) },
sym("literal"),
sym("identifier") }) },
{ "literal", choice({
sym("object"),
sym("array"),
@ -60,6 +61,8 @@ namespace tree_sitter {
str("["),
comma_sep(err(sym("expression"))),
str("]") }) },
{ "VAR", str("var") },
{ "IF", str("if") },
{ "string", pattern("\"([^\"]|\\\\\")+\"") },
{ "identifier", pattern("[\\w_$]+") },
{ "number", pattern("\\d+(.\\d+)?") },

File diff suppressed because it is too large Load diff

View file

@ -11,12 +11,12 @@ var x = {};
==========================================
parses if statements
==========================================
if (1) {
if (duh) {
var x = 2;
}
---
(program
(statement (if
(expression (literal (number)))
(block (statement (assignment (identifier) (expression (literal (number)))))))))
(statement (if_statement
(expression (identifier))
(statement_block (statement (assignment (identifier) (expression (literal (number)))))))))