Add error recovery for statements and if-conditions

pull/70/head
Max Brunsfeld 2014-08-25 23:48:43 +07:00
parent f9ecf791a3
commit 53563a5f08
2 changed files with 39 additions and 3 deletions

@ -1,5 +1,5 @@
compiler = require("tree-sitter-compiler")
{ choice, repeat, seq, sym, keyword, token, optional, prec } = compiler.rules
{ choice, err, repeat, seq, sym, keyword, token, optional, prec } = compiler.rules
commaSep1 = (rule) ->
seq(rule, repeat(seq(",", rule)))
@ -32,11 +32,11 @@ module.exports = compiler.grammar
@var_declaration)
expression_statement: -> seq(
@expression, terminator())
err(@expression), terminator())
if_statement: -> seq(
keyword("if"),
"(", @expression, ")",
"(", err(@expression), ")",
@statement)
switch_statement: -> seq(

@ -0,0 +1,36 @@
============================================
Bad statements
============================================
what the heck is this
y();
if (x) {
>>>
var y = right
}
---
(program
(expression_statement (ERROR 't'))
(expression_statement (function_call (identifier)))
(if_statement (identifier) (statement_block
(expression_statement (ERROR '>'))
(var_declaration (var_assignment (identifier) (identifier))))))
============================================
Bad if conditions
============================================
if (%$&^)
wat();
okWhatever();
---
(program
(if_statement (ERROR '%')
(expression_statement (function_call (identifier))))
(expression_statement (function_call (identifier))))