[antlr-interest] Help debugging ANTLR code

Edson Tirelli tirelli at post.com
Fri Aug 27 09:56:40 PDT 2010


    Hi all,

    Continuing on the work on Drools grammar, I've split the grammar in 4
smaller grammars as suggested by Jim the other day, but I am still getting
the "code too large" error. I looked throughout the code antlr generated and
the problem happens on DFAs. It generates a method called

        public int specialStateTransition(int s, IntStream _input) throws
NoViableAltException {

    Inside that method, there is a switch case with nested "if"s. In my
case, it is generating things like the bellow for the "if" alternatives:

 else if ( (LA4_1==STRING) &&
     ( ( (evalPredicate(helper.validateLT(1,
DroolsSoftKeywords.QUERY),"helper.validateLT(1, DroolsSoftKeywords.QUERY)")
&&

 evalPredicate((helper.validateIdentifierKey(DroolsSoftKeywords.QUERY)),"(helper.validateIdentifierKey(DroolsSoftKeywords.QUERY))"))
       ||(evalPredicate(helper.validateLT(1,
DroolsSoftKeywords.QUERY),"helper.validateLT(1, DroolsSoftKeywords.QUERY)")
&&

 evalPredicate((helper.validateIdentifierKey(DroolsSoftKeywords.QUERY)),"(helper.validateIdentifierKey(DroolsSoftKeywords.QUERY))"))
       ||(evalPredicate(helper.validateLT(1,
DroolsSoftKeywords.QUERY),"helper.validateLT(1, DroolsSoftKeywords.QUERY)")
&&

 evalPredicate((helper.validateIdentifierKey(DroolsSoftKeywords.QUERY)),"(helper.validateIdentifierKey(DroolsSoftKeywords.QUERY))"))

          ...repeats that hundreds of times...

       ||(evalPredicate(helper.validateLT(1,
DroolsSoftKeywords.QUERY),"helper.validateLT(1, DroolsSoftKeywords.QUERY)")
&&

 evalPredicate((helper.validateIdentifierKey(DroolsSoftKeywords.QUERY)),"(helper.validateIdentifierKey(DroolsSoftKeywords.QUERY))")))))
{s = 5;}


    This is obviously a code generation bug, as the same condition is
repeated over and over. Since I need to move on with this, I will try to
find the problem myself, but I appreciate if anyone can point me to the
right direction, i.e., which classes/templates in ANTLR take care of the
code generation for DFAs.

    The rule that triggers the problem above is like this:

statement
options { k=2; } :
        // some alternatives
| {helper.validateLT(1, DroolsSoftKeywords.QUERY)}?=>    query
        // more alternatives
        ;

     The problem happens on all alternatives, BTW. The above is just a
snippet to show the problem.

     The problem happens both when running with and without -debug, but
obviously the above snippet includes the debug info.

     Thanks,

     Edson

-- 
  Edson Tirelli
  JBoss Drools Core Development
  JBoss by Red Hat @ www.jboss.com


More information about the antlr-interest mailing list