[antlr-interest] confounded exceptions on predicate

Jim Idle jimi at temporal-wave.com
Mon Apr 2 15:19:06 PDT 2012


Should be:

| (CAST LPAREN ) => cast_expr	      // problematic line

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Chris Golledge
> Sent: Monday, April 02, 2012 3:15 PM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] confounded exceptions on predicate
>
>
> 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_(DefineGrammarIte
> msWalker.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.createParserGramma
> r
>    (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_(DefineGrammarIte
> msWalker.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+ANTL
> R+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
>
>
> 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