From 532f9131f5210f12fddf7b38f08825a07cdd823b Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Wed, 16 Apr 2003 12:58:17 +0000 Subject: [PATCH] * src/ltlparse/public.hh (format_parse_errors): New function. * src/ltlparse/fmterror.cc: New file. * src/ltlparse/Makefile.am (libltlparse_a_SOURCES): Add fmterror.cc. * src/ltltests/equals.cc, src/ltltests/readltl.cc: Simplify using format_parse_errors. --- ChangeLog | 6 ++++++ src/ltlparse/Makefile.am | 1 + src/ltlparse/fmterror.cc | 35 +++++++++++++++++++++++++++++++++++ src/ltlparse/public.hh | 6 ++++++ src/ltltest/equals.cc | 28 ++-------------------------- src/ltltest/readltl.cc | 17 ++--------------- 6 files changed, 52 insertions(+), 41 deletions(-) create mode 100644 src/ltlparse/fmterror.cc diff --git a/ChangeLog b/ChangeLog index 7bf116da3..96b628d34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2003-04-16 Alexandre DURET-LUTZ + * src/ltlparse/public.hh (format_parse_errors): New function. + * src/ltlparse/fmterror.cc: New file. + * src/ltlparse/Makefile.am (libltlparse_a_SOURCES): Add fmterror.cc. + * src/ltltests/equals.cc, src/ltltests/readltl.cc: Simplify using + format_parse_errors. + * src/ltlvisit/equals.cc, src/ltlvisit/equals.hh: New files. * src/ltlvisit/Makefile.am (libltlvisit_a_SOURCES): Add equals.hh and equals.cc. diff --git a/src/ltlparse/Makefile.am b/src/ltlparse/Makefile.am index 957735ce0..18b1f4e13 100644 --- a/src/ltlparse/Makefile.am +++ b/src/ltlparse/Makefile.am @@ -21,6 +21,7 @@ $(FROM_LTLPARSE_YY_OTHERS): $(LTLPARSE_YY) @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) $(FROM_LTLPARSE_YY_MAIN) libltlparse_a_SOURCES = \ + fmterror.cc \ $(FROM_LTLPARSE_YY) \ ltlscan.ll \ parsedecl.hh \ diff --git a/src/ltlparse/fmterror.cc b/src/ltlparse/fmterror.cc new file mode 100644 index 000000000..30b4ad574 --- /dev/null +++ b/src/ltlparse/fmterror.cc @@ -0,0 +1,35 @@ +#include "public.hh" + +namespace spot +{ + namespace ltl + { + + bool + format_parse_errors(std::ostream& os, + const std::string& ltl_string, + parse_error_list& error_list) + { + bool printed = false; + spot::ltl::parse_error_list::iterator it; + for (it = error_list.begin(); it != error_list.end(); ++it) + { + os << ">>> " << ltl_string << std::endl; + yy::Location& l = it->first; + + unsigned n = 0; + for (; n < 4 + l.begin.column; ++n) + os << ' '; + // Write at least one '^', even if begin==end. + os << '^'; + ++n; + for (; n < 4 + l.end.column; ++n) + os << '^'; + os << std::endl << it->second << std::endl << std::endl; + printed = true; + } + return printed; + } + + } +} diff --git a/src/ltlparse/public.hh b/src/ltlparse/public.hh index 921de7fcd..0a3976081 100644 --- a/src/ltlparse/public.hh +++ b/src/ltlparse/public.hh @@ -6,6 +6,7 @@ # include "location.hh" # include # include +# include namespace spot { @@ -18,6 +19,11 @@ namespace spot formulae* parse(const std::string& ltl_string, parse_error_list& error_list, bool debug = false); + + // Return true iff any diagnostic was output to os. + bool format_parse_errors(std::ostream& os, + const std::string& ltl_string, + parse_error_list& error_list); } } diff --git a/src/ltltest/equals.cc b/src/ltltest/equals.cc index 9029ce976..9cd4f1c5e 100644 --- a/src/ltltest/equals.cc +++ b/src/ltltest/equals.cc @@ -9,30 +9,6 @@ syntax(char *prog) exit(2); } -bool -print_parse_error(const char* f, spot::ltl::parse_error_list& pel) -{ - bool err = false; - - spot::ltl::parse_error_list::iterator it; - for (it = pel.begin(); it != pel.end(); ++it) - { - std::cerr << ">>> " << f << std::endl; - unsigned n = 0; - yy::Location& l = it->first; - for (; n < 4 + l.begin.column; ++n) - std::cerr << ' '; - // Write at least one '^', even if begin==end. - std::cerr << '^'; - ++n; - for (; n < 4 + l.end.column; ++n) - std::cerr << '^'; - std::cerr << std::endl << it->second << std::endl << std::endl; - err = true; - } - return err; -} - int main(int argc, char **argv) { @@ -43,13 +19,13 @@ main(int argc, char **argv) spot::ltl::parse_error_list p1; spot::ltl::formulae *f1 = spot::ltl::parse(argv[1], p1); - if (print_parse_error(argv[1], p1)) + if (spot::ltl::format_parse_errors(std::cerr, argv[1], p1)) return 2; spot::ltl::parse_error_list p2; spot::ltl::formulae *f2 = spot::ltl::parse(argv[2], p2); - if (print_parse_error(argv[2], p2)) + if (spot::ltl::format_parse_errors(std::cerr, argv[2], p2)) return 2; if (equals(f1, f2)) diff --git a/src/ltltest/readltl.cc b/src/ltltest/readltl.cc index 03e5c0e5e..64e84588b 100644 --- a/src/ltltest/readltl.cc +++ b/src/ltltest/readltl.cc @@ -34,21 +34,8 @@ main(int argc, char **argv) pel, debug); spot::ltl::parse_error_list::iterator it; - for (it = pel.begin(); it != pel.end(); ++it) - { - std::cerr << ">>> " << argv[formulae_index] << std::endl; - unsigned n = 0; - yy::Location& l = it->first; - for (; n < 4 + l.begin.column; ++n) - std::cerr << ' '; - // Write at least one '^', even if begin==end. - std::cerr << '^'; - ++n; - for (; n < 4 + l.end.column; ++n) - std::cerr << '^'; - std::cerr << std::endl << it->second << std::endl << std::endl; - exit_code = 1; - } + exit_code = + spot::ltl::format_parse_errors(std::cerr, argv[formulae_index], pel); if (f) {