/
How do I get detailed tree parser error messages?
How do I get detailed tree parser error messages?
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 that I put into tree grammar in "@headers" section:
public String getErrorMessage(RecognitionException e, String[] tokenNames) { List stack = getRuleInvocationStack(e, this.getClass().getName()); String msg = null; String inputContext = input.LT(-3) == null ? "" : ((Tree)input.LT(-3)).getText()+" "+ input.LT(-2) == null ? "" : ((Tree)input.LT(-2)).getText()+" "+ input.LT(-1) == null ? "" : ((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(); }
, multiple selections available,