From c8450b94be661a6d9d9d2718cc16befa4a5abae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Zrounba?= Date: Tue, 14 Nov 2023 17:45:45 +0000 Subject: Improve parsing - Make multi-file more robust - Error reporting is more accurate (shows file:line and prints offending string) - Allow `.include` directives in subcircuits --- src/parser/parser.y | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/parser/parser.y') diff --git a/src/parser/parser.y b/src/parser/parser.y index 36be00f..855277e 100644 --- a/src/parser/parser.y +++ b/src/parser/parser.y @@ -10,6 +10,9 @@ //extern int yylineno; //extern char *yytext; + + string yyget_filename ( yyscan_t scanner ); + string yyget_current_line ( yyscan_t scanner ); } %{ @@ -954,8 +957,11 @@ int yyerror(yyscan_t scanner, ParseTree *pt, const char *err) } } string token_escaped = ss.str(); - printf("-- Error in the netlist (line %u): %s\n", yyget_lineno(scanner), err); - printf("-- \"%s\"\n", token_escaped.c_str()); - //cerr << err << endl; + + cerr << "Parsing error (" << yyget_filename(scanner) << ":" << yyget_lineno(scanner) << "): " << err << endl; + cerr << "-- offending token: \"" << token_escaped.c_str() << "\"" << endl; + string str = yyget_current_line(scanner); + if (!str.empty()) + cerr << "-- while parsing line: \"" << str << "\"" << endl; exit(1); } -- cgit v1.2.3