From 2d0f90c7d5b67d7270fa71fc5c8690a164f5ad58 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 9 May 2014 21:36:18 -0700 Subject: [PATCH] Add try and while statements to js grammar --- examples/grammars/javascript.cc | 12 +++++++++ .../languages/javascript/control_flow.txt | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/examples/grammars/javascript.cc b/examples/grammars/javascript.cc index ef983b1f..f396780d 100644 --- a/examples/grammars/javascript.cc +++ b/examples/grammars/javascript.cc @@ -12,7 +12,9 @@ namespace tree_sitter_examples { { "statement", choice({ sym("statement_block"), sym("if_statement"), + sym("try_statement"), sym("switch_statement"), + sym("while_statement"), sym("for_statement"), sym("break_statement"), sym("var_declaration"), @@ -36,6 +38,16 @@ namespace tree_sitter_examples { optional(prec(1, seq({ keyword("else"), sym("statement") }))) }) }, + { "while_statement", seq({ + keyword("while"), + in_parens(err(sym("expression"))), + sym("statement") }) }, + { "try_statement", seq({ + keyword("try"), + sym("statement"), + keyword("catch"), + in_parens(err(sym("identifier"))), + sym("statement") }) }, { "switch_statement", seq({ keyword("switch"), in_parens(err(sym("expression"))), diff --git a/spec/runtime/languages/javascript/control_flow.txt b/spec/runtime/languages/javascript/control_flow.txt index 462cd257..d864e283 100644 --- a/spec/runtime/languages/javascript/control_flow.txt +++ b/spec/runtime/languages/javascript/control_flow.txt @@ -54,6 +54,31 @@ for (var i = 1; someCondition(i); i = next()) { (assignment (identifier) (function_call (identifier))) (statement_block (expression_statement (function_call (identifier)))))) +========================================== +parses while loops +========================================== +while (someCondition(i)) { + doSomething(); +} +--- +(program (while_statement + (function_call (identifier) (identifier)) + (statement_block (expression_statement (function_call (identifier)))))) + +========================================== +parses try/catch statements +========================================== +try { + doSomething(); +} catch (e) { + logError(e); +} +--- +(program (try_statement + (statement_block (expression_statement (function_call (identifier)))) + (identifier) + (statement_block (expression_statement (function_call (identifier) (identifier)))))) + =========================================== parses switch statements ===========================================