From: Ulya Trofimovich Date: Thu, 7 Mar 2019 22:51:11 +0000 (+0000) Subject: Give a concise error message when EOF rule is present, but no other rules are. X-Git-Tag: 1.2~99 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c7ffeff9ab0f1491db66bc0280dffc41da0203a5;p=re2c Give a concise error message when EOF rule is present, but no other rules are. --- diff --git a/src/nfa/estimate_size.cc b/src/nfa/estimate_size.cc index 7a28784b..45109f5b 100644 --- a/src/nfa/estimate_size.cc +++ b/src/nfa/estimate_size.cc @@ -36,6 +36,7 @@ static size_t estimate(const RE *re) size_t estimate_size(const std::vector &res) { const size_t nre = res.size(); + DASSERT(nre > 0); size_t size = nre - 1; for (size_t i = 0; i < nre; ++i) { size += estimate(res[i]) + 1; diff --git a/src/parse/validate.cc b/src/parse/validate.cc index 56a541b3..e1a566c4 100644 --- a/src/parse/validate.cc +++ b/src/parse/validate.cc @@ -64,6 +64,11 @@ void validate_ast(const specs_t &specs, const opt_t *opts, Msg &msg) "EOF rule %sis already defined at line %u", incond(i->name).c_str(), i->eofs[0]->loc.line); } + else if (i->rules.empty() && i->defs.empty() && !i->eofs.empty()) { + msg.fatal(i->eofs[0]->loc, + "EOF rule %swithout other rules doesn't make sense", + incond(i->name).c_str()); + } } if (!opts->cFlag) { diff --git a/test/eof/eof_05.c b/test/eof/eof_05.c new file mode 100644 index 00000000..bf11947f --- /dev/null +++ b/test/eof/eof_05.c @@ -0,0 +1 @@ +eof/eof_05.re:3:6: error: EOF rule without other rules doesn't make sense diff --git a/test/eof/eof_05.re b/test/eof/eof_05.re new file mode 100644 index 00000000..245d2cdc --- /dev/null +++ b/test/eof/eof_05.re @@ -0,0 +1,4 @@ +/*!re2c + re2c:eof = 0; + $ {} +*/