Le 26 sept. 2009 à 06:24, Joel E. Denny a écrit :
Hi Joel!
On Thu, 17 Sep 2009, Akim Demaille wrote:
+** Use syntax_error from the scanner?
+This would provide a means to raise syntax error from function
called
+from the scanner. Actually, there is no good solution to report a
+lexical error in general. Usually they are kept at the scanner
level
+only, ignoring the guilty token. But that might not be the best
bet,
+since we don't benefit from the syntactic error recovery.
+
+We still have the possibility to return an invalid token number,
which
+does the trick. But then the error message from the parser is poor
+(something like "unexpected $undefined").
To fix that, use %token.
Yes, but what would you return? %token INVALID "invalid token"? This
is poor, as compared to wrapping an error message as for instance we
currently do in Bison's scanner:
{directive} {
complain_at (*loc, _("invalid directive: %s"), quote (yytext));
}
Since the scanner probably
+already reported the error, we should directly enter error-recovery,
+without reporting the error message (i.e., YYERROR's semantics).
Maybe Bison can define a special token that the scanner can return to
induce a YYERROR? That seems simpler than a function call.
I think both are nice. A special token is nice when you're in the
scanner itself. Throwing an exception is nice in C++, especially from
functions called from the scanner.