[antlr-interest] confounded exceptions on predicate
Chris Golledge
golledge at us.ibm.com
Mon Apr 2 15:14:53 PDT 2012
Hi,
Kind of fishing for some suggestions on where to look for the cause of this
problem.
Currently I'm working on converting a set of grammar files from ANTLR 2 to
ANTLR 3.
Descrpition:
>From within Eclipse 3.6.2, using
Java
java version "1.6.0"
Java(TM) SE Runtime Environment (build pwi3260sr10-20111208_01(SR10))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Windows 7 x86-32
jvmwi3260sr10-201112
ANTLR IDE- ANTLR Tools
2.1.1.201011141044
ANTLR
antlr-3.4-complete.jar
Code snippet:
primary
: (CURSOR LPAREN SELECT) => c=CURSOR^ LPAREN! s=subquery1 r=RPAREN!
{$c.setText (SrcAST.getText($c) + "(" + SrcAST.getText($s) + ")"
) ;
SrcAST.setSpan ($c, $c, $r); }
| CAST LPAREN => cast_expr // problematic line
| (simple_case_expr) => simple_case_expr
| (searched_case_expr) => searched_case_expr
//functions with special syntax:
| (trim_function) => trim_function
| (decompose_function) => decompose_function
| (extract_function) => extract_function
| (treat_function) => treat_function
| (tz_offset_function) => tz_offset_function
| (percentile_functions) => percentile_functions
| (xmlcolattval_function)=> xmlcolattval_function
| (xmlelement_function)=> xmlelement_function
| (xmlforest_function)=> xmlforest_function
| literal
| t=TIMESTAMP^ st=STRING_LITERAL
{ $primary.setText("TIMESTAMP "+SrcAST.getText($st));
SrcAST.setSpan($primary,$t,$st); }
| d=DATE^ sd=STRING_LITERAL
{ $primary.setText("DATE "+SrcAST.getText($st));
SrcAST.setSpan($primary,$t,$st); }
| interval_literal
| ((NEW)=> NEW)? v=variable_expression
-> // build no AST for this alternative
{$primary = $v;}
| (LPAREN subquery2) => l3=LPAREN! su=subquery2 r3=RPAREN!
{ $primary.setText ( "(" + SrcAST.getText($su) + ")" ) ;
SrcAST.setSpan ($primary, $l3, $r3); }
| expr_list_p
;
cast_expr
: c=CAST^ LPAREN! e=expr_or_multiset AS! t=datatype r=RPAREN!
{ $c.setText ( "CAST(" + SrcAST.getText($e) + " AS " +
SrcAST.getText($t) + ")" ) ;
SrcAST.setSpan ($c, $c, $r); }
;
If the problem line, CAST LPAREN ... , is not commented out, from the
Eclipse IDE and ANTLRWorks, I get the errors below. I get other errors if
I comment it out, but the processing makes it past the point where this
error occurs.
ANTLR Parser Generator 3.4 Jul 19, 2011 11:35:12.
Using project classpath: Yes.
Grammar: [snipped]Parser.g
java.lang.NoSuchFieldError:
org/antlr/tool/GrammarSyntaxMessage.offendingToken
at org.deved.antlride.runtime.AntlrErrorListener.extractToken
(AntlrErrorListener.java:108)
at org.deved.antlride.runtime.AntlrErrorListener.report
(AntlrErrorListener.java:79)
at org.deved.antlride.runtime.AntlrErrorListener.message
(AntlrErrorListener.java:63)
at org.deved.antlride.runtime.AntlrErrorListener.error
(AntlrErrorListener.java:53)
at org.antlr.tool.ErrorManager.syntaxError(ErrorManager.java:768)
at org.antlr.grammar.v3.ANTLRParser.reportError(ANTLRParser.java:443)
at org.antlr.grammar.v3.ANTLRParser.elementNoOptionSpec
(ANTLRParser.java:4909)
at org.antlr.grammar.v3.ANTLRParser.element(ANTLRParser.java:4533)
at org.antlr.grammar.v3.ANTLRParser.alternative
(ANTLRParser.java:4120)
at org.antlr.grammar.v3.ANTLRParser.ruleAltList
(ANTLRParser.java:3580)
at org.antlr.grammar.v3.ANTLRParser.rule(ANTLRParser.java:2787)
at org.antlr.grammar.v3.ANTLRParser.rules(ANTLRParser.java:2405)
at org.antlr.grammar.v3.ANTLRParser.grammar_(ANTLRParser.java:702)
at org.antlr.tool.Grammar.parseAndBuildAST(Grammar.java:644)
at org.antlr.Tool.getRootGrammar(Tool.java:626)
at org.antlr.Tool.process(Tool.java:459)
at org.deved.antlride.runtime.Tool2.main(Tool2.java:24)
BUILD SUCCESSFUL
Total time: 1 second
This is confusing for a couple of reasons: the build is reported to be
successful when it isn't, and the field offendingToken appears to actually
be a member GrammarSyntaxMessage.
I wasn't getting anywhere trying to solve this with the plugin; so, I tried
using ANTLRWorks 1.4.3. This told me a bit more:
[16:35:27] error(100): [snipped]Parser.g:3825:17: syntax error: antlr:
NoViableAltException(72@[722:4: ( ( id ( ASSIGN | PLUS_ASSIGN ) ( atom |
block ) ) (sub= ebnfSuffix[root_0,false] )? | a= atom (sub2= ebnfSuffix
[$a.tree,false] )? | ebnf | FORCED_ACTION | ACTION | p= SEMPRED
( IMPLIES )? | t3= tree_ )])
[16:35:27] error(100): [snipped]Parser.g:3825:17: syntax error: antlr:
NoViableAltException(72@[722:4: ( ( id ( ASSIGN | PLUS_ASSIGN ) ( atom |
block ) ) (sub= ebnfSuffix[root_0,false] )? | a= atom (sub2= ebnfSuffix
[$a.tree,false] )? | ebnf | FORCED_ACTION | ACTION | p= SEMPRED
( IMPLIES )? | t3= tree_ )])
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(0!=29)
[16:35:27] error(100): [snipped]Parser.g:0:: syntax error: assign.types:
NoViableAltException(3@[])
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(3!=28)
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(3!=27)
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(26!=3)
[16:35:27] java.lang.ClassCastException:
org.antlr.runtime.tree.CommonTree incompatible with
org.antlr.tool.GrammarAST
at org.antlr.grammar.v3.DefineGrammarItemsWalker.rewrite
(DefineGrammarItemsWalker.java:3463)
at org.antlr.grammar.v3.DefineGrammarItemsWalker.block
(DefineGrammarItemsWalker.java:2072)
at org.antlr.grammar.v3.DefineGrammarItemsWalker.rule
(DefineGrammarItemsWalker.java:1627)
at org.antlr.grammar.v3.DefineGrammarItemsWalker.rules
(DefineGrammarItemsWalker.java:1190)
at org.antlr.grammar.v3.DefineGrammarItemsWalker.grammarSpec
(DefineGrammarItemsWalker.java:623)
at
org.antlr.grammar.v3.DefineGrammarItemsWalker.grammar_(DefineGrammarItemsWalker.java:275)
at org.antlr.tool.Grammar.defineGrammarSymbols(Grammar.java:748)
at org.antlr.tool.CompositeGrammar.defineGrammarSymbols
(CompositeGrammar.java:369)
at org.antlr.tool.Grammar.setGrammarContent(Grammar.java:606)
at
org.antlr.works.grammar.antlr.ANTLRGrammarEngineImpl.createNewGrammar
(ANTLRGrammarEngineImpl.java:192)
at
org.antlr.works.grammar.antlr.ANTLRGrammarEngineImpl.createParserGrammar
(ANTLRGrammarEngineImpl.java:225)
at
org.antlr.works.grammar.antlr.ANTLRGrammarEngineImpl.createGrammars
(ANTLRGrammarEngineImpl.java:169)
at org.antlr.works.grammar.antlr.ANTLRGrammarEngineImpl.analyze
(ANTLRGrammarEngineImpl.java:272)
at org.antlr.works.grammar.engine.GrammarEngineImpl.analyze
(GrammarEngineImpl.java:325)
at org.antlr.works.grammar.CheckGrammar.run(CheckGrammar.java:70)
at java.lang.Thread.run(Thread.java:736)
[16:35:27] error(100): [snipped]Parser.g:3825:17: syntax error: antlr:
NoViableAltException(72@[722:4: ( ( id ( ASSIGN | PLUS_ASSIGN ) ( atom |
block ) ) (sub= ebnfSuffix[root_0,false] )? | a= atom (sub2= ebnfSuffix
[$a.tree,false] )? | ebnf | FORCED_ACTION | ACTION | p= SEMPRED
( IMPLIES )? | t3= tree_ )])
[16:35:27] error(100): [snipped]Parser.g:3825:17: syntax error: antlr:
NoViableAltException(72@[722:4: ( ( id ( ASSIGN | PLUS_ASSIGN ) ( atom |
block ) ) (sub= ebnfSuffix[root_0,false] )? | a= atom (sub2= ebnfSuffix
[$a.tree,false] )? | ebnf | FORCED_ACTION | ACTION | p= SEMPRED
( IMPLIES )? | t3= tree_ )])
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(0!=29)
[16:35:27] error(100):[snipped]Parser.g:0:: syntax error: assign.types:
NoViableAltException(3@[])
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(3!=28)
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(3!=27)
[16:35:27] error(100): [snipped]Parser.g:0:1: syntax error:
assign.types: MismatchedTreeNodeException(26!=3)
[16:35:27] error(10): internal error: [snipped]Parser.g :
java.lang.ClassCastException: org.antlr.runtime.tree.CommonTree
incompatible with org.antlr.tool.GrammarAST
org.antlr.grammar.v3.DefineGrammarItemsWalker.rewrite
(DefineGrammarItemsWalker.java:3463)
org.antlr.grammar.v3.DefineGrammarItemsWalker.block
(DefineGrammarItemsWalker.java:2072)
org.antlr.grammar.v3.DefineGrammarItemsWalker.rule
(DefineGrammarItemsWalker.java:1627)
org.antlr.grammar.v3.DefineGrammarItemsWalker.rules
(DefineGrammarItemsWalker.java:1190)
org.antlr.grammar.v3.DefineGrammarItemsWalker.grammarSpec
(DefineGrammarItemsWalker.java:623)
org.antlr.grammar.v3.DefineGrammarItemsWalker.grammar_(DefineGrammarItemsWalker.java:275)
org.antlr.tool.Grammar.defineGrammarSymbols(Grammar.java:748)
org.antlr.tool.CompositeGrammar.defineGrammarSymbols
(CompositeGrammar.java:369)
org.antlr.Tool.process(Tool.java:465)
org.antlr.works.generate.CodeGenerate.generate(CodeGenerate.java:104)
org.antlr.works.generate.CodeGenerate.run(CodeGenerate.java:185)
java.lang.Thread.run(Thread.java:736)
It is not very clear to me if I need to pursue this as a
NoViableAltException, a MismatchedTreeNodeException, or a
ClassCastException.
I'm looking at the existing code, and I'm not sure I would have handled
(expression) in the same way, but I don't have time to change everything I
don't like.
I'm looking at some potential matches in the problem space:
________________
Why do I get a ClassCastException when parsing a tree?
http://www.antlr.org/wiki/pages/viewpage.action?pageId=23232571
// but this appears to be happening at runtime and mine is a generation
time problem.
________________
Tree Rewrite Rules Replace Rewrite Actions
While you can still use the ^ and ! tree construction operators to build
trees, v3 introduces an entirely new syntax for Tree construction that
avoids the special syntax was used in ANTLR 2 actions:
ANTLR 2 ANTLR 3
arrayLiteral arrayLiteral
: LBRACK! (elementList)? RBRACK! : LBRACK (elementList)? RBRACK
{## = #([ARRAY_LITERAL, "ARRAY_LITERAL"],##);} -> ^(ARRAY_LITERAL elementList)
; ;
http://www.antlr.org/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
// But, while this style of grammar appears in the first alt, it does not
appear on the problematic line.
_____________________
This looks promising, but 722:4 does not have any errors in it according to
ANTLRWorks, and there should be no relationship between the rules for CAST
and what is defined there.
http://www.antlr.org/pipermail/antlr-interest/2011-June/041789.html
Any suggestions?
Chris
"Ah, because I have learned something since last week." - Gandhi
More information about the antlr-interest
mailing list