|
From: | Akim Demaille |
Subject: | Re: [PATCH] todo: short term |
Date: | Sun, 27 Sep 2009 14:50:47 +0200 |
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.
[Prev in Thread] | Current Thread | [Next in Thread] |