Add more features to javascript grammar
This commit is contained in:
parent
09e28e7859
commit
6a0e2c08e6
4 changed files with 3055 additions and 1500 deletions
|
|
@ -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
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue