diff --git a/grammar.coffee b/grammar.coffee index 4b2283c59..72aea7d12 100644 --- a/grammar.coffee +++ b/grammar.coffee @@ -97,6 +97,7 @@ module.exports = compiler.grammar @member_access, @subscript_access, @function_call, + @bool_op, @math_op, @rel_op, @assignment, @@ -161,6 +162,10 @@ module.exports = compiler.grammar /\d+/, optional(seq(".", /\d+/)))) + bool_op: -> choice( + seq(@expression, "&&", @expression), + seq(@expression, "||", @expression)) + math_op: -> choice( seq(@expression, "++"), seq(@expression, "--"), diff --git a/grammar_test/expressions.txt b/grammar_test/expressions.txt index ca9ade9f1..21a55106d 100644 --- a/grammar_test/expressions.txt +++ b/grammar_test/expressions.txt @@ -171,6 +171,19 @@ i - j; (expression_statement (math_op (identifier) (identifier))) (expression_statement (math_op (identifier) (identifier)))) +============================================ +Boolean operators +============================================ + +i || j; +i && j; + +--- + +(program + (expression_statement (bool_op (identifier) (identifier))) + (expression_statement (bool_op (identifier) (identifier)))) + ============================================ Relational operators ============================================