diff --git a/grammar.coffee b/grammar.coffee index d84ffc0..a20f16e 100644 --- a/grammar.coffee +++ b/grammar.coffee @@ -72,6 +72,7 @@ module.exports = grammar @return_statement, @if_statement, @for_statement, + @while_statement, @expression_statement, @statement_block), @@ -99,6 +100,11 @@ module.exports = grammar ")", @statement) + while_statement: -> seq( + keyword("while"), + "(", @expression, ")", + @statement) + type: -> seq( optional(keyword("const")), choice( diff --git a/grammar_test/statements.txt b/grammar_test/statements.txt index 30c8ba6..614eda9 100644 --- a/grammar_test/statements.txt +++ b/grammar_test/statements.txt @@ -77,3 +77,19 @@ int main() { (function_call (identifier)) (function_call (identifier)) (expression_statement (identifier))))) + +============================================ +While loops +============================================ + +int main() { + while (x) + printf("hi"); +} + +--- + +(function_declaration (identifier) (identifier) (formal_parameters) + (statement_block + (while_statement (identifier) + (expression_statement (function_call (identifier) (string))))))