[antlr-interest] Two More Bugs in ANTLRv4

Terence Parr parrt at cs.usfca.edu
Mon Feb 27 11:31:33 PST 2012



Jan Finis wrote:
> Hi,
>
> I encountered two more bugs in ANTLRv4, tested with the parrt/antlr4
> fork pulled yesterday from github:
>
> First Bug:
>
> The following rule does not work:
> expr
>     : 'x'
>     | e1=expr '?'
>     | e1=expr e2=expr
>     ;
>
> Error: The following sets of rules are mutually left-recursive [expr]

that does not fit the expression pattern and so is definitely left 
recursive by my current definition. Hmm... I'm not sure I am able to 
translate this one properly given the double recursion to itself.

>
> It seems to be the concatenation operation of two expressions (last
> alternative). If I leave it out, it works fine.
>
> I am sure that I did not have this bug with my old 4.0ea ANTLR build. So
> it must be introduced lately.
>
> Second Bug:
>
> If you take the rule from above and leave out the second alternative
> like that:
>
> expr
>     : 'x'
>     | e1=expr e2=expr
>     ;

zoiks. adding to the bug list. your expression rule doesn't make sense, 
  by the way. You probably want something else.
Ter
>
> then the following exception is thrown:
>
>           [java] can't find rule grammarSpec or tree structure error:
> (COMBINED_GRAMMAR ANTLRv4 (RULES (RULE expr (BLOCK (ALT 'x') (ALT (= e1
> expr[1]) (= e2 expr[1]))))))
>           [java] java.lang.reflect.InvocationTargetException
>           [java]     at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>           [java]     at
> sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>           [java]     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>           [java]     at java.lang.reflect.Method.invoke(Unknown Source)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.visit(GrammarTreeVisitor.java:192)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.visitGrammar(GrammarTreeVisitor.java:186)
>           [java]     at
> org.antlr.v4.semantics.SymbolCollector.process(SymbolCollector.java:69)
>           [java]     at
> org.antlr.v4.semantics.SemanticPipeline.process(SemanticPipeline.java:95)
>           [java]     at
> org.antlr.v4.Tool.processNonCombinedGrammar(Tool.java:301)
>           [java]     at org.antlr.v4.Tool.process(Tool.java:290)
>           [java]     at
> org.antlr.v4.Tool.processGrammarsOnCommandLine(Tool.java:254)
>           [java]     at org.antlr.v4.Tool.main(Tool.java:144)
>           [java] Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
>           [java]     at
> org.antlr.v4.semantics.SymbolCollector.discoverOuterAlt(SymbolCollector.java:112)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.outerAlternative(GrammarTreeVisitor.java:2197)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.ruleBlock(GrammarTreeVisitor.java:2105)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.rule(GrammarTreeVisitor.java:1576)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.rules(GrammarTreeVisitor.java:1096)
>           [java]     at
> org.antlr.v4.parse.GrammarTreeVisitor.grammarSpec(GrammarTreeVisitor.java:307)
>           [java]     ... 12 more
>           [java] error(9):  internal error: Rule expr[1] undefined
>           [java] error(9):  internal error: Rule expr[1] undefined
>           [java] Exception in thread "main" java.lang.NullPointerException
>           [java]     at
> org.antlr.v4.automata.ParserATNFactory.elemList(ParserATNFactory.java:386)
>           [java]     at
> org.antlr.v4.automata.ParserATNFactory.alt(ParserATNFactory.java:375)
>           [java]     at
> org.antlr.v4.parse.ATNBuilder.alternative(ATNBuilder.java:615)
>           [java]     at
> org.antlr.v4.parse.ATNBuilder.ruleBlock(ATNBuilder.java:294)
>           [java]     at
> org.antlr.v4.automata.ParserATNFactory._createATN(ParserATNFactory.java:127)
>           [java]     at
> org.antlr.v4.automata.ParserATNFactory.createATN(ParserATNFactory.java:109)
>           [java]     at
> org.antlr.v4.Tool.processNonCombinedGrammar(Tool.java:309)
>           [java]     at org.antlr.v4.Tool.process(Tool.java:290)
>           [java]     at
> org.antlr.v4.Tool.processGrammarsOnCommandLine(Tool.java:254)
>           [java]     at org.antlr.v4.Tool.main(Tool.java:144)
>
> Regards,
> Jan
>
> 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