aboutsummaryrefslogtreecommitdiff
path: root/src/parser/parser.y
diff options
context:
space:
mode:
authorClément Zrounba <clement.zrounba@ec-lyon.fr>2023-11-14 17:45:45 +0000
committerClément Zrounba <clement.zrounba@ec-lyon.fr>2023-11-14 18:17:32 +0000
commitc8450b94be661a6d9d9d2718cc16befa4a5abae9 (patch)
tree099732f9f114d2cb3d20765664bfdbebe9fd719b /src/parser/parser.y
parent1b0780d225707f2cd71e82eaab8df5318cd72bae (diff)
downloadspecs-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.y12
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);
}