Add more features to javascript grammar

This commit is contained in:
Max Brunsfeld 2014-03-26 08:23:13 -07:00
parent 09e28e7859
commit 6a0e2c08e6
4 changed files with 3055 additions and 1500 deletions

View file

@ -25,6 +25,7 @@ namespace tree_sitter {
str(";"),
str("\n") }) },
{ "statement", choice({
sym("statement_block"),
sym("if_statement"),
seq({ sym("assignment"), sym("_terminator") }),
seq({ sym("expression"), sym("_terminator") }) }) },
@ -33,10 +34,10 @@ namespace tree_sitter {
str("("),
sym("expression"),
str(")"),
sym("statement_block"),
sym("statement"),
optional(seq({
sym("_else"),
sym("statement_block") })) }) },
sym("statement") })) }) },
{ "statement_block", seq({
str("{"),
repeat(sym("statement")),
@ -47,8 +48,24 @@ namespace tree_sitter {
str("="),
sym("expression") })},
{ "expression", choice({
sym("function_expression"),
sym("function_call"),
sym("literal"),
sym("identifier") }) },
{ "function_expression", seq({
sym("_function"),
sym("identifier"),
sym("formal_parameters"),
sym("statement_block") }) },
{ "function_call", seq({
sym("identifier"),
str("("),
comma_sep(sym("expression")),
str(")") }) },
{ "formal_parameters", seq({
str("("),
comma_sep(sym("identifier")),
str(")") })},
{ "literal", choice({
sym("object"),
sym("array"),
@ -68,9 +85,12 @@ namespace tree_sitter {
str("["),
comma_sep(err(sym("expression"))),
str("]") }) },
{ "_var", str("var") },
{ "_if", str("if") },
{ "_function", str("function") },
{ "_else", str("else") },
{ "string", pattern("\"([^\"]|\\\\\")+\"") },
{ "identifier", pattern("[\\w_$]+") },
{ "number", pattern("\\d+(.\\d+)?") },

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ int main(int argc, char *argv[]) {
"",
"--no-color",
"--only="
""
"compiles the javascript grammar"
};
return bandit::run(4, const_cast<char **>(args));
}

View file

@ -34,3 +34,37 @@ if (theCondition) {
(statement_block (statement (assignment (identifier) (number))))
(statement_block (statement (assignment (identifier) (number))))))
==============================================
parses if-else statements with many conditions
==============================================
if (conditionA) {
var x = 2;
} else if (conditionB)
var x = 4;
else {
var x = 8;
}
---
(program (if_statement
(identifier)
(statement_block (statement (assignment (identifier) (number))))
(if_statement
(identifier)
(statement (assignment (identifier) (number)))
(statement_block (statement (assignment (identifier) (number)))))))
==========================================
parses named functions
==========================================
function doThis(argA, argB) {
var x = argA;
};
doThis(5, 6);
---
(program
(statement (function_expression
(identifier)
(formal_parameters (identifier) (identifier))
(statement_block (statement (assignment (identifier) (identifier))))))
(statement (function_call (identifier) (number) (number))))