diff options
| author | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-11-14 17:45:45 +0000 |
|---|---|---|
| committer | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-11-14 18:17:32 +0000 |
| commit | c8450b94be661a6d9d9d2718cc16befa4a5abae9 (patch) | |
| tree | 099732f9f114d2cb3d20765664bfdbebe9fd719b /src/parser/parser.y | |
| parent | 1b0780d225707f2cd71e82eaab8df5318cd72bae (diff) | |
| download | specs-c8450b94be661a6d9d9d2718cc16befa4a5abae9.tar.gz specs-c8450b94be661a6d9d9d2718cc16befa4a5abae9.zip | |
Improve parsing
- Make multi-file more robust
- Error reporting is more accurate (shows file:line and prints offending
string)
- Allow `.include` directives in subcircuits
Diffstat (limited to 'src/parser/parser.y')
| -rw-r--r-- | src/parser/parser.y | 12 |
1 files changed, 9 insertions, 3 deletions
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); } |
