[antlr-interest] better error messages in tree parsers
kferrio at gmail.com
kferrio at gmail.com
Tue Jan 26 18:00:51 PST 2010
ROTFL! Thanks for calling it as you see it. I feel a little less naïve now, knowing that you have "issues" with debugging. Thanks for the nice example too!
Kyle
Sent from my Verizon Wireless BlackBerry
-----Original Message-----
From: Terence Parr <parrt at cs.usfca.edu>
Date: Tue, 26 Jan 2010 14:57:40
To: antlr-interest at antlr.org interest<antlr-interest at antlr.org>
Subject: [antlr-interest] better error messages in tree parsers
Hi, a reminder that debugging tree grammars can be a bitch. I like to override standard messaging to spew lots of stuff. E.g., i like this kind of thing:
ASTVerifier.g: node from after line 150:17 [grammarSpec, rules, rule, altListAsBlock, altList, alternative, elements, element, ebnf, block, altList, alternative] no viable alt; token=[@-1,0:0='ALT',<84>,0:-1] (decision=24 state 3) decision=<<>>
context=...DOWN BLOCK DOWN >>>ALT<<< DOWN DOC_COMMENT...
Here's my code:
public String getErrorMessage(RecognitionException e,
String[] tokenNames)
{
List stack = getRuleInvocationStack(e, this.getClass().getName());
String msg = null;
String inputContext =
((Tree)input.LT(-3)).getText()+" "+
((Tree)input.LT(-2)).getText()+" "+
((Tree)input.LT(-1)).getText()+" >>>"+
((Tree)input.LT(1)).getText()+"<<< "+
((Tree)input.LT(2)).getText()+" "+
((Tree)input.LT(3)).getText();
if ( e instanceof NoViableAltException ) {
NoViableAltException nvae = (NoViableAltException)e;
msg = " no viable alt; token="+e.token+
" (decision="+nvae.decisionNumber+
" state "+nvae.stateNumber+")"+
" decision=<<"+nvae.grammarDecisionDescription+">>";
}
else {
msg = super.getErrorMessage(e, tokenNames);
}
return stack+" "+msg+" context=..."+inputContext+"...";
}
public String getTokenErrorDisplay(Token t) {
return t.toString();
}
Ter
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list