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 <pa...@cs.usfca.edu>
Date: Tue, 26 Jan 2010 14:57:40 
To: antlr-interest@antlr.org interest<antlr-interest@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; toke...@-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

List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to il-antlr-inter...@googlegroups.com.
To unsubscribe from this group, send email to 
il-antlr-interest+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to