Add switch statements

pull/70/head
Max Brunsfeld 2014-08-04 18:38:11 +07:00
parent 6a6c8f067b
commit 825945d79a
2 changed files with 55 additions and 0 deletions

@ -18,7 +18,9 @@ module.exports = compiler.grammar
statement: -> choice(
@expression_statement,
@if_statement,
@switch_statement,
@for_statement,
@break_statement,
@statement_block,
@return_statement,
@var_declaration)
@ -31,6 +33,30 @@ module.exports = compiler.grammar
"(", @expression, ")",
@statement)
switch_statement: -> seq(
keyword("switch"),
"(",
@expression,
")",
"{",
repeat(choice(@case, @default))
"}")
case: -> seq(
keyword("case"),
@expression,
":",
repeat(@statement))
default: -> seq(
keyword("default"),
":",
repeat(@statement))
break_statement: -> seq(
keyword("break"),
terminator())
for_statement: -> seq(
keyword("for"),
"(",

@ -118,3 +118,32 @@ var x = y
(return_statement (number))
(var_declaration (identifier) (identifier)))
============================================
Switch statements
============================================
switch (x) {
case 1:
case 2:
something();
break;
case "three":
somethingElse();
break;
default:
return 4;
}
---
(program
(switch_statement (identifier)
(case (number))
(case (number)
(expression_statement (function_call (identifier)))
(break_statement))
(case (string)
(expression_statement (function_call (identifier)))
(break_statement))
(default
(return_statement (number)))))