Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
smartnoise-sql / snsql / xpath / parser / XPathParser.py
Size: Mime:
# Generated from XPath.g4 by ANTLR 4.9.3
# encoding: utf-8
from antlr4 import *
from io import StringIO
import sys
if sys.version_info[1] > 5:
	from typing import TextIO
else:
	from typing.io import TextIO


def serializedATN():
    with StringIO() as buf:
        buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3#")
        buf.write("\u0090\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7")
        buf.write("\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16")
        buf.write("\t\16\4\17\t\17\4\20\t\20\4\21\t\21\3\2\3\2\3\2\3\3\3")
        buf.write("\3\3\3\5\3)\n\3\3\3\3\3\3\3\3\3\3\3\7\3\60\n\3\f\3\16")
        buf.write("\3\63\13\3\3\4\3\4\3\4\5\48\n\4\3\4\5\4;\n\4\3\5\3\5\3")
        buf.write("\5\3\5\5\5A\n\5\3\5\5\5D\n\5\3\6\3\6\3\6\3\6\5\6J\n\6")
        buf.write("\3\6\5\6M\n\6\3\7\3\7\3\7\5\7R\n\7\3\7\5\7U\n\7\3\b\3")
        buf.write("\b\3\b\3\b\3\b\5\b\\\n\b\5\b^\n\b\3\b\3\b\3\b\3\b\3\b")
        buf.write("\3\b\3\b\5\bg\n\b\3\b\3\b\5\bk\n\b\3\t\3\t\3\t\3\t\3\n")
        buf.write("\3\n\5\ns\n\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17")
        buf.write("\3\17\3\20\3\20\3\20\3\20\3\20\5\20\u0084\n\20\3\21\5")
        buf.write("\21\u0087\n\21\3\21\3\21\5\21\u008b\n\21\3\21\5\21\u008e")
        buf.write("\n\21\3\21\2\2\22\2\4\6\b\n\f\16\20\22\24\26\30\32\34")
        buf.write("\36 \2\4\4\2\7\7\t\16\3\2\31\32\2\u009c\2\"\3\2\2\2\4")
        buf.write("(\3\2\2\2\6\67\3\2\2\2\b<\3\2\2\2\nE\3\2\2\2\fQ\3\2\2")
        buf.write("\2\16j\3\2\2\2\20l\3\2\2\2\22r\3\2\2\2\24t\3\2\2\2\26")
        buf.write("v\3\2\2\2\30x\3\2\2\2\32z\3\2\2\2\34|\3\2\2\2\36\u0083")
        buf.write("\3\2\2\2 \u008d\3\2\2\2\"#\5\4\3\2#$\7\2\2\3$\3\3\2\2")
        buf.write("\2%)\5\6\4\2&)\5\b\5\2\')\5\n\6\2(%\3\2\2\2(&\3\2\2\2")
        buf.write("(\'\3\2\2\2)\61\3\2\2\2*\60\5\20\t\2+,\7\22\2\2,\60\5")
        buf.write("\6\4\2-.\7\3\2\2.\60\5\f\7\2/*\3\2\2\2/+\3\2\2\2/-\3\2")
        buf.write("\2\2\60\63\3\2\2\2\61/\3\2\2\2\61\62\3\2\2\2\62\5\3\2")
        buf.write("\2\2\63\61\3\2\2\2\648\7 \2\2\658\7\37\2\2\668\5\22\n")
        buf.write("\2\67\64\3\2\2\2\67\65\3\2\2\2\67\66\3\2\2\28:\3\2\2\2")
        buf.write("9;\5\16\b\2:9\3\2\2\2:;\3\2\2\2;\7\3\2\2\2<@\7\22\2\2")
        buf.write("=A\7 \2\2>A\7\37\2\2?A\5\22\n\2@=\3\2\2\2@>\3\2\2\2@?")
        buf.write("\3\2\2\2AC\3\2\2\2BD\5\16\b\2CB\3\2\2\2CD\3\2\2\2D\t\3")
        buf.write("\2\2\2EI\7\3\2\2FJ\7 \2\2GJ\7\37\2\2HJ\5\22\n\2IF\3\2")
        buf.write("\2\2IG\3\2\2\2IH\3\2\2\2JL\3\2\2\2KM\5\16\b\2LK\3\2\2")
        buf.write("\2LM\3\2\2\2M\13\3\2\2\2NR\7 \2\2OR\7\37\2\2PR\5\22\n")
        buf.write("\2QN\3\2\2\2QO\3\2\2\2QP\3\2\2\2RT\3\2\2\2SU\5\16\b\2")
        buf.write("TS\3\2\2\2TU\3\2\2\2U\r\3\2\2\2VW\7\4\2\2W]\5\4\3\2X[")
        buf.write("\5\30\r\2Y\\\5\36\20\2Z\\\5\4\3\2[Y\3\2\2\2[Z\3\2\2\2")
        buf.write("\\^\3\2\2\2]X\3\2\2\2]^\3\2\2\2^_\3\2\2\2_`\7\5\2\2`k")
        buf.write("\3\2\2\2ab\7\4\2\2bc\5\36\20\2cf\5\30\r\2dg\5\36\20\2")
        buf.write("eg\5\4\3\2fd\3\2\2\2fe\3\2\2\2gh\3\2\2\2hi\7\5\2\2ik\3")
        buf.write("\2\2\2jV\3\2\2\2ja\3\2\2\2k\17\3\2\2\2lm\7\4\2\2mn\7\35")
        buf.write("\2\2no\7\5\2\2o\21\3\2\2\2ps\5\26\f\2qs\5\24\13\2rp\3")
        buf.write("\2\2\2rq\3\2\2\2s\23\3\2\2\2tu\7\21\2\2u\25\3\2\2\2vw")
        buf.write("\7\6\2\2w\27\3\2\2\2xy\t\2\2\2y\31\3\2\2\2z{\t\3\2\2{")
        buf.write("\33\3\2\2\2|}\7\21\2\2}\35\3\2\2\2~\u0084\7\34\2\2\177")
        buf.write("\u0084\5 \21\2\u0080\u0084\7\31\2\2\u0081\u0084\7\32\2")
        buf.write("\2\u0082\u0084\7\33\2\2\u0083~\3\2\2\2\u0083\177\3\2\2")
        buf.write("\2\u0083\u0080\3\2\2\2\u0083\u0081\3\2\2\2\u0083\u0082")
        buf.write("\3\2\2\2\u0084\37\3\2\2\2\u0085\u0087\7\20\2\2\u0086\u0085")
        buf.write("\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088")
        buf.write("\u008e\7\36\2\2\u0089\u008b\7\20\2\2\u008a\u0089\3\2\2")
        buf.write("\2\u008a\u008b\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u008e")
        buf.write("\7\35\2\2\u008d\u0086\3\2\2\2\u008d\u008a\3\2\2\2\u008e")
        buf.write("!\3\2\2\2\26(/\61\67:@CILQT[]fjr\u0083\u0086\u008a\u008d")
        return buf.getvalue()


