From 450491342fed3f3649e243db4dbcd632c812d2b6 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 29 Sep 2009 07:00:01 +0000 Subject: [PATCH] git-svn-id: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core@3612 ae02f08e-27ec-0310-ae8c-8ba02fe2eafd --- .../org/xerial/lens/relation/query/impl/XPath.g | 20 +- .../lens/relation/query/impl/XPathLexer.java | 2 +- .../lens/relation/query/impl/XPathParser.java | 1424 +++++++++----------- .../xerial/lens/relation/query/lang/XPathExpr.java | 9 +- src/main/java/org/xerial/util/antlr/ANTLRUtil.java | 26 +- .../lens/relation/query/lang/XPathExprTest.java | 14 +- 6 files changed, 703 insertions(+), 792 deletions(-) diff --git a/src/main/java/org/xerial/lens/relation/query/impl/XPath.g b/src/main/java/org/xerial/lens/relation/query/impl/XPath.g index d54fba3..b89adaa 100644 --- a/src/main/java/org/xerial/lens/relation/query/impl/XPath.g +++ b/src/main/java/org/xerial/lens/relation/query/impl/XPath.g @@ -167,24 +167,18 @@ xpath fragment locationExpr : relativePath - | absolutePath ; fragment relativePath - : step - -> ^(STEP step) - | (step '/') => step '/' relativePath - -> ^(STEP AXIS["PC"] step relativePath) - | (step '//') => step '//' relativePath - -> ^(STEP AXIS["AD"] step relativePath) - ; + : step relativePath? + -> ^(STEP step relativePath?) + | '/' step relativePath? + -> ^(STEP AXIS["PC"] step relativePath?) + | '//' step relativePath? + -> ^(STEP AXIS["AD"] step relativePath?) + ; -fragment -absolutePath - : '/' relativePath - -> ^(STEP AXIS["PC"] NAME["_root"] relativePath) - ; fragment step diff --git a/src/main/java/org/xerial/lens/relation/query/impl/XPathLexer.java b/src/main/java/org/xerial/lens/relation/query/impl/XPathLexer.java index 382a583..a2eaa9c 100644 --- a/src/main/java/org/xerial/lens/relation/query/impl/XPathLexer.java +++ b/src/main/java/org/xerial/lens/relation/query/impl/XPathLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 XPath.g 2009-09-29 14:52:04 +// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 XPath.g 2009-09-29 15:49:19 /*-------------------------------------------------------------------------- * Copyright 2009 Taro L. Saito diff --git a/src/main/java/org/xerial/lens/relation/query/impl/XPathParser.java b/src/main/java/org/xerial/lens/relation/query/impl/XPathParser.java index 54a3c91..ba4ddbf 100644 --- a/src/main/java/org/xerial/lens/relation/query/impl/XPathParser.java +++ b/src/main/java/org/xerial/lens/relation/query/impl/XPathParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 XPath.g 2009-09-29 14:52:03 +// $ANTLR 3.1.3 Mar 17, 2009 19:23:44 XPath.g 2009-09-29 15:49:18 /*-------------------------------------------------------------------------- * Copyright 2009 Taro L. Saito @@ -198,7 +198,7 @@ public class XPathParser extends Parser { }; // $ANTLR start "locationExpr" - // XPath.g:167:1: fragment locationExpr : ( relativePath | absolutePath ); + // XPath.g:167:1: fragment locationExpr : relativePath ; public final XPathParser.locationExpr_return locationExpr() throws RecognitionException { XPathParser.locationExpr_return retval = new XPathParser.locationExpr_return(); retval.start = input.LT(1); @@ -207,59 +207,23 @@ public class XPathParser extends Parser { XPathParser.relativePath_return relativePath2 = null; - XPathParser.absolutePath_return absolutePath3 = null; - try { - // XPath.g:169:3: ( relativePath | absolutePath ) - int alt1=2; - int LA1_0 = input.LA(1); - - if ( (LA1_0==QName||LA1_0==36) ) { - alt1=1; - } - else if ( (LA1_0==34) ) { - alt1=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 1, 0, input); - - throw nvae; - } - switch (alt1) { - case 1 : - // XPath.g:169:5: relativePath - { - root_0 = (Object)adaptor.nil(); - - pushFollow(FOLLOW_relativePath_in_locationExpr646); - relativePath2=relativePath(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, relativePath2.getTree()); - - } - break; - case 2 : - // XPath.g:170:5: absolutePath - { - root_0 = (Object)adaptor.nil(); - - pushFollow(FOLLOW_absolutePath_in_locationExpr652); - absolutePath3=absolutePath(); + // XPath.g:169:3: ( relativePath ) + // XPath.g:169:5: relativePath + { + root_0 = (Object)adaptor.nil(); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, absolutePath3.getTree()); + pushFollow(FOLLOW_relativePath_in_locationExpr646); + relativePath2=relativePath(); - } - break; + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, relativePath2.getTree()); } + retval.stop = input.LT(-1); if ( state.backtracking==0 ) { @@ -286,98 +250,99 @@ public class XPathParser extends Parser { }; // $ANTLR start "relativePath" - // XPath.g:173:1: fragment relativePath : ( step -> ^( STEP step ) | ( step '/' )=> step '/' relativePath -> ^( STEP AXIS[\"PC\"] step relativePath ) | ( step '//' )=> step '//' relativePath -> ^( STEP AXIS[\"AD\"] step relativePath ) ); + // XPath.g:172:1: fragment relativePath : ( step ( relativePath )? -> ^( STEP step ( relativePath )? ) | '/' step ( relativePath )? -> ^( STEP AXIS[\"PC\"] step ( relativePath )? ) | '//' step ( relativePath )? -> ^( STEP AXIS[\"AD\"] step ( relativePath )? ) ); public final XPathParser.relativePath_return relativePath() throws RecognitionException { XPathParser.relativePath_return retval = new XPathParser.relativePath_return(); retval.start = input.LT(1); Object root_0 = null; - Token char_literal6=null; - Token string_literal9=null; - XPathParser.step_return step4 = null; + Token char_literal5=null; + Token string_literal8=null; + XPathParser.step_return step3 = null; + + XPathParser.relativePath_return relativePath4 = null; - XPathParser.step_return step5 = null; + XPathParser.step_return step6 = null; XPathParser.relativePath_return relativePath7 = null; - XPathParser.step_return step8 = null; + XPathParser.step_return step9 = null; XPathParser.relativePath_return relativePath10 = null; - Object char_literal6_tree=null; - Object string_literal9_tree=null; + Object char_literal5_tree=null; + Object string_literal8_tree=null; RewriteRuleTokenStream stream_35=new RewriteRuleTokenStream(adaptor,"token 35"); RewriteRuleTokenStream stream_34=new RewriteRuleTokenStream(adaptor,"token 34"); RewriteRuleSubtreeStream stream_relativePath=new RewriteRuleSubtreeStream(adaptor,"rule relativePath"); RewriteRuleSubtreeStream stream_step=new RewriteRuleSubtreeStream(adaptor,"rule step"); try { - // XPath.g:175:3: ( step -> ^( STEP step ) | ( step '/' )=> step '/' relativePath -> ^( STEP AXIS[\"PC\"] step relativePath ) | ( step '//' )=> step '//' relativePath -> ^( STEP AXIS[\"AD\"] step relativePath ) ) - int alt2=3; - int LA2_0 = input.LA(1); - - if ( (LA2_0==36) ) { - int LA2_1 = input.LA(2); - - if ( (true) ) { - alt2=1; - } - else if ( (synpred1_XPath()) ) { - alt2=2; - } - else if ( (synpred2_XPath()) ) { - alt2=3; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 2, 1, input); - - throw nvae; - } - } - else if ( (LA2_0==QName) ) { - int LA2_2 = input.LA(2); - - if ( (true) ) { - alt2=1; - } - else if ( (synpred1_XPath()) ) { - alt2=2; + // XPath.g:174:3: ( step ( relativePath )? -> ^( STEP step ( relativePath )? ) | '/' step ( relativePath )? -> ^( STEP AXIS[\"PC\"] step ( relativePath )? ) | '//' step ( relativePath )? -> ^( STEP AXIS[\"AD\"] step ( relativePath )? ) ) + int alt4=3; + switch ( input.LA(1) ) { + case QName: + case 36: + { + alt4=1; } - else if ( (synpred2_XPath()) ) { - alt2=3; + break; + case 34: + { + alt4=2; } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 2, 2, input); - - throw nvae; + break; + case 35: + { + alt4=3; } - } - else { + break; + default: if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 2, 0, input); + new NoViableAltException("", 4, 0, input); throw nvae; } - switch (alt2) { + + switch (alt4) { case 1 : - // XPath.g:175:5: step + // XPath.g:174:5: step ( relativePath )? { - pushFollow(FOLLOW_step_in_relativePath669); - step4=step(); + pushFollow(FOLLOW_step_in_relativePath663); + step3=step(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_step.add(step4.getTree()); + if ( state.backtracking==0 ) stream_step.add(step3.getTree()); + // XPath.g:174:10: ( relativePath )? + int alt1=2; + int LA1_0 = input.LA(1); + + if ( (LA1_0==QName||(LA1_0>=34 && LA1_0<=36)) ) { + alt1=1; + } + switch (alt1) { + case 1 : + // XPath.g:174:10: relativePath + { + pushFollow(FOLLOW_relativePath_in_relativePath665); + relativePath4=relativePath(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_relativePath.add(relativePath4.getTree()); + + } + break; + + } + // AST REWRITE - // elements: step + // elements: relativePath, step // token labels: // rule labels: retval // token list labels: @@ -388,14 +353,20 @@ public class XPathParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 176:3: -> ^( STEP step ) + // 175:4: -> ^( STEP step ( relativePath )? ) { - // XPath.g:176:6: ^( STEP step ) + // XPath.g:175:7: ^( STEP step ( relativePath )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STEP, "STEP"), root_1); adaptor.addChild(root_1, stream_step.nextTree()); + // XPath.g:175:19: ( relativePath )? + if ( stream_relativePath.hasNext() ) { + adaptor.addChild(root_1, stream_relativePath.nextTree()); + + } + stream_relativePath.reset(); adaptor.addChild(root_0, root_1); } @@ -406,23 +377,40 @@ public class XPathParser extends Parser { } break; case 2 : - // XPath.g:177:5: ( step '/' )=> step '/' relativePath + // XPath.g:176:5: '/' step ( relativePath )? { - pushFollow(FOLLOW_step_in_relativePath694); - step5=step(); + char_literal5=(Token)match(input,34,FOLLOW_34_in_relativePath686); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_34.add(char_literal5); + + pushFollow(FOLLOW_step_in_relativePath688); + step6=step(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_step.add(step5.getTree()); - char_literal6=(Token)match(input,34,FOLLOW_34_in_relativePath696); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_34.add(char_literal6); + if ( state.backtracking==0 ) stream_step.add(step6.getTree()); + // XPath.g:176:14: ( relativePath )? + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==QName||(LA2_0>=34 && LA2_0<=36)) ) { + alt2=1; + } + switch (alt2) { + case 1 : + // XPath.g:176:14: relativePath + { + pushFollow(FOLLOW_relativePath_in_relativePath690); + relativePath7=relativePath(); - pushFollow(FOLLOW_relativePath_in_relativePath698); - relativePath7=relativePath(); + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_relativePath.add(relativePath7.getTree()); + + } + break; + + } - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_relativePath.add(relativePath7.getTree()); // AST REWRITE @@ -437,16 +425,21 @@ public class XPathParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 178:3: -> ^( STEP AXIS[\"PC\"] step relativePath ) + // 177:4: -> ^( STEP AXIS[\"PC\"] step ( relativePath )? ) { - // XPath.g:178:6: ^( STEP AXIS[\"PC\"] step relativePath ) + // XPath.g:177:7: ^( STEP AXIS[\"PC\"] step ( relativePath )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STEP, "STEP"), root_1); adaptor.addChild(root_1, (Object)adaptor.create(AXIS, "PC")); adaptor.addChild(root_1, stream_step.nextTree()); - adaptor.addChild(root_1, stream_relativePath.nextTree()); + // XPath.g:177:30: ( relativePath )? + if ( stream_relativePath.hasNext() ) { + adaptor.addChild(root_1, stream_relativePath.nextTree()); + + } + stream_relativePath.reset(); adaptor.addChild(root_0, root_1); } @@ -457,23 +450,40 @@ public class XPathParser extends Parser { } break; case 3 : - // XPath.g:179:5: ( step '//' )=> step '//' relativePath + // XPath.g:178:5: '//' step ( relativePath )? { - pushFollow(FOLLOW_step_in_relativePath729); - step8=step(); + string_literal8=(Token)match(input,35,FOLLOW_35_in_relativePath714); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_35.add(string_literal8); + + pushFollow(FOLLOW_step_in_relativePath716); + step9=step(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_step.add(step8.getTree()); - string_literal9=(Token)match(input,35,FOLLOW_35_in_relativePath731); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_35.add(string_literal9); + if ( state.backtracking==0 ) stream_step.add(step9.getTree()); + // XPath.g:178:15: ( relativePath )? + int alt3=2; + int LA3_0 = input.LA(1); - pushFollow(FOLLOW_relativePath_in_relativePath733); - relativePath10=relativePath(); + if ( (LA3_0==QName||(LA3_0>=34 && LA3_0<=36)) ) { + alt3=1; + } + switch (alt3) { + case 1 : + // XPath.g:178:15: relativePath + { + pushFollow(FOLLOW_relativePath_in_relativePath718); + relativePath10=relativePath(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_relativePath.add(relativePath10.getTree()); + + } + break; + + } - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_relativePath.add(relativePath10.getTree()); // AST REWRITE @@ -488,16 +498,21 @@ public class XPathParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 180:3: -> ^( STEP AXIS[\"AD\"] step relativePath ) + // 179:4: -> ^( STEP AXIS[\"AD\"] step ( relativePath )? ) { - // XPath.g:180:6: ^( STEP AXIS[\"AD\"] step relativePath ) + // XPath.g:179:7: ^( STEP AXIS[\"AD\"] step ( relativePath )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STEP, "STEP"), root_1); adaptor.addChild(root_1, (Object)adaptor.create(AXIS, "AD")); adaptor.addChild(root_1, stream_step.nextTree()); - adaptor.addChild(root_1, stream_relativePath.nextTree()); + // XPath.g:179:30: ( relativePath )? + if ( stream_relativePath.hasNext() ) { + adaptor.addChild(root_1, stream_relativePath.nextTree()); + + } + stream_relativePath.reset(); adaptor.addChild(root_0, root_1); } @@ -529,149 +544,63 @@ public class XPathParser extends Parser { } // $ANTLR end "relativePath" - public static class absolutePath_return extends ParserRuleReturnScope { - Object tree; - public Object getTree() { return tree; } - }; - - // $ANTLR start "absolutePath" - // XPath.g:183:1: fragment absolutePath : '/' relativePath -> ^( STEP AXIS[\"PC\"] NAME[\"_root\"] relativePath ) ; - public final XPathParser.absolutePath_return absolutePath() throws RecognitionException { - XPathParser.absolutePath_return retval = new XPathParser.absolutePath_return(); - retval.start = input.LT(1); - - Object root_0 = null; - - Token char_literal11=null; - XPathParser.relativePath_return relativePath12 = null; - - - Object char_literal11_tree=null; - RewriteRuleTokenStream stream_34=new RewriteRuleTokenStream(adaptor,"token 34"); - RewriteRuleSubtreeStream stream_relativePath=new RewriteRuleSubtreeStream(adaptor,"rule relativePath"); - try { - // XPath.g:185:3: ( '/' relativePath -> ^( STEP AXIS[\"PC\"] NAME[\"_root\"] relativePath ) ) - // XPath.g:185:5: '/' relativePath - { - char_literal11=(Token)match(input,34,FOLLOW_34_in_absolutePath764); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_34.add(char_literal11); - - pushFollow(FOLLOW_relativePath_in_absolutePath766); - relativePath12=relativePath(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_relativePath.add(relativePath12.getTree()); - - - // AST REWRITE - // elements: relativePath - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 186:3: -> ^( STEP AXIS[\"PC\"] NAME[\"_root\"] relativePath ) - { - // XPath.g:186:6: ^( STEP AXIS[\"PC\"] NAME[\"_root\"] relativePath ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STEP, "STEP"), root_1); - - adaptor.addChild(root_1, (Object)adaptor.create(AXIS, "PC")); - adaptor.addChild(root_1, (Object)adaptor.create(NAME, "_root")); - adaptor.addChild(root_1, stream_relativePath.nextTree()); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} - } - - retval.stop = input.LT(-1); - - if ( state.backtracking==0 ) { - - retval.tree = (Object)adaptor.rulePostProcessing(root_0); - adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); - } - } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); - - } - finally { - } - return retval; - } - // $ANTLR end "absolutePath" - public static class step_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "step" - // XPath.g:189:1: fragment step : nodeTest ( predicate )* -> NAME[$nodeTest.text] ( predicate )* ; + // XPath.g:183:1: fragment step : nodeTest ( predicate )* -> NAME[$nodeTest.text] ( predicate )* ; public final XPathParser.step_return step() throws RecognitionException { XPathParser.step_return retval = new XPathParser.step_return(); retval.start = input.LT(1); Object root_0 = null; - XPathParser.nodeTest_return nodeTest13 = null; + XPathParser.nodeTest_return nodeTest11 = null; - XPathParser.predicate_return predicate14 = null; + XPathParser.predicate_return predicate12 = null; RewriteRuleSubtreeStream stream_nodeTest=new RewriteRuleSubtreeStream(adaptor,"rule nodeTest"); RewriteRuleSubtreeStream stream_predicate=new RewriteRuleSubtreeStream(adaptor,"rule predicate"); try { - // XPath.g:191:3: ( nodeTest ( predicate )* -> NAME[$nodeTest.text] ( predicate )* ) - // XPath.g:191:5: nodeTest ( predicate )* + // XPath.g:185:3: ( nodeTest ( predicate )* -> NAME[$nodeTest.text] ( predicate )* ) + // XPath.g:185:5: nodeTest ( predicate )* { - pushFollow(FOLLOW_nodeTest_in_step800); - nodeTest13=nodeTest(); + pushFollow(FOLLOW_nodeTest_in_step755); + nodeTest11=nodeTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_nodeTest.add(nodeTest13.getTree()); - // XPath.g:191:14: ( predicate )* - loop3: + if ( state.backtracking==0 ) stream_nodeTest.add(nodeTest11.getTree()); + // XPath.g:185:14: ( predicate )* + loop5: do { - int alt3=2; - int LA3_0 = input.LA(1); + int alt5=2; + int LA5_0 = input.LA(1); - if ( (LA3_0==37) ) { - alt3=1; + if ( (LA5_0==37) ) { + alt5=1; } - switch (alt3) { + switch (alt5) { case 1 : - // XPath.g:191:14: predicate + // XPath.g:185:14: predicate { - pushFollow(FOLLOW_predicate_in_step802); - predicate14=predicate(); + pushFollow(FOLLOW_predicate_in_step757); + predicate12=predicate(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_predicate.add(predicate14.getTree()); + if ( state.backtracking==0 ) stream_predicate.add(predicate12.getTree()); } break; default : - break loop3; + break loop5; } } while (true); @@ -689,10 +618,10 @@ public class XPathParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 191:25: -> NAME[$nodeTest.text] ( predicate )* + // 185:25: -> NAME[$nodeTest.text] ( predicate )* { - adaptor.addChild(root_0, (Object)adaptor.create(NAME, (nodeTest13!=null?input.toString(nodeTest13.start,nodeTest13.stop):null))); - // XPath.g:191:49: ( predicate )* + adaptor.addChild(root_0, (Object)adaptor.create(NAME, (nodeTest11!=null?input.toString(nodeTest11.start,nodeTest11.stop):null))); + // XPath.g:185:49: ( predicate )* while ( stream_predicate.hasNext() ) { adaptor.addChild(root_0, stream_predicate.nextTree()); @@ -730,44 +659,44 @@ public class XPathParser extends Parser { }; // $ANTLR start "nodeTest" - // XPath.g:195:1: fragment nodeTest : ( '@' )? ( QName ':' )? QName ; + // XPath.g:189:1: fragment nodeTest : ( '@' )? ( QName ':' )? QName ; public final XPathParser.nodeTest_return nodeTest() throws RecognitionException { XPathParser.nodeTest_return retval = new XPathParser.nodeTest_return(); retval.start = input.LT(1); Object root_0 = null; + Token char_literal13=null; + Token QName14=null; Token char_literal15=null; Token QName16=null; - Token char_literal17=null; - Token QName18=null; + Object char_literal13_tree=null; + Object QName14_tree=null; Object char_literal15_tree=null; Object QName16_tree=null; - Object char_literal17_tree=null; - Object QName18_tree=null; try { - // XPath.g:197:3: ( ( '@' )? ( QName ':' )? QName ) - // XPath.g:197:5: ( '@' )? ( QName ':' )? QName + // XPath.g:191:3: ( ( '@' )? ( QName ':' )? QName ) + // XPath.g:191:5: ( '@' )? ( QName ':' )? QName { root_0 = (Object)adaptor.nil(); - // XPath.g:197:5: ( '@' )? - int alt4=2; - int LA4_0 = input.LA(1); + // XPath.g:191:5: ( '@' )? + int alt6=2; + int LA6_0 = input.LA(1); - if ( (LA4_0==36) ) { - alt4=1; + if ( (LA6_0==36) ) { + alt6=1; } - switch (alt4) { + switch (alt6) { case 1 : - // XPath.g:197:5: '@' + // XPath.g:191:5: '@' { - char_literal15=(Token)match(input,36,FOLLOW_36_in_nodeTest830); if (state.failed) return retval; + char_literal13=(Token)match(input,36,FOLLOW_36_in_nodeTest785); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal15_tree = (Object)adaptor.create(char_literal15); - adaptor.addChild(root_0, char_literal15_tree); + char_literal13_tree = (Object)adaptor.create(char_literal13); + adaptor.addChild(root_0, char_literal13_tree); } } @@ -775,30 +704,30 @@ public class XPathParser extends Parser { } - // XPath.g:197:10: ( QName ':' )? - int alt5=2; - int LA5_0 = input.LA(1); + // XPath.g:191:10: ( QName ':' )? + int alt7=2; + int LA7_0 = input.LA(1); - if ( (LA5_0==QName) ) { - int LA5_1 = input.LA(2); + if ( (LA7_0==QName) ) { + int LA7_1 = input.LA(2); - if ( (LA5_1==Colon) ) { - alt5=1; + if ( (LA7_1==Colon) ) { + alt7=1; } } - switch (alt5) { + switch (alt7) { case 1 : - // XPath.g:197:11: QName ':' + // XPath.g:191:11: QName ':' { - QName16=(Token)match(input,QName,FOLLOW_QName_in_nodeTest834); if (state.failed) return retval; + QName14=(Token)match(input,QName,FOLLOW_QName_in_nodeTest789); if (state.failed) return retval; if ( state.backtracking==0 ) { - QName16_tree = (Object)adaptor.create(QName16); - adaptor.addChild(root_0, QName16_tree); + QName14_tree = (Object)adaptor.create(QName14); + adaptor.addChild(root_0, QName14_tree); } - char_literal17=(Token)match(input,Colon,FOLLOW_Colon_in_nodeTest836); if (state.failed) return retval; + char_literal15=(Token)match(input,Colon,FOLLOW_Colon_in_nodeTest791); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal17_tree = (Object)adaptor.create(char_literal17); - adaptor.addChild(root_0, char_literal17_tree); + char_literal15_tree = (Object)adaptor.create(char_literal15); + adaptor.addChild(root_0, char_literal15_tree); } } @@ -806,10 +735,10 @@ public class XPathParser extends Parser { } - QName18=(Token)match(input,QName,FOLLOW_QName_in_nodeTest840); if (state.failed) return retval; + QName16=(Token)match(input,QName,FOLLOW_QName_in_nodeTest795); if (state.failed) return retval; if ( state.backtracking==0 ) { - QName18_tree = (Object)adaptor.create(QName18); - adaptor.addChild(root_0, QName18_tree); + QName16_tree = (Object)adaptor.create(QName16); + adaptor.addChild(root_0, QName16_tree); } } @@ -840,38 +769,38 @@ public class XPathParser extends Parser { }; // $ANTLR start "predicate" - // XPath.g:200:1: fragment predicate : '[' expr ']' -> ^( PREDICATE expr ) ; + // XPath.g:194:1: fragment predicate : '[' expr ']' -> ^( PREDICATE expr ) ; public final XPathParser.predicate_return predicate() throws RecognitionException { XPathParser.predicate_return retval = new XPathParser.predicate_return(); retval.start = input.LT(1); Object root_0 = null; + Token char_literal17=null; Token char_literal19=null; - Token char_literal21=null; - XPathParser.expr_return expr20 = null; + XPathParser.expr_return expr18 = null; + Object char_literal17_tree=null; Object char_literal19_tree=null; - Object char_literal21_tree=null; RewriteRuleTokenStream stream_37=new RewriteRuleTokenStream(adaptor,"token 37"); RewriteRuleTokenStream stream_38=new RewriteRuleTokenStream(adaptor,"token 38"); RewriteRuleSubtreeStream stream_expr=new RewriteRuleSubtreeStream(adaptor,"rule expr"); try { - // XPath.g:202:3: ( '[' expr ']' -> ^( PREDICATE expr ) ) - // XPath.g:202:5: '[' expr ']' + // XPath.g:196:3: ( '[' expr ']' -> ^( PREDICATE expr ) ) + // XPath.g:196:5: '[' expr ']' { - char_literal19=(Token)match(input,37,FOLLOW_37_in_predicate858); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_37.add(char_literal19); + char_literal17=(Token)match(input,37,FOLLOW_37_in_predicate813); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_37.add(char_literal17); - pushFollow(FOLLOW_expr_in_predicate860); - expr20=expr(); + pushFollow(FOLLOW_expr_in_predicate815); + expr18=expr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_expr.add(expr20.getTree()); - char_literal21=(Token)match(input,38,FOLLOW_38_in_predicate862); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_38.add(char_literal21); + if ( state.backtracking==0 ) stream_expr.add(expr18.getTree()); + char_literal19=(Token)match(input,38,FOLLOW_38_in_predicate817); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_38.add(char_literal19); @@ -887,9 +816,9 @@ public class XPathParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 203:3: -> ^( PREDICATE expr ) + // 197:3: -> ^( PREDICATE expr ) { - // XPath.g:203:6: ^( PREDICATE expr ) + // XPath.g:197:6: ^( PREDICATE expr ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PREDICATE, "PREDICATE"), root_1); @@ -930,29 +859,29 @@ public class XPathParser extends Parser { }; // $ANTLR start "expr" - // XPath.g:206:1: expr : comparisonExpr ; + // XPath.g:200:1: expr : comparisonExpr ; public final XPathParser.expr_return expr() throws RecognitionException { XPathParser.expr_return retval = new XPathParser.expr_return(); retval.start = input.LT(1); Object root_0 = null; - XPathParser.comparisonExpr_return comparisonExpr22 = null; + XPathParser.comparisonExpr_return comparisonExpr20 = null; try { - // XPath.g:207:3: ( comparisonExpr ) - // XPath.g:207:5: comparisonExpr + // XPath.g:201:3: ( comparisonExpr ) + // XPath.g:201:5: comparisonExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_comparisonExpr_in_expr885); - comparisonExpr22=comparisonExpr(); + pushFollow(FOLLOW_comparisonExpr_in_expr840); + comparisonExpr20=comparisonExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, comparisonExpr22.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, comparisonExpr20.getTree()); } @@ -982,250 +911,250 @@ public class XPathParser extends Parser { }; // $ANTLR start "comparisonExpr" - // XPath.g:210:1: fragment comparisonExpr : ( pathExpr | ( pathExpr '=' )=> pathExpr '=' pathExpr | ( pathExpr '!=' )=> pathExpr '!=' pathExpr | ( pathExpr '>' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr ); + // XPath.g:204:1: fragment comparisonExpr : ( pathExpr | ( pathExpr '=' )=> pathExpr '=' pathExpr | ( pathExpr '!=' )=> pathExpr '!=' pathExpr | ( pathExpr '>' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr ); public final XPathParser.comparisonExpr_return comparisonExpr() throws RecognitionException { XPathParser.comparisonExpr_return retval = new XPathParser.comparisonExpr_return(); retval.start = input.LT(1); Object root_0 = null; - Token char_literal25=null; - Token string_literal28=null; - Token char_literal31=null; - Token string_literal34=null; - Token char_literal37=null; - Token string_literal40=null; - Token string_literal43=null; - XPathParser.pathExpr_return pathExpr23 = null; + Token char_literal23=null; + Token string_literal26=null; + Token char_literal29=null; + Token string_literal32=null; + Token char_literal35=null; + Token string_literal38=null; + Token string_literal41=null; + XPathParser.pathExpr_return pathExpr21 = null; + + XPathParser.pathExpr_return pathExpr22 = null; XPathParser.pathExpr_return pathExpr24 = null; - XPathParser.pathExpr_return pathExpr26 = null; + XPathParser.pathExpr_return pathExpr25 = null; XPathParser.pathExpr_return pathExpr27 = null; - XPathParser.pathExpr_return pathExpr29 = null; + XPathParser.pathExpr_return pathExpr28 = null; XPathParser.pathExpr_return pathExpr30 = null; - XPathParser.pathExpr_return pathExpr32 = null; + XPathParser.pathExpr_return pathExpr31 = null; XPathParser.pathExpr_return pathExpr33 = null; - XPathParser.pathExpr_return pathExpr35 = null; + XPathParser.pathExpr_return pathExpr34 = null; XPathParser.pathExpr_return pathExpr36 = null; - XPathParser.pathExpr_return pathExpr38 = null; + XPathParser.pathExpr_return pathExpr37 = null; XPathParser.pathExpr_return pathExpr39 = null; - XPathParser.pathExpr_return pathExpr41 = null; + XPathParser.pathExpr_return pathExpr40 = null; XPathParser.pathExpr_return pathExpr42 = null; - XPathParser.pathExpr_return pathExpr44 = null; - - Object char_literal25_tree=null; - Object string_literal28_tree=null; - Object char_literal31_tree=null; - Object string_literal34_tree=null; - Object char_literal37_tree=null; - Object string_literal40_tree=null; - Object string_literal43_tree=null; + Object char_literal23_tree=null; + Object string_literal26_tree=null; + Object char_literal29_tree=null; + Object string_literal32_tree=null; + Object char_literal35_tree=null; + Object string_literal38_tree=null; + Object string_literal41_tree=null; try { - // XPath.g:212:3: ( pathExpr | ( pathExpr '=' )=> pathExpr '=' pathExpr | ( pathExpr '!=' )=> pathExpr '!=' pathExpr | ( pathExpr '>' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr ) - int alt6=8; - alt6 = dfa6.predict(input); - switch (alt6) { + // XPath.g:206:3: ( pathExpr | ( pathExpr '=' )=> pathExpr '=' pathExpr | ( pathExpr '!=' )=> pathExpr '!=' pathExpr | ( pathExpr '>' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr ) + int alt8=8; + alt8 = dfa8.predict(input); + switch (alt8) { case 1 : - // XPath.g:212:5: pathExpr + // XPath.g:206:5: pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr900); - pathExpr23=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr855); + pathExpr21=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr23.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr21.getTree()); } break; case 2 : - // XPath.g:213:5: ( pathExpr '=' )=> pathExpr '=' pathExpr + // XPath.g:207:5: ( pathExpr '=' )=> pathExpr '=' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr914); - pathExpr24=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr869); + pathExpr22=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr24.getTree()); - char_literal25=(Token)match(input,39,FOLLOW_39_in_comparisonExpr916); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr22.getTree()); + char_literal23=(Token)match(input,39,FOLLOW_39_in_comparisonExpr871); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal25_tree = (Object)adaptor.create(char_literal25); - adaptor.addChild(root_0, char_literal25_tree); + char_literal23_tree = (Object)adaptor.create(char_literal23); + adaptor.addChild(root_0, char_literal23_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr918); - pathExpr26=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr873); + pathExpr24=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr26.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr24.getTree()); } break; case 3 : - // XPath.g:214:5: ( pathExpr '!=' )=> pathExpr '!=' pathExpr + // XPath.g:208:5: ( pathExpr '!=' )=> pathExpr '!=' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr932); - pathExpr27=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr887); + pathExpr25=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr27.getTree()); - string_literal28=(Token)match(input,40,FOLLOW_40_in_comparisonExpr934); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr25.getTree()); + string_literal26=(Token)match(input,40,FOLLOW_40_in_comparisonExpr889); if (state.failed) return retval; if ( state.backtracking==0 ) { - string_literal28_tree = (Object)adaptor.create(string_literal28); - adaptor.addChild(root_0, string_literal28_tree); + string_literal26_tree = (Object)adaptor.create(string_literal26); + adaptor.addChild(root_0, string_literal26_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr936); - pathExpr29=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr891); + pathExpr27=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr29.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr27.getTree()); } break; case 4 : - // XPath.g:215:5: ( pathExpr '>' )=> pathExpr '>' pathExpr + // XPath.g:209:5: ( pathExpr '>' )=> pathExpr '>' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr950); - pathExpr30=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr905); + pathExpr28=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr30.getTree()); - char_literal31=(Token)match(input,41,FOLLOW_41_in_comparisonExpr952); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr28.getTree()); + char_literal29=(Token)match(input,41,FOLLOW_41_in_comparisonExpr907); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal31_tree = (Object)adaptor.create(char_literal31); - adaptor.addChild(root_0, char_literal31_tree); + char_literal29_tree = (Object)adaptor.create(char_literal29); + adaptor.addChild(root_0, char_literal29_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr954); - pathExpr32=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr909); + pathExpr30=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr32.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr30.getTree()); } break; case 5 : - // XPath.g:216:5: ( pathExpr '>=' )=> pathExpr '>=' pathExpr + // XPath.g:210:5: ( pathExpr '>=' )=> pathExpr '>=' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr968); - pathExpr33=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr923); + pathExpr31=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr33.getTree()); - string_literal34=(Token)match(input,42,FOLLOW_42_in_comparisonExpr970); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr31.getTree()); + string_literal32=(Token)match(input,42,FOLLOW_42_in_comparisonExpr925); if (state.failed) return retval; if ( state.backtracking==0 ) { - string_literal34_tree = (Object)adaptor.create(string_literal34); - adaptor.addChild(root_0, string_literal34_tree); + string_literal32_tree = (Object)adaptor.create(string_literal32); + adaptor.addChild(root_0, string_literal32_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr972); - pathExpr35=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr927); + pathExpr33=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr35.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr33.getTree()); } break; case 6 : - // XPath.g:217:5: ( pathExpr '<' )=> pathExpr '<' pathExpr + // XPath.g:211:5: ( pathExpr '<' )=> pathExpr '<' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr986); - pathExpr36=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr941); + pathExpr34=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr36.getTree()); - char_literal37=(Token)match(input,43,FOLLOW_43_in_comparisonExpr988); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr34.getTree()); + char_literal35=(Token)match(input,43,FOLLOW_43_in_comparisonExpr943); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal37_tree = (Object)adaptor.create(char_literal37); - adaptor.addChild(root_0, char_literal37_tree); + char_literal35_tree = (Object)adaptor.create(char_literal35); + adaptor.addChild(root_0, char_literal35_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr990); - pathExpr38=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr945); + pathExpr36=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr38.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr36.getTree()); } break; case 7 : - // XPath.g:218:5: ( pathExpr '<=' )=> pathExpr '<=' pathExpr + // XPath.g:212:5: ( pathExpr '<=' )=> pathExpr '<=' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr1004); - pathExpr39=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr959); + pathExpr37=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr39.getTree()); - string_literal40=(Token)match(input,44,FOLLOW_44_in_comparisonExpr1006); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr37.getTree()); + string_literal38=(Token)match(input,44,FOLLOW_44_in_comparisonExpr961); if (state.failed) return retval; if ( state.backtracking==0 ) { - string_literal40_tree = (Object)adaptor.create(string_literal40); - adaptor.addChild(root_0, string_literal40_tree); + string_literal38_tree = (Object)adaptor.create(string_literal38); + adaptor.addChild(root_0, string_literal38_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr1008); - pathExpr41=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr963); + pathExpr39=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr41.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr39.getTree()); } break; case 8 : - // XPath.g:219:5: ( pathExpr '~=' )=> pathExpr '~=' pathExpr + // XPath.g:213:5: ( pathExpr '~=' )=> pathExpr '~=' pathExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_pathExpr_in_comparisonExpr1022); - pathExpr42=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr977); + pathExpr40=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr42.getTree()); - string_literal43=(Token)match(input,45,FOLLOW_45_in_comparisonExpr1024); if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr40.getTree()); + string_literal41=(Token)match(input,45,FOLLOW_45_in_comparisonExpr979); if (state.failed) return retval; if ( state.backtracking==0 ) { - string_literal43_tree = (Object)adaptor.create(string_literal43); - adaptor.addChild(root_0, string_literal43_tree); + string_literal41_tree = (Object)adaptor.create(string_literal41); + adaptor.addChild(root_0, string_literal41_tree); } - pushFollow(FOLLOW_pathExpr_in_comparisonExpr1026); - pathExpr44=pathExpr(); + pushFollow(FOLLOW_pathExpr_in_comparisonExpr981); + pathExpr42=pathExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr44.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, pathExpr42.getTree()); } break; @@ -1257,43 +1186,44 @@ public class XPathParser extends Parser { }; // $ANTLR start "pathExpr" - // XPath.g:223:1: fragment pathExpr : ( locationExpr | primaryExpr ); + // XPath.g:217:1: fragment pathExpr : ( locationExpr | primaryExpr ); public final XPathParser.pathExpr_return pathExpr() throws RecognitionException { XPathParser.pathExpr_return retval = new XPathParser.pathExpr_return(); retval.start = input.LT(1); Object root_0 = null; - XPathParser.locationExpr_return locationExpr45 = null; + XPathParser.locationExpr_return locationExpr43 = null; - XPathParser.primaryExpr_return primaryExpr46 = null; + XPathParser.primaryExpr_return primaryExpr44 = null; try { - // XPath.g:225:3: ( locationExpr | primaryExpr ) - int alt7=2; + // XPath.g:219:3: ( locationExpr | primaryExpr ) + int alt9=2; switch ( input.LA(1) ) { case 34: + case 35: case 36: { - alt7=1; + alt9=1; } break; case QName: { - int LA7_2 = input.LA(2); + int LA9_2 = input.LA(2); - if ( ((LA7_2>=Comma && LA7_2<=Colon)||(LA7_2>=34 && LA7_2<=35)||(LA7_2>=37 && LA7_2<=45)||LA7_2==47) ) { - alt7=1; + if ( ((LA9_2>=Comma && LA9_2<=Colon)||LA9_2==QName||(LA9_2>=34 && LA9_2<=45)||LA9_2==47) ) { + alt9=1; } - else if ( (LA7_2==46) ) { - alt7=2; + else if ( (LA9_2==46) ) { + alt9=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 7, 2, input); + new NoViableAltException("", 9, 2, input); throw nvae; } @@ -1303,43 +1233,43 @@ public class XPathParser extends Parser { case Integer: case Double: { - alt7=2; + alt9=2; } break; default: if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 7, 0, input); + new NoViableAltException("", 9, 0, input); throw nvae; } - switch (alt7) { + switch (alt9) { case 1 : - // XPath.g:225:5: locationExpr + // XPath.g:219:5: locationExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_locationExpr_in_pathExpr1042); - locationExpr45=locationExpr(); + pushFollow(FOLLOW_locationExpr_in_pathExpr997); + locationExpr43=locationExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, locationExpr45.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, locationExpr43.getTree()); } break; case 2 : - // XPath.g:226:5: primaryExpr + // XPath.g:220:5: primaryExpr { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_primaryExpr_in_pathExpr1048); - primaryExpr46=primaryExpr(); + pushFollow(FOLLOW_primaryExpr_in_pathExpr1003); + primaryExpr44=primaryExpr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, primaryExpr46.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, primaryExpr44.getTree()); } break; @@ -1371,106 +1301,106 @@ public class XPathParser extends Parser { }; // $ANTLR start "primaryExpr" - // XPath.g:229:1: fragment primaryExpr : ( String | Integer | Double | functionCall ); + // XPath.g:223:1: fragment primaryExpr : ( String | Integer | Double | functionCall ); public final XPathParser.primaryExpr_return primaryExpr() throws RecognitionException { XPathParser.primaryExpr_return retval = new XPathParser.primaryExpr_return(); retval.start = input.LT(1); Object root_0 = null; - Token String47=null; - Token Integer48=null; - Token Double49=null; - XPathParser.functionCall_return functionCall50 = null; + Token String45=null; + Token Integer46=null; + Token Double47=null; + XPathParser.functionCall_return functionCall48 = null; - Object String47_tree=null; - Object Integer48_tree=null; - Object Double49_tree=null; + Object String45_tree=null; + Object Integer46_tree=null; + Object Double47_tree=null; try { - // XPath.g:231:3: ( String | Integer | Double | functionCall ) - int alt8=4; + // XPath.g:225:3: ( String | Integer | Double | functionCall ) + int alt10=4; switch ( input.LA(1) ) { case String: { - alt8=1; + alt10=1; } break; case Integer: { - alt8=2; + alt10=2; } break; case Double: { - alt8=3; + alt10=3; } break; case QName: { - alt8=4; + alt10=4; } break; default: if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 8, 0, input); + new NoViableAltException("", 10, 0, input); throw nvae; } - switch (alt8) { + switch (alt10) { case 1 : - // XPath.g:231:5: String + // XPath.g:225:5: String { root_0 = (Object)adaptor.nil(); - String47=(Token)match(input,String,FOLLOW_String_in_primaryExpr1067); if (state.failed) return retval; + String45=(Token)match(input,String,FOLLOW_String_in_primaryExpr1022); if (state.failed) return retval; if ( state.backtracking==0 ) { - String47_tree = (Object)adaptor.create(String47); - adaptor.addChild(root_0, String47_tree); + String45_tree = (Object)adaptor.create(String45); + adaptor.addChild(root_0, String45_tree); } } break; case 2 : - // XPath.g:232:5: Integer + // XPath.g:226:5: Integer { root_0 = (Object)adaptor.nil(); - Integer48=(Token)match(input,Integer,FOLLOW_Integer_in_primaryExpr1073); if (state.failed) return retval; + Integer46=(Token)match(input,Integer,FOLLOW_Integer_in_primaryExpr1028); if (state.failed) return retval; if ( state.backtracking==0 ) { - Integer48_tree = (Object)adaptor.create(Integer48); - adaptor.addChild(root_0, Integer48_tree); + Integer46_tree = (Object)adaptor.create(Integer46); + adaptor.addChild(root_0, Integer46_tree); } } break; case 3 : - // XPath.g:233:5: Double + // XPath.g:227:5: Double { root_0 = (Object)adaptor.nil(); - Double49=(Token)match(input,Double,FOLLOW_Double_in_primaryExpr1079); if (state.failed) return retval; + Double47=(Token)match(input,Double,FOLLOW_Double_in_primaryExpr1034); if (state.failed) return retval; if ( state.backtracking==0 ) { - Double49_tree = (Object)adaptor.create(Double49); - adaptor.addChild(root_0, Double49_tree); + Double47_tree = (Object)adaptor.create(Double47); + adaptor.addChild(root_0, Double47_tree); } } break; case 4 : - // XPath.g:234:5: functionCall + // XPath.g:228:5: functionCall { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_functionCall_in_primaryExpr1085); - functionCall50=functionCall(); + pushFollow(FOLLOW_functionCall_in_primaryExpr1040); + functionCall48=functionCall(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, functionCall50.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, functionCall48.getTree()); } break; @@ -1502,92 +1432,92 @@ public class XPathParser extends Parser { }; // $ANTLR start "functionCall" - // XPath.g:238:1: fragment functionCall : QName '(' ( expr ( ',' expr )* )? ')' ; + // XPath.g:232:1: fragment functionCall : QName '(' ( expr ( ',' expr )* )? ')' ; public final XPathParser.functionCall_return functionCall() throws RecognitionException { XPathParser.functionCall_return retval = new XPathParser.functionCall_return(); retval.start = input.LT(1); Object root_0 = null; - Token QName51=null; + Token QName49=null; + Token char_literal50=null; Token char_literal52=null; Token char_literal54=null; - Token char_literal56=null; - XPathParser.expr_return expr53 = null; + XPathParser.expr_return expr51 = null; - XPathParser.expr_return expr55 = null; + XPathParser.expr_return expr53 = null; - Object QName51_tree=null; + Object QName49_tree=null; + Object char_literal50_tree=null; Object char_literal52_tree=null; Object char_literal54_tree=null; - Object char_literal56_tree=null; try { - // XPath.g:240:3: ( QName '(' ( expr ( ',' expr )* )? ')' ) - // XPath.g:240:5: QName '(' ( expr ( ',' expr )* )? ')' + // XPath.g:234:3: ( QName '(' ( expr ( ',' expr )* )? ')' ) + // XPath.g:234:5: QName '(' ( expr ( ',' expr )* )? ')' { root_0 = (Object)adaptor.nil(); - QName51=(Token)match(input,QName,FOLLOW_QName_in_functionCall1105); if (state.failed) return retval; + QName49=(Token)match(input,QName,FOLLOW_QName_in_functionCall1060); if (state.failed) return retval; if ( state.backtracking==0 ) { - QName51_tree = (Object)adaptor.create(QName51); - adaptor.addChild(root_0, QName51_tree); + QName49_tree = (Object)adaptor.create(QName49); + adaptor.addChild(root_0, QName49_tree); } - char_literal52=(Token)match(input,46,FOLLOW_46_in_functionCall1107); if (state.failed) return retval; + char_literal50=(Token)match(input,46,FOLLOW_46_in_functionCall1062); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal52_tree = (Object)adaptor.create(char_literal52); - adaptor.addChild(root_0, char_literal52_tree); + char_literal50_tree = (Object)adaptor.create(char_literal50); + adaptor.addChild(root_0, char_literal50_tree); } - // XPath.g:240:15: ( expr ( ',' expr )* )? - int alt10=2; - int LA10_0 = input.LA(1); + // XPath.g:234:15: ( expr ( ',' expr )* )? + int alt12=2; + int LA12_0 = input.LA(1); - if ( ((LA10_0>=String && LA10_0<=Integer)||LA10_0==Double||LA10_0==QName||LA10_0==34||LA10_0==36) ) { - alt10=1; + if ( ((LA12_0>=String && LA12_0<=Integer)||LA12_0==Double||LA12_0==QName||(LA12_0>=34 && LA12_0<=36)) ) { + alt12=1; } - switch (alt10) { + switch (alt12) { case 1 : - // XPath.g:240:16: expr ( ',' expr )* + // XPath.g:234:16: expr ( ',' expr )* { - pushFollow(FOLLOW_expr_in_functionCall1110); - expr53=expr(); + pushFollow(FOLLOW_expr_in_functionCall1065); + expr51=expr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, expr53.getTree()); - // XPath.g:240:21: ( ',' expr )* - loop9: + if ( state.backtracking==0 ) adaptor.addChild(root_0, expr51.getTree()); + // XPath.g:234:21: ( ',' expr )* + loop11: do { - int alt9=2; - int LA9_0 = input.LA(1); + int alt11=2; + int LA11_0 = input.LA(1); - if ( (LA9_0==Comma) ) { - alt9=1; + if ( (LA11_0==Comma) ) { + alt11=1; } - switch (alt9) { + switch (alt11) { case 1 : - // XPath.g:240:22: ',' expr + // XPath.g:234:22: ',' expr { - char_literal54=(Token)match(input,Comma,FOLLOW_Comma_in_functionCall1113); if (state.failed) return retval; + char_literal52=(Token)match(input,Comma,FOLLOW_Comma_in_functionCall1068); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal54_tree = (Object)adaptor.create(char_literal54); - adaptor.addChild(root_0, char_literal54_tree); + char_literal52_tree = (Object)adaptor.create(char_literal52); + adaptor.addChild(root_0, char_literal52_tree); } - pushFollow(FOLLOW_expr_in_functionCall1115); - expr55=expr(); + pushFollow(FOLLOW_expr_in_functionCall1070); + expr53=expr(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, expr55.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, expr53.getTree()); } break; default : - break loop9; + break loop11; } } while (true); @@ -1597,10 +1527,10 @@ public class XPathParser extends Parser { } - char_literal56=(Token)match(input,47,FOLLOW_47_in_functionCall1121); if (state.failed) return retval; + char_literal54=(Token)match(input,47,FOLLOW_47_in_functionCall1076); if (state.failed) return retval; if ( state.backtracking==0 ) { - char_literal56_tree = (Object)adaptor.create(char_literal56); - adaptor.addChild(root_0, char_literal56_tree); + char_literal54_tree = (Object)adaptor.create(char_literal54); + adaptor.addChild(root_0, char_literal54_tree); } } @@ -1627,15 +1557,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred1_XPath public final void synpred1_XPath_fragment() throws RecognitionException { - // XPath.g:177:5: ( step '/' ) - // XPath.g:177:6: step '/' + // XPath.g:207:5: ( pathExpr '=' ) + // XPath.g:207:6: pathExpr '=' { - pushFollow(FOLLOW_step_in_synpred1_XPath687); - step(); + pushFollow(FOLLOW_pathExpr_in_synpred1_XPath862); + pathExpr(); state._fsp--; if (state.failed) return ; - match(input,34,FOLLOW_34_in_synpred1_XPath689); if (state.failed) return ; + match(input,39,FOLLOW_39_in_synpred1_XPath864); if (state.failed) return ; } } @@ -1643,15 +1573,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred2_XPath public final void synpred2_XPath_fragment() throws RecognitionException { - // XPath.g:179:5: ( step '//' ) - // XPath.g:179:6: step '//' + // XPath.g:208:5: ( pathExpr '!=' ) + // XPath.g:208:6: pathExpr '!=' { - pushFollow(FOLLOW_step_in_synpred2_XPath722); - step(); + pushFollow(FOLLOW_pathExpr_in_synpred2_XPath880); + pathExpr(); state._fsp--; if (state.failed) return ; - match(input,35,FOLLOW_35_in_synpred2_XPath724); if (state.failed) return ; + match(input,40,FOLLOW_40_in_synpred2_XPath882); if (state.failed) return ; } } @@ -1659,15 +1589,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred3_XPath public final void synpred3_XPath_fragment() throws RecognitionException { - // XPath.g:213:5: ( pathExpr '=' ) - // XPath.g:213:6: pathExpr '=' + // XPath.g:209:5: ( pathExpr '>' ) + // XPath.g:209:6: pathExpr '>' { - pushFollow(FOLLOW_pathExpr_in_synpred3_XPath907); + pushFollow(FOLLOW_pathExpr_in_synpred3_XPath898); pathExpr(); state._fsp--; if (state.failed) return ; - match(input,39,FOLLOW_39_in_synpred3_XPath909); if (state.failed) return ; + match(input,41,FOLLOW_41_in_synpred3_XPath900); if (state.failed) return ; } } @@ -1675,15 +1605,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred4_XPath public final void synpred4_XPath_fragment() throws RecognitionException { - // XPath.g:214:5: ( pathExpr '!=' ) - // XPath.g:214:6: pathExpr '!=' + // XPath.g:210:5: ( pathExpr '>=' ) + // XPath.g:210:6: pathExpr '>=' { - pushFollow(FOLLOW_pathExpr_in_synpred4_XPath925); + pushFollow(FOLLOW_pathExpr_in_synpred4_XPath916); pathExpr(); state._fsp--; if (state.failed) return ; - match(input,40,FOLLOW_40_in_synpred4_XPath927); if (state.failed) return ; + match(input,42,FOLLOW_42_in_synpred4_XPath918); if (state.failed) return ; } } @@ -1691,15 +1621,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred5_XPath public final void synpred5_XPath_fragment() throws RecognitionException { - // XPath.g:215:5: ( pathExpr '>' ) - // XPath.g:215:6: pathExpr '>' + // XPath.g:211:5: ( pathExpr '<' ) + // XPath.g:211:6: pathExpr '<' { - pushFollow(FOLLOW_pathExpr_in_synpred5_XPath943); + pushFollow(FOLLOW_pathExpr_in_synpred5_XPath934); pathExpr(); state._fsp--; if (state.failed) return ; - match(input,41,FOLLOW_41_in_synpred5_XPath945); if (state.failed) return ; + match(input,43,FOLLOW_43_in_synpred5_XPath936); if (state.failed) return ; } } @@ -1707,15 +1637,15 @@ public class XPathParser extends Parser { // $ANTLR start synpred6_XPath public final void synpred6_XPath_fragment() throws RecognitionException { - // XPath.g:216:5: ( pathExpr '>=' ) - // XPath.g:216:6: pathExpr '>=' + // XPath.g:212:5: ( pathExpr '<=' ) + // XPath.g:212:6: pathExpr '<=' { - pushFollow(FOLLOW_pathExpr_in_synpred6_XPath961); + pushFollow(FOLLOW_pathExpr_in_synpred6_XPath952); pathExpr(); state._fsp--; if (state.failed) return ; - match(input,42,FOLLOW_42_in_synpred6_XPath963); if (state.failed) return ; + match(input,44,FOLLOW_44_in_synpred6_XPath954); if (state.failed) return ; } } @@ -1723,52 +1653,20 @@ public class XPathParser extends Parser { // $ANTLR start synpred7_XPath public final void synpred7_XPath_fragment() throws RecognitionException { - // XPath.g:217:5: ( pathExpr '<' ) - // XPath.g:217:6: pathExpr '<' + // XPath.g:213:5: ( pathExpr '~=' ) + // XPath.g:213:6: pathExpr '~=' { - pushFollow(FOLLOW_pathExpr_in_synpred7_XPath979); + pushFollow(FOLLOW_pathExpr_in_synpred7_XPath970); pathExpr(); state._fsp--; if (state.failed) return ; - match(input,43,FOLLOW_43_in_synpred7_XPath981); if (state.failed) return ; + match(input,45,FOLLOW_45_in_synpred7_XPath972); if (state.failed) return ; } } // $ANTLR end synpred7_XPath - // $ANTLR start synpred8_XPath - public final void synpred8_XPath_fragment() throws RecognitionException { - // XPath.g:218:5: ( pathExpr '<=' ) - // XPath.g:218:6: pathExpr '<=' - { - pushFollow(FOLLOW_pathExpr_in_synpred8_XPath997); - pathExpr(); - - state._fsp--; - if (state.failed) return ; - match(input,44,FOLLOW_44_in_synpred8_XPath999); if (state.failed) return ; - - } - } - // $ANTLR end synpred8_XPath - - // $ANTLR start synpred9_XPath - public final void synpred9_XPath_fragment() throws RecognitionException { - // XPath.g:219:5: ( pathExpr '~=' ) - // XPath.g:219:6: pathExpr '~=' - { - pushFollow(FOLLOW_pathExpr_in_synpred9_XPath1015); - pathExpr(); - - state._fsp--; - if (state.failed) return ; - match(input,45,FOLLOW_45_in_synpred9_XPath1017); if (state.failed) return ; - - } - } - // $ANTLR end synpred9_XPath - // Delegated rules public final boolean synpred5_XPath() { @@ -1813,34 +1711,6 @@ public class XPathParser extends Parser { state.failed=false; return success; } - public final boolean synpred8_XPath() { - state.backtracking++; - int start = input.mark(); - try { - synpred8_XPath_fragment(); // can never throw exception - } catch (RecognitionException re) { - System.err.println("impossible: "+re); - } - boolean success = !state.failed; - input.rewind(start); - state.backtracking--; - state.failed=false; - return success; - } - public final boolean synpred9_XPath() { - state.backtracking++; - int start = input.mark(); - try { - synpred9_XPath_fragment(); // can never throw exception - } catch (RecognitionException re) { - System.err.println("impossible: "+re); - } - boolean success = !state.failed; - input.rewind(start); - state.backtracking--; - state.failed=false; - return success; - } public final boolean synpred7_XPath() { state.backtracking++; int start = input.mark(); @@ -1899,21 +1769,22 @@ public class XPathParser extends Parser { } - protected DFA6 dfa6 = new DFA6(this); - static final String DFA6_eotS = - "\17\uffff"; - static final String DFA6_eofS = - "\17\uffff"; - static final String DFA6_minS = - "\1\24\6\0\10\uffff"; - static final String DFA6_maxS = - "\1\44\6\0\10\uffff"; - static final String DFA6_acceptS = - "\7\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10"; - static final String DFA6_specialS = - "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\10\uffff}>"; - static final String[] DFA6_transitionS = { - "\1\4\1\5\2\uffff\1\6\7\uffff\1\2\1\uffff\1\3\1\uffff\1\1", + protected DFA8 dfa8 = new DFA8(this); + static final String DFA8_eotS = + "\20\uffff"; + static final String DFA8_eofS = + "\20\uffff"; + static final String DFA8_minS = + "\1\24\7\0\10\uffff"; + static final String DFA8_maxS = + "\1\44\7\0\10\uffff"; + static final String DFA8_acceptS = + "\10\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10"; + static final String DFA8_specialS = + "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\10\uffff}>"; + static final String[] DFA8_transitionS = { + "\1\5\1\6\2\uffff\1\7\7\uffff\1\2\1\uffff\1\3\1\4\1\1", + "\1\uffff", "\1\uffff", "\1\uffff", "\1\uffff", @@ -1930,208 +1801,235 @@ public class XPathParser extends Parser { "" }; - static final short[] DFA6_eot = DFA.unpackEncodedString(DFA6_eotS); - static final short[] DFA6_eof = DFA.unpackEncodedString(DFA6_eofS); - static final char[] DFA6_min = DFA.unpackEncodedStringToUnsignedChars(DFA6_minS); - static final char[] DFA6_max = DFA.unpackEncodedStringToUnsignedChars(DFA6_maxS); - static final short[] DFA6_accept = DFA.unpackEncodedString(DFA6_acceptS); - static final short[] DFA6_special = DFA.unpackEncodedString(DFA6_specialS); - static final short[][] DFA6_transition; + static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS); + static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS); + static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS); + static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS); + static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS); + static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS); + static final short[][] DFA8_transition; static { - int numStates = DFA6_transitionS.length; - DFA6_transition = new short[numStates][]; + int numStates = DFA8_transitionS.length; + DFA8_transition = new short[numStates][]; for (int i=0; i' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr );"; + return "204:1: fragment comparisonExpr : ( pathExpr | ( pathExpr '=' )=> pathExpr '=' pathExpr | ( pathExpr '!=' )=> pathExpr '!=' pathExpr | ( pathExpr '>' )=> pathExpr '>' pathExpr | ( pathExpr '>=' )=> pathExpr '>=' pathExpr | ( pathExpr '<' )=> pathExpr '<' pathExpr | ( pathExpr '<=' )=> pathExpr '<=' pathExpr | ( pathExpr '~=' )=> pathExpr '~=' pathExpr );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA6_1 = input.LA(1); + int LA8_1 = input.LA(1); - int index6_1 = input.index(); + int index8_1 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_1); + input.seek(index8_1); if ( s>=0 ) return s; break; case 1 : - int LA6_2 = input.LA(1); + int LA8_2 = input.LA(1); - int index6_2 = input.index(); + int index8_2 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_2); + input.seek(index8_2); if ( s>=0 ) return s; break; case 2 : - int LA6_3 = input.LA(1); + int LA8_3 = input.LA(1); - int index6_3 = input.index(); + int index8_3 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_3); + input.seek(index8_3); if ( s>=0 ) return s; break; case 3 : - int LA6_4 = input.LA(1); + int LA8_4 = input.LA(1); - int index6_4 = input.index(); + int index8_4 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_4); + input.seek(index8_4); if ( s>=0 ) return s; break; case 4 : - int LA6_5 = input.LA(1); + int LA8_5 = input.LA(1); - int index6_5 = input.index(); + int index8_5 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_5); + input.seek(index8_5); if ( s>=0 ) return s; break; case 5 : - int LA6_6 = input.LA(1); + int LA8_6 = input.LA(1); + + + int index8_6 = input.index(); + input.rewind(); + s = -1; + if ( (true) ) {s = 8;} + + else if ( (synpred1_XPath()) ) {s = 9;} + + else if ( (synpred2_XPath()) ) {s = 10;} + + else if ( (synpred3_XPath()) ) {s = 11;} + + else if ( (synpred4_XPath()) ) {s = 12;} + + else if ( (synpred5_XPath()) ) {s = 13;} + + else if ( (synpred6_XPath()) ) {s = 14;} + + else if ( (synpred7_XPath()) ) {s = 15;} + + + input.seek(index8_6); + if ( s>=0 ) return s; + break; + case 6 : + int LA8_7 = input.LA(1); - int index6_6 = input.index(); + int index8_7 = input.index(); input.rewind(); s = -1; - if ( (true) ) {s = 7;} + if ( (true) ) {s = 8;} - else if ( (synpred3_XPath()) ) {s = 8;} + else if ( (synpred1_XPath()) ) {s = 9;} - else if ( (synpred4_XPath()) ) {s = 9;} + else if ( (synpred2_XPath()) ) {s = 10;} - else if ( (synpred5_XPath()) ) {s = 10;} + else if ( (synpred3_XPath()) ) {s = 11;} - else if ( (synpred6_XPath()) ) {s = 11;} + else if ( (synpred4_XPath()) ) {s = 12;} - else if ( (synpred7_XPath()) ) {s = 12;} + else if ( (synpred5_XPath()) ) {s = 13;} - else if ( (synpred8_XPath()) ) {s = 13;} + else if ( (synpred6_XPath()) ) {s = 14;} - else if ( (synpred9_XPath()) ) {s = 14;} + else if ( (synpred7_XPath()) ) {s = 15;} - input.seek(index6_6); + input.seek(index8_7); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 6, _s, input); + new NoViableAltException(getDescription(), 8, _s, input); error(nvae); throw nvae; } @@ -2140,77 +2038,71 @@ public class XPathParser extends Parser { public static final BitSet FOLLOW_locationExpr_in_xpath620 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_relativePath_in_locationExpr646 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_absolutePath_in_locationExpr652 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_step_in_relativePath669 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_step_in_relativePath694 = new BitSet(new long[]{0x0000000400000000L}); - public static final BitSet FOLLOW_34_in_relativePath696 = new BitSet(new long[]{0x0000001100000000L}); - public static final BitSet FOLLOW_relativePath_in_relativePath698 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_step_in_relativePath729 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_35_in_relativePath731 = new BitSet(new long[]{0x0000001100000000L}); - public static final BitSet FOLLOW_relativePath_in_relativePath733 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_34_in_absolutePath764 = new BitSet(new long[]{0x0000001100000000L}); - public static final BitSet FOLLOW_relativePath_in_absolutePath766 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_nodeTest_in_step800 = new BitSet(new long[]{0x0000002000000002L}); - public static final BitSet FOLLOW_predicate_in_step802 = new BitSet(new long[]{0x0000002000000002L}); - public static final BitSet FOLLOW_36_in_nodeTest830 = new BitSet(new long[]{0x0000000100000000L}); - public static final BitSet FOLLOW_QName_in_nodeTest834 = new BitSet(new long[]{0x0000000004000000L}); - public static final BitSet FOLLOW_Colon_in_nodeTest836 = new BitSet(new long[]{0x0000000100000000L}); - public static final BitSet FOLLOW_QName_in_nodeTest840 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_37_in_predicate858 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_expr_in_predicate860 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_38_in_predicate862 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_comparisonExpr_in_expr885 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr900 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr914 = new BitSet(new long[]{0x0000008000000000L}); - public static final BitSet FOLLOW_39_in_comparisonExpr916 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr918 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr932 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_40_in_comparisonExpr934 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr936 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr950 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_41_in_comparisonExpr952 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr954 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr968 = new BitSet(new long[]{0x0000040000000000L}); - public static final BitSet FOLLOW_42_in_comparisonExpr970 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr972 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr986 = new BitSet(new long[]{0x0000080000000000L}); - public static final BitSet FOLLOW_43_in_comparisonExpr988 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr990 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr1004 = new BitSet(new long[]{0x0000100000000000L}); - public static final BitSet FOLLOW_44_in_comparisonExpr1006 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr1008 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr1022 = new BitSet(new long[]{0x0000200000000000L}); - public static final BitSet FOLLOW_45_in_comparisonExpr1024 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_pathExpr_in_comparisonExpr1026 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_locationExpr_in_pathExpr1042 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_primaryExpr_in_pathExpr1048 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_String_in_primaryExpr1067 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_Integer_in_primaryExpr1073 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_Double_in_primaryExpr1079 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_functionCall_in_primaryExpr1085 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QName_in_functionCall1105 = new BitSet(new long[]{0x0000400000000000L}); - public static final BitSet FOLLOW_46_in_functionCall1107 = new BitSet(new long[]{0x0000801501300000L}); - public static final BitSet FOLLOW_expr_in_functionCall1110 = new BitSet(new long[]{0x0000800002000000L}); - public static final BitSet FOLLOW_Comma_in_functionCall1113 = new BitSet(new long[]{0x0000001501300000L}); - public static final BitSet FOLLOW_expr_in_functionCall1115 = new BitSet(new long[]{0x0000800002000000L}); - public static final BitSet FOLLOW_47_in_functionCall1121 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_step_in_synpred1_XPath687 = new BitSet(new long[]{0x0000000400000000L}); - public static final BitSet FOLLOW_34_in_synpred1_XPath689 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_step_in_synpred2_XPath722 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_35_in_synpred2_XPath724 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred3_XPath907 = new BitSet(new long[]{0x0000008000000000L}); - public static final BitSet FOLLOW_39_in_synpred3_XPath909 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred4_XPath925 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_40_in_synpred4_XPath927 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred5_XPath943 = new BitSet(new long[]{0x0000020000000000L}); - public static final BitSet FOLLOW_41_in_synpred5_XPath945 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred6_XPath961 = new BitSet(new long[]{0x0000040000000000L}); - public static final BitSet FOLLOW_42_in_synpred6_XPath963 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred7_XPath979 = new BitSet(new long[]{0x0000080000000000L}); - public static final BitSet FOLLOW_43_in_synpred7_XPath981 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred8_XPath997 = new BitSet(new long[]{0x0000100000000000L}); - public static final BitSet FOLLOW_44_in_synpred8_XPath999 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_pathExpr_in_synpred9_XPath1015 = new BitSet(new long[]{0x0000200000000000L}); - public static final BitSet FOLLOW_45_in_synpred9_XPath1017 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_step_in_relativePath663 = new BitSet(new long[]{0x0000001D00000002L}); + public static final BitSet FOLLOW_relativePath_in_relativePath665 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_34_in_relativePath686 = new BitSet(new long[]{0x0000001100000000L}); + public static final BitSet FOLLOW_step_in_relativePath688 = new BitSet(new long[]{0x0000001D00000002L}); + public static final BitSet FOLLOW_relativePath_in_relativePath690 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_35_in_relativePath714 = new BitSet(new long[]{0x0000001100000000L}); + public static final BitSet FOLLOW_step_in_relativePath716 = new BitSet(new long[]{0x0000001D00000002L}); + public static final BitSet FOLLOW_relativePath_in_relativePath718 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_nodeTest_in_step755 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_predicate_in_step757 = new BitSet(new long[]{0x0000002000000002L}); + public static final BitSet FOLLOW_36_in_nodeTest785 = new BitSet(new long[]{0x0000000100000000L}); + public static final BitSet FOLLOW_QName_in_nodeTest789 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_Colon_in_nodeTest791 = new BitSet(new long[]{0x0000000100000000L}); + public static final BitSet FOLLOW_QName_in_nodeTest795 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_37_in_predicate813 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_expr_in_predicate815 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_38_in_predicate817 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_comparisonExpr_in_expr840 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr855 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr869 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_39_in_comparisonExpr871 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr873 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr887 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_40_in_comparisonExpr889 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr891 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr905 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_comparisonExpr907 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr909 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr923 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_comparisonExpr925 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr927 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr941 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_43_in_comparisonExpr943 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr945 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr959 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_comparisonExpr961 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr963 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr977 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_45_in_comparisonExpr979 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_pathExpr_in_comparisonExpr981 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_locationExpr_in_pathExpr997 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_primaryExpr_in_pathExpr1003 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_String_in_primaryExpr1022 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_Integer_in_primaryExpr1028 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_Double_in_primaryExpr1034 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_functionCall_in_primaryExpr1040 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QName_in_functionCall1060 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_46_in_functionCall1062 = new BitSet(new long[]{0x0000801D01300000L}); + public static final BitSet FOLLOW_expr_in_functionCall1065 = new BitSet(new long[]{0x0000800002000000L}); + public static final BitSet FOLLOW_Comma_in_functionCall1068 = new BitSet(new long[]{0x0000001D01300000L}); + public static final BitSet FOLLOW_expr_in_functionCall1070 = new BitSet(new long[]{0x0000800002000000L}); + public static final BitSet FOLLOW_47_in_functionCall1076 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred1_XPath862 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_39_in_synpred1_XPath864 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred2_XPath880 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_40_in_synpred2_XPath882 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred3_XPath898 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_41_in_synpred3_XPath900 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred4_XPath916 = new BitSet(new long[]{0x0000040000000000L}); + public static final BitSet FOLLOW_42_in_synpred4_XPath918 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred5_XPath934 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_43_in_synpred5_XPath936 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred6_XPath952 = new BitSet(new long[]{0x0000100000000000L}); + public static final BitSet FOLLOW_44_in_synpred6_XPath954 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_pathExpr_in_synpred7_XPath970 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_45_in_synpred7_XPath972 = new BitSet(new long[]{0x0000000000000002L}); } \ No newline at end of file diff --git a/src/main/java/org/xerial/lens/relation/query/lang/XPathExpr.java b/src/main/java/org/xerial/lens/relation/query/lang/XPathExpr.java index 5c9a672..1a6e06e 100644 --- a/src/main/java/org/xerial/lens/relation/query/lang/XPathExpr.java +++ b/src/main/java/org/xerial/lens/relation/query/lang/XPathExpr.java @@ -58,11 +58,11 @@ public class XPathExpr { public String name; public Axis axis = Axis.Relative; public List step = new ArrayList(); - public List prediate = new ArrayList(); + public List predicate = new ArrayList(); } public static class Predicate { - + public Step step; } public Step step; @@ -75,8 +75,11 @@ public class XPathExpr { try { xpath_return r = parser.xpath(); - if (_logger.isDebugEnabled()) + if (_logger.isDebugEnabled()) { + // _logger.debug(ANTLRUtil.prettyPrintTokenList(token.getTokens(), ANTLRUtil + // .getTokenTable(XPathLexer.class, "XPath.tokens"))); _logger.debug(ANTLRUtil.parseTree((Tree) r.getTree(), XPathParser.tokenNames)); + } return Lens.loadANTLRParseTree(XPathExpr.class, (Tree) r.getTree(), XPathParser.tokenNames); diff --git a/src/main/java/org/xerial/util/antlr/ANTLRUtil.java b/src/main/java/org/xerial/util/antlr/ANTLRUtil.java index 271bc20..4114da1 100644 --- a/src/main/java/org/xerial/util/antlr/ANTLRUtil.java +++ b/src/main/java/org/xerial/util/antlr/ANTLRUtil.java @@ -35,10 +35,15 @@ import java.util.TreeMap; import org.antlr.runtime.Token; import org.antlr.runtime.tree.Tree; +import org.xerial.core.XerialError; +import org.xerial.core.XerialErrorCode; import org.xerial.util.FileResource; import org.xerial.util.StringUtil; +import org.xerial.util.log.Logger; public class ANTLRUtil { + private static Logger _logger = Logger.getLogger(ANTLRUtil.class); + public static String toVisibleString(String text) { text = text.replaceAll("\n", "\\\\n"); text = text.replaceAll("\r", "\\\\r"); @@ -85,18 +90,29 @@ public class ANTLRUtil { @SuppressWarnings("unchecked") public static Map getTokenTable(Class< ? > packageBaseClass, - String tokenFileName) throws IOException { + String tokenFileName) { Properties p = new Properties(); TreeMap tokenTable = new TreeMap(); URL wikiTokenFileURL = FileResource.find(packageBaseClass, tokenFileName); - if (wikiTokenFileURL != null) - p.load(wikiTokenFileURL.openStream()); + try { + if (wikiTokenFileURL != null) + p.load(wikiTokenFileURL.openStream()); + } + catch (IOException e) { + throw new XerialError(XerialErrorCode.IO_EXCEPTION, e); + } for (Iterator it = p.keySet().iterator(); it.hasNext();) { String tokenName = (String) it.next(); - int tokenType = Integer.parseInt(p.get(tokenName).toString()); - tokenTable.put(tokenType, tokenName); + try { + int tokenType = Integer.parseInt(p.get(tokenName).toString()); + tokenTable.put(tokenType, tokenName); + } + catch (NumberFormatException e) { + _logger.warn(e); + } + } return tokenTable; diff --git a/src/test/java/org/xerial/lens/relation/query/lang/XPathExprTest.java b/src/test/java/org/xerial/lens/relation/query/lang/XPathExprTest.java index 2b1c97c..5255a66 100644 --- a/src/test/java/org/xerial/lens/relation/query/lang/XPathExprTest.java +++ b/src/test/java/org/xerial/lens/relation/query/lang/XPathExprTest.java @@ -43,17 +43,23 @@ public class XPathExprTest { public void parse(String expr) throws XerialException { XPathExpr e = XPathExpr.parse(expr); - _logger.info(String.format("%s\n%s", expr, Lens.toSilk(e))); + _logger.info(String.format("%s:%s", expr, Lens.toSilk(e))); } @Test public void testParse() throws Exception { - parse("/A/B"); parse("//A"); - parse("//book"); - parse("//title"); + parse("/A"); + parse("/A/B"); + parse("//A/B//C"); + parse("//A[B]"); parse("//A[B][C]"); + parse("book[//order]//title"); } + @Test + public void testPredicate() throws Exception { + parse("//A[B]"); + } } -- 2.11.0