From 4477bdf961f98ec3143743684eafba45a2e29287 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Sun, 9 Jun 2019 10:15:39 +1000 Subject: [PATCH] oceani: add more syntax error handling. We catch some errors earlier so more errors can be reported in a single run. The indent structure make recovery easy! As we might abort out of a var scope, we only insist the scope is balanced in there are no parser errors. Signed-off-by: NeilBrown --- csrc/oceani-tests.mdc | 7 +++---- csrc/oceani.mdc | 9 ++++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/csrc/oceani-tests.mdc b/csrc/oceani-tests.mdc index 40489bf..a10d027 100644 --- a/csrc/oceani-tests.mdc +++ b/csrc/oceani-tests.mdc @@ -595,8 +595,7 @@ separate file first, then run from there. if then else while do ###### output: syn1 - .tmp.code:3:11: error: unhandled parse error: then - oceani: no program found. + .tmp.code:3:11: Syntax error in statement: then ###### test: tokerr program: @@ -795,8 +794,8 @@ various places that `type_err()` are called. print foo, bar ###### output: type_err_const1 - .tmp.code:3:12: error: unhandled parse error: : - oceani: no program found. + .tmp.code:3:12: Syntax error in constant: : + .tmp.code:4:8: Syntax error in constant: bar ## Test erroneous command line args diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc index f36bbdb..a8653cc 100644 --- a/csrc/oceani.mdc +++ b/csrc/oceani.mdc @@ -2067,6 +2067,7 @@ function will be needed. $0->f.type = $<3; $0->f.init = val_init($3); }$ + | ERROR ${ tok_err(c, "Syntax error in struct field", &$1); }$ ###### forward decls static void structure_print_type(struct type *t, FILE *f); @@ -3074,6 +3075,7 @@ is in-place. | SimpleStatements ; ${ $0 = $<1; }$ SimpleStatement -> pass ${ $0 = NULL; }$ + | ERROR ${ tok_err(c, "Syntax error in statement", &$1); }$ ## SimpleStatement Grammar ###### print binode cases @@ -3917,6 +3919,10 @@ various declarations in the parse context. | DeclareProgram | DeclareStruct | NEWLINE + | ERROR NEWLINE ${ + tok_err(c, + "error: unhandled parse error", &$1); + }$ ## top level grammar @@ -3990,6 +3996,7 @@ searching through for the Nth constant for decreasing N. v->val = interp_exec($5); } } }$ + | ERROR NEWLINE ${ tok_err(c, "Syntax error in constant", &$1); }$ ###### print const decls { @@ -4058,7 +4065,7 @@ analysis is a bit more interesting at this level. $0->left = reorder_bilist($<3); $0->right = $<4; var_block_close(c, CloseSequential); - if (c->scope_stack) abort(); + if (c->scope_stack && !c->parse_error) abort(); }$ | ERROR ${ tok_err(c, -- 2.43.0