class XPathParser ( Parser ):

    grammarFileName = "XPath.g4"

    atn = ATNDeserializer().deserialize(serializedATN())

    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

    sharedContextCache = PredictionContextCache()

    literalNames = [ "<INVALID>", "'//'", "'['", "']'", "'@*'", "<INVALID>", 
                     "'<=>'", "'<>'", "'!='", "'<'", "<INVALID>", "'>'", 
                     "<INVALID>", "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", 
                     "'&'", "'|'", "'||'", "'^'" ]

    symbolicNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                      "<INVALID>", "EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", 
                      "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", 
                      "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", 
                      "HAT", "TRUE", "FALSE", "NULL", "STRING", "INTEGER_VALUE", 
                      "DECIMAL_VALUE", "ATTRIBUTE", "IDENTIFIER", "LETTER", 
                      "WS", "SPACE" ]

    RULE_statement = 0
    RULE_innerStatement = 1
    RULE_childSelector = 2
    RULE_rootSelector = 3
    RULE_rootDescendantSelector = 4
    RULE_descendantSelector = 5
    RULE_booleanSelector = 6
    RULE_indexSelector = 7
    RULE_allSelect = 8
    RULE_allNodes = 9
    RULE_allAttributes = 10
    RULE_comparisonOperator = 11
    RULE_booleanValue = 12
    RULE_allExpression = 13
    RULE_literal = 14
    RULE_number = 15

    ruleNames =  [ "statement", "innerStatement", "childSelector", "rootSelector", 
                   "rootDescendantSelector", "descendantSelector", "booleanSelector", 
                   "indexSelector", "allSelect", "allNodes", "allAttributes", 
                   "comparisonOperator", "booleanValue", "allExpression", 
                   "literal", "number" ]

    EOF = Token.EOF
    T__0=1
    T__1=2
    T__2=3
    T__3=4
    EQ=5
    NSEQ=6
    NEQ=7
    NEQJ=8
    LT=9
    LTE=10
    GT=11
    GTE=12
    PLUS=13
    MINUS=14
    ASTERISK=15
    SLASH=16
    PERCENT=17
    TILDE=18
    AMPERSAND=19
    PIPE=20
    CONCAT_PIPE=21
    HAT=22
    TRUE=23
    FALSE=24
    NULL=25
    STRING=26
    INTEGER_VALUE=27
    DECIMAL_VALUE=28
    ATTRIBUTE=29
    IDENTIFIER=30
    LETTER=31
    WS=32
    SPACE=33

    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
        super().__init__(input, output)
        self.checkVersion("4.9.3")
        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)
        self._predicates = None




    class StatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def innerStatement(self):
            return self.getTypedRuleContext(XPathParser.InnerStatementContext,0)


        def EOF(self):
            return self.getToken(XPathParser.EOF, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatement" ):
                listener.enterStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatement" ):
                listener.exitStatement(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitStatement" ):
                return visitor.visitStatement(self)
            else:
                return visitor.visitChildren(self)




    def statement(self):

        localctx = XPathParser.StatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 0, self.RULE_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 32
            self.innerStatement()
            self.state = 33
            self.match(XPathParser.EOF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class InnerStatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def childSelector(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(XPathParser.ChildSelectorContext)
            else:
                return self.getTypedRuleContext(XPathParser.ChildSelectorContext,i)


        def rootSelector(self):
            return self.getTypedRuleContext(XPathParser.RootSelectorContext,0)


        def rootDescendantSelector(self):
            return self.getTypedRuleContext(XPathParser.RootDescendantSelectorContext,0)


        def indexSelector(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(XPathParser.IndexSelectorContext)
            else:
                return self.getTypedRuleContext(XPathParser.IndexSelectorContext,i)


        def SLASH(self, i:int=None):
            if i is None:
                return self.getTokens(XPathParser.SLASH)
            else:
                return self.getToken(XPathParser.SLASH, i)

        def descendantSelector(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(XPathParser.DescendantSelectorContext)
            else:
                return self.getTypedRuleContext(XPathParser.DescendantSelectorContext,i)


        def getRuleIndex(self):
            return XPathParser.RULE_innerStatement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInnerStatement" ):
                listener.enterInnerStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInnerStatement" ):
                listener.exitInnerStatement(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitInnerStatement" ):
                return visitor.visitInnerStatement(self)
            else:
                return visitor.visitChildren(self)




    def innerStatement(self):

        localctx = XPathParser.InnerStatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2, self.RULE_innerStatement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 38
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.T__3, XPathParser.ASTERISK, XPathParser.ATTRIBUTE, XPathParser.IDENTIFIER]:
                self.state = 35
                self.childSelector()
                pass
            elif token in [XPathParser.SLASH]:
                self.state = 36
                self.rootSelector()
                pass
            elif token in [XPathParser.T__0]:
                self.state = 37
                self.rootDescendantSelector()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 47
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << XPathParser.T__0) | (1 << XPathParser.T__1) | (1 << XPathParser.SLASH))) != 0):
                self.state = 45
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [XPathParser.T__1]:
                    self.state = 40
                    self.indexSelector()
                    pass
                elif token in [XPathParser.SLASH]:
                    self.state = 41
                    self.match(XPathParser.SLASH)
                    self.state = 42
                    self.childSelector()
                    pass
                elif token in [XPathParser.T__0]:
                    self.state = 43
                    self.match(XPathParser.T__0)

                    self.state = 44
                    self.descendantSelector()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 49
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ChildSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ident = None # Token
            self.attr = None # Token
            self.allsel = None # AllSelectContext

        def IDENTIFIER(self):
            return self.getToken(XPathParser.IDENTIFIER, 0)

        def ATTRIBUTE(self):
            return self.getToken(XPathParser.ATTRIBUTE, 0)

        def allSelect(self):
            return self.getTypedRuleContext(XPathParser.AllSelectContext,0)


        def booleanSelector(self):
            return self.getTypedRuleContext(XPathParser.BooleanSelectorContext,0)


        def getRuleIndex(self):
            return XPathParser.RULE_childSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChildSelector" ):
                listener.enterChildSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChildSelector" ):
                listener.exitChildSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitChildSelector" ):
                return visitor.visitChildSelector(self)
            else:
                return visitor.visitChildren(self)




    def childSelector(self):

        localctx = XPathParser.ChildSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 4, self.RULE_childSelector)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 53
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.IDENTIFIER]:
                self.state = 50
                localctx.ident = self.match(XPathParser.IDENTIFIER)
                pass
            elif token in [XPathParser.ATTRIBUTE]:
                self.state = 51
                localctx.attr = self.match(XPathParser.ATTRIBUTE)
                pass
            elif token in [XPathParser.T__3, XPathParser.ASTERISK]:
                self.state = 52
                localctx.allsel = self.allSelect()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 56
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,4,self._ctx)
            if la_ == 1:
                self.state = 55
                self.booleanSelector()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RootSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ident = None # Token
            self.attr = None # Token
            self.allsel = None # AllSelectContext

        def SLASH(self):
            return self.getToken(XPathParser.SLASH, 0)

        def IDENTIFIER(self):
            return self.getToken(XPathParser.IDENTIFIER, 0)

        def ATTRIBUTE(self):
            return self.getToken(XPathParser.ATTRIBUTE, 0)

        def allSelect(self):
            return self.getTypedRuleContext(XPathParser.AllSelectContext,0)


        def booleanSelector(self):
            return self.getTypedRuleContext(XPathParser.BooleanSelectorContext,0)


        def getRuleIndex(self):
            return XPathParser.RULE_rootSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRootSelector" ):
                listener.enterRootSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRootSelector" ):
                listener.exitRootSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitRootSelector" ):
                return visitor.visitRootSelector(self)
            else:
                return visitor.visitChildren(self)




    def rootSelector(self):

        localctx = XPathParser.RootSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 6, self.RULE_rootSelector)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 58
            self.match(XPathParser.SLASH)
            self.state = 62
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.IDENTIFIER]:
                self.state = 59
                localctx.ident = self.match(XPathParser.IDENTIFIER)
                pass
            elif token in [XPathParser.ATTRIBUTE]:
                self.state = 60
                localctx.attr = self.match(XPathParser.ATTRIBUTE)
                pass
            elif token in [XPathParser.T__3, XPathParser.ASTERISK]:
                self.state = 61
                localctx.allsel = self.allSelect()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 65
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,6,self._ctx)
            if la_ == 1:
                self.state = 64
                self.booleanSelector()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class RootDescendantSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ident = None # Token
            self.attr = None # Token
            self.allsel = None # AllSelectContext

        def IDENTIFIER(self):
            return self.getToken(XPathParser.IDENTIFIER, 0)

        def ATTRIBUTE(self):
            return self.getToken(XPathParser.ATTRIBUTE, 0)

        def allSelect(self):
            return self.getTypedRuleContext(XPathParser.AllSelectContext,0)


        def booleanSelector(self):
            return self.getTypedRuleContext(XPathParser.BooleanSelectorContext,0)


        def getRuleIndex(self):
            return XPathParser.RULE_rootDescendantSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRootDescendantSelector" ):
                listener.enterRootDescendantSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRootDescendantSelector" ):
                listener.exitRootDescendantSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitRootDescendantSelector" ):
                return visitor.visitRootDescendantSelector(self)
            else:
                return visitor.visitChildren(self)




    def rootDescendantSelector(self):

        localctx = XPathParser.RootDescendantSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 8, self.RULE_rootDescendantSelector)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 67
            self.match(XPathParser.T__0)
            self.state = 71
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.IDENTIFIER]:
                self.state = 68
                localctx.ident = self.match(XPathParser.IDENTIFIER)
                pass
            elif token in [XPathParser.ATTRIBUTE]:
                self.state = 69
                localctx.attr = self.match(XPathParser.ATTRIBUTE)
                pass
            elif token in [XPathParser.T__3, XPathParser.ASTERISK]:
                self.state = 70
                localctx.allsel = self.allSelect()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 74
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,8,self._ctx)
            if la_ == 1:
                self.state = 73
                self.booleanSelector()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DescendantSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ident = None # Token
            self.attr = None # Token
            self.allsel = None # AllSelectContext

        def IDENTIFIER(self):
            return self.getToken(XPathParser.IDENTIFIER, 0)

        def ATTRIBUTE(self):
            return self.getToken(XPathParser.ATTRIBUTE, 0)

        def allSelect(self):
            return self.getTypedRuleContext(XPathParser.AllSelectContext,0)


        def booleanSelector(self):
            return self.getTypedRuleContext(XPathParser.BooleanSelectorContext,0)


        def getRuleIndex(self):
            return XPathParser.RULE_descendantSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDescendantSelector" ):
                listener.enterDescendantSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDescendantSelector" ):
                listener.exitDescendantSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitDescendantSelector" ):
                return visitor.visitDescendantSelector(self)
            else:
                return visitor.visitChildren(self)




    def descendantSelector(self):

        localctx = XPathParser.DescendantSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 10, self.RULE_descendantSelector)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 79
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.IDENTIFIER]:
                self.state = 76
                localctx.ident = self.match(XPathParser.IDENTIFIER)
                pass
            elif token in [XPathParser.ATTRIBUTE]:
                self.state = 77
                localctx.attr = self.match(XPathParser.ATTRIBUTE)
                pass
            elif token in [XPathParser.T__3, XPathParser.ASTERISK]:
                self.state = 78
                localctx.allsel = self.allSelect()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 82
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,10,self._ctx)
            if la_ == 1:
                self.state = 81
                self.booleanSelector()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BooleanSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.left = None # InnerStatementContext
            self.op = None # ComparisonOperatorContext
            self.rlit = None # LiteralContext
            self.stmt = None # InnerStatementContext
            self.llit = None # LiteralContext

        def innerStatement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(XPathParser.InnerStatementContext)
            else:
                return self.getTypedRuleContext(XPathParser.InnerStatementContext,i)


        def comparisonOperator(self):
            return self.getTypedRuleContext(XPathParser.ComparisonOperatorContext,0)


        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(XPathParser.LiteralContext)
            else:
                return self.getTypedRuleContext(XPathParser.LiteralContext,i)


        def getRuleIndex(self):
            return XPathParser.RULE_booleanSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBooleanSelector" ):
                listener.enterBooleanSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBooleanSelector" ):
                listener.exitBooleanSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitBooleanSelector" ):
                return visitor.visitBooleanSelector(self)
            else:
                return visitor.visitChildren(self)




    def booleanSelector(self):

        localctx = XPathParser.BooleanSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 12, self.RULE_booleanSelector)
        self._la = 0 # Token type
        try:
            self.state = 104
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,14,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 84
                self.match(XPathParser.T__1)

                self.state = 85
                localctx.left = self.innerStatement()
                self.state = 91
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << XPathParser.EQ) | (1 << XPathParser.NEQ) | (1 << XPathParser.NEQJ) | (1 << XPathParser.LT) | (1 << XPathParser.LTE) | (1 << XPathParser.GT) | (1 << XPathParser.GTE))) != 0):
                    self.state = 86
                    localctx.op = self.comparisonOperator()
                    self.state = 89
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [XPathParser.MINUS, XPathParser.TRUE, XPathParser.FALSE, XPathParser.NULL, XPathParser.STRING, XPathParser.INTEGER_VALUE, XPathParser.DECIMAL_VALUE]:
                        self.state = 87
                        localctx.rlit = self.literal()
                        pass
                    elif token in [XPathParser.T__0, XPathParser.T__3, XPathParser.ASTERISK, XPathParser.SLASH, XPathParser.ATTRIBUTE, XPathParser.IDENTIFIER]:
                        self.state = 88
                        localctx.stmt = self.innerStatement()
                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 93
                self.match(XPathParser.T__2)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 95
                self.match(XPathParser.T__1)
                self.state = 96
                localctx.llit = self.literal()
                self.state = 97
                localctx.op = self.comparisonOperator()
                self.state = 100
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [XPathParser.MINUS, XPathParser.TRUE, XPathParser.FALSE, XPathParser.NULL, XPathParser.STRING, XPathParser.INTEGER_VALUE, XPathParser.DECIMAL_VALUE]:
                    self.state = 98
                    localctx.rlit = self.literal()
                    pass
                elif token in [XPathParser.T__0, XPathParser.T__3, XPathParser.ASTERISK, XPathParser.SLASH, XPathParser.ATTRIBUTE, XPathParser.IDENTIFIER]:
                    self.state = 99
                    localctx.stmt = self.innerStatement()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 102
                self.match(XPathParser.T__2)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndexSelectorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.index = None # Token

        def INTEGER_VALUE(self):
            return self.getToken(XPathParser.INTEGER_VALUE, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_indexSelector

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexSelector" ):
                listener.enterIndexSelector(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexSelector" ):
                listener.exitIndexSelector(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitIndexSelector" ):
                return visitor.visitIndexSelector(self)
            else:
                return visitor.visitChildren(self)




    def indexSelector(self):

        localctx = XPathParser.IndexSelectorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 14, self.RULE_indexSelector)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 106
            self.match(XPathParser.T__1)
            self.state = 107
            localctx.index = self.match(XPathParser.INTEGER_VALUE)
            self.state = 108
            self.match(XPathParser.T__2)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AllSelectContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def allAttributes(self):
            return self.getTypedRuleContext(XPathParser.AllAttributesContext,0)


        def allNodes(self):
            return self.getTypedRuleContext(XPathParser.AllNodesContext,0)


        def getRuleIndex(self):
            return XPathParser.RULE_allSelect

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllSelect" ):
                listener.enterAllSelect(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllSelect" ):
                listener.exitAllSelect(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitAllSelect" ):
                return visitor.visitAllSelect(self)
            else:
                return visitor.visitChildren(self)




    def allSelect(self):

        localctx = XPathParser.AllSelectContext(self, self._ctx, self.state)
        self.enterRule(localctx, 16, self.RULE_allSelect)
        try:
            self.state = 112
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.T__3]:
                self.enterOuterAlt(localctx, 1)
                self.state = 110
                self.allAttributes()
                pass
            elif token in [XPathParser.ASTERISK]:
                self.enterOuterAlt(localctx, 2)
                self.state = 111
                self.allNodes()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AllNodesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ASTERISK(self):
            return self.getToken(XPathParser.ASTERISK, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_allNodes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllNodes" ):
                listener.enterAllNodes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllNodes" ):
                listener.exitAllNodes(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitAllNodes" ):
                return visitor.visitAllNodes(self)
            else:
                return visitor.visitChildren(self)




    def allNodes(self):

        localctx = XPathParser.AllNodesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 18, self.RULE_allNodes)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 114
            self.match(XPathParser.ASTERISK)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AllAttributesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return XPathParser.RULE_allAttributes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllAttributes" ):
                listener.enterAllAttributes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllAttributes" ):
                listener.exitAllAttributes(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitAllAttributes" ):
                return visitor.visitAllAttributes(self)
            else:
                return visitor.visitChildren(self)




    def allAttributes(self):

        localctx = XPathParser.AllAttributesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 20, self.RULE_allAttributes)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 116
            self.match(XPathParser.T__3)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ComparisonOperatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EQ(self):
            return self.getToken(XPathParser.EQ, 0)

        def NEQ(self):
            return self.getToken(XPathParser.NEQ, 0)

        def NEQJ(self):
            return self.getToken(XPathParser.NEQJ, 0)

        def LT(self):
            return self.getToken(XPathParser.LT, 0)

        def LTE(self):
            return self.getToken(XPathParser.LTE, 0)

        def GT(self):
            return self.getToken(XPathParser.GT, 0)

        def GTE(self):
            return self.getToken(XPathParser.GTE, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_comparisonOperator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComparisonOperator" ):
                listener.enterComparisonOperator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComparisonOperator" ):
                listener.exitComparisonOperator(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitComparisonOperator" ):
                return visitor.visitComparisonOperator(self)
            else:
                return visitor.visitChildren(self)




    def comparisonOperator(self):

        localctx = XPathParser.ComparisonOperatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 22, self.RULE_comparisonOperator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 118
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << XPathParser.EQ) | (1 << XPathParser.NEQ) | (1 << XPathParser.NEQJ) | (1 << XPathParser.LT) | (1 << XPathParser.LTE) | (1 << XPathParser.GT) | (1 << XPathParser.GTE))) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BooleanValueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUE(self):
            return self.getToken(XPathParser.TRUE, 0)

        def FALSE(self):
            return self.getToken(XPathParser.FALSE, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_booleanValue

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBooleanValue" ):
                listener.enterBooleanValue(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBooleanValue" ):
                listener.exitBooleanValue(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitBooleanValue" ):
                return visitor.visitBooleanValue(self)
            else:
                return visitor.visitChildren(self)




    def booleanValue(self):

        localctx = XPathParser.BooleanValueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 24, self.RULE_booleanValue)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 120
            _la = self._input.LA(1)
            if not(_la==XPathParser.TRUE or _la==XPathParser.FALSE):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AllExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ASTERISK(self):
            return self.getToken(XPathParser.ASTERISK, 0)

        def getRuleIndex(self):
            return XPathParser.RULE_allExpression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllExpression" ):
                listener.enterAllExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllExpression" ):
                listener.exitAllExpression(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitAllExpression" ):
                return visitor.visitAllExpression(self)
            else:
                return visitor.visitChildren(self)




    def allExpression(self):

        localctx = XPathParser.AllExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 26, self.RULE_allExpression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 122
            self.match(XPathParser.ASTERISK)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return XPathParser.RULE_literal

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class NullLiteralContext(LiteralContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.LiteralContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def NULL(self):
            return self.getToken(XPathParser.NULL, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNullLiteral" ):
                listener.enterNullLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNullLiteral" ):
                listener.exitNullLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitNullLiteral" ):
                return visitor.visitNullLiteral(self)
            else:
                return visitor.visitChildren(self)


    class FalseLiteralContext(LiteralContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.LiteralContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def FALSE(self):
            return self.getToken(XPathParser.FALSE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFalseLiteral" ):
                listener.enterFalseLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFalseLiteral" ):
                listener.exitFalseLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitFalseLiteral" ):
                return visitor.visitFalseLiteral(self)
            else:
                return visitor.visitChildren(self)


    class StringLiteralContext(LiteralContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.LiteralContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def STRING(self):
            return self.getToken(XPathParser.STRING, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStringLiteral" ):
                listener.enterStringLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStringLiteral" ):
                listener.exitStringLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitStringLiteral" ):
                return visitor.visitStringLiteral(self)
            else:
                return visitor.visitChildren(self)


    class TrueLiteralContext(LiteralContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.LiteralContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def TRUE(self):
            return self.getToken(XPathParser.TRUE, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrueLiteral" ):
                listener.enterTrueLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrueLiteral" ):
                listener.exitTrueLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitTrueLiteral" ):
                return visitor.visitTrueLiteral(self)
            else:
                return visitor.visitChildren(self)


    class NumberLiteralContext(LiteralContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.LiteralContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def number(self):
            return self.getTypedRuleContext(XPathParser.NumberContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumberLiteral" ):
                listener.enterNumberLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumberLiteral" ):
                listener.exitNumberLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitNumberLiteral" ):
                return visitor.visitNumberLiteral(self)
            else:
                return visitor.visitChildren(self)



    def literal(self):

        localctx = XPathParser.LiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 28, self.RULE_literal)
        try:
            self.state = 129
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [XPathParser.STRING]:
                localctx = XPathParser.StringLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 124
                self.match(XPathParser.STRING)
                pass
            elif token in [XPathParser.MINUS, XPathParser.INTEGER_VALUE, XPathParser.DECIMAL_VALUE]:
                localctx = XPathParser.NumberLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 125
                self.number()
                pass
            elif token in [XPathParser.TRUE]:
                localctx = XPathParser.TrueLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 126
                self.match(XPathParser.TRUE)
                pass
            elif token in [XPathParser.FALSE]:
                localctx = XPathParser.FalseLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 4)
                self.state = 127
                self.match(XPathParser.FALSE)
                pass
            elif token in [XPathParser.NULL]:
                localctx = XPathParser.NullLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 5)
                self.state = 128
                self.match(XPathParser.NULL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class NumberContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return XPathParser.RULE_number

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class DecimalLiteralContext(NumberContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.NumberContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def DECIMAL_VALUE(self):
            return self.getToken(XPathParser.DECIMAL_VALUE, 0)
        def MINUS(self):
            return self.getToken(XPathParser.MINUS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDecimalLiteral" ):
                listener.enterDecimalLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDecimalLiteral" ):
                listener.exitDecimalLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitDecimalLiteral" ):
                return visitor.visitDecimalLiteral(self)
            else:
                return visitor.visitChildren(self)


    class IntegerLiteralContext(NumberContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a XPathParser.NumberContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def INTEGER_VALUE(self):
            return self.getToken(XPathParser.INTEGER_VALUE, 0)
        def MINUS(self):
            return self.getToken(XPathParser.MINUS, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIntegerLiteral" ):
                listener.enterIntegerLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIntegerLiteral" ):
                listener.exitIntegerLiteral(self)

        def accept(self, visitor:ParseTreeVisitor):
            if hasattr( visitor, "visitIntegerLiteral" ):
                return visitor.visitIntegerLiteral(self)
            else:
                return visitor.visitChildren(self)



    def number(self):

        localctx = XPathParser.NumberContext(self, self._ctx, self.state)
        self.enterRule(localctx, 30, self.RULE_number)
        self._la = 0 # Token type
        try:
            self.state = 139
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,19,self._ctx)
            if la_ == 1:
                localctx = XPathParser.DecimalLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 132
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==XPathParser.MINUS:
                    self.state = 131
                    self.match(XPathParser.MINUS)


                self.state = 134
                self.match(XPathParser.DECIMAL_VALUE)
                pass

            elif la_ == 2:
                localctx = XPathParser.IntegerLiteralContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 136
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==XPathParser.MINUS:
                    self.state = 135
                    self.match(XPathParser.MINUS)


                self.state = 138
                self.match(XPathParser.INTEGER_VALUE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx