All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.at.asitplus.jsonpath.generated.JsonPathParser.kt Maven / Gradle / Ivy

// Generated from /Users/runner/work/jsonpath4k/jsonpath4k/jsonpath4k/src/commonMain/resources/grammar/JsonPathParser.g4 by ANTLR 4.13.1
package at.asitplus.jsonpath.generated

import com.strumenta.antlrkotlin.runtime.JsName
import org.antlr.v4.kotlinruntime.*
import org.antlr.v4.kotlinruntime.atn.*
import org.antlr.v4.kotlinruntime.atn.ATN.Companion.INVALID_ALT_NUMBER
import org.antlr.v4.kotlinruntime.dfa.*
import org.antlr.v4.kotlinruntime.misc.*
import org.antlr.v4.kotlinruntime.tree.*
import kotlin.jvm.JvmField

@Suppress(
    // This is required as we are using a custom JsName alias that is not recognized by the IDE.
    // No name clashes will happen tho.
    "JS_NAME_CLASH",
    "UNUSED_VARIABLE",
    "ClassName",
    "FunctionName",
    "LocalVariableName",
    "ConstPropertyName",
    "ConvertSecondaryConstructorToPrimary",
    "CanBeVal",
)
public open class JsonPathParser(input: TokenStream) : Parser(input) {
    private companion object {
        init {
            RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.runtimeVersion)
        }

        private const val SERIALIZED_ATN: String =
            "\u0004\u0001\u001e\u0159\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002\u0008\u0007\u0008\u0002\u0009\u0007\u0009\u0002\u000a\u0007\u000a\u0002\u000b\u0007\u000b\u0002\u000c\u0007\u000c\u0002\u000d\u0007\u000d\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002\u0020\u0007\u0020\u0002\u0021\u0007\u0021\u0002\u0022\u0007\u0022\u0002\u0023\u0007\u0023\u0002\u0024\u0007\u0024\u0002\u0025\u0007\u0025\u0002\u0026\u0007\u0026\u0002\u0027\u0007\u0027\u0002\u0028\u0007\u0028\u0002\u0029\u0007\u0029\u0002\u002a\u0007\u002a\u0002\u002b\u0007\u002b\u0002\u002c\u0007\u002c\u0002\u002d\u0007\u002d\u0002\u002e\u0007\u002e\u0002\u002f\u0007\u002f\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0067\u0008\u0001\u000a\u0001\u000c\u0001\u006a\u0009\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u0071\u0008\u0002\u0001\u0003\u0001\u0003\u0003\u0003\u0075\u0008\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004\u007a\u0008\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0005\u0005\u0084\u0008\u0005\u000a\u0005\u000c\u0005\u0087\u0009\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u0091\u0008\u0006\u0001\u0007\u0001\u0007\u0001\u0008\u0001\u0008\u0001\u0009\u0001\u0009\u0001\u0009\u0003\u0009\u009a\u0008\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0003\u0009\u00a1\u0008\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0001\u0009\u0003\u0009\u00a7\u0008\u0009\u0003\u0009\u00a9\u0008\u0009\u0001\u000a\u0001\u000a\u0001\u000b\u0001\u000b\u0001\u000c\u0001\u000c\u0001\u000d\u0001\u000d\u0003\u000d\u00b3\u0008\u000d\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0003\u000f\u00ba\u0008\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0005\u0012\u00c5\u0008\u0012\u000a\u0012\u000c\u0012\u00c8\u0009\u0012\u0001\u0013\u0001\u0013\u0003\u0013\u00cc\u0008\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u00d4\u0008\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u00e6\u0008\u0018\u000a\u0018\u000c\u0018\u00e9\u0009\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019\u00f1\u0008\u0019\u000a\u0019\u000c\u0019\u00f4\u0009\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u00f9\u0008\u001a\u0001\u001b\u0001\u001b\u0003\u001b\u00fd\u0008\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0003\u001c\u0107\u0008\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u010b\u0008\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u0020\u0001\u0020\u0001\u0020\u0001\u0020\u0001\u0020\u0001\u0020\u0003\u0020\u011d\u0008\u0020\u0001\u0021\u0001\u0021\u0001\u0021\u0003\u0021\u0122\u0008\u0021\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0005\u0022\u012d\u0008\u0022\u000a\u0022\u000c\u0022\u0130\u0009\u0022\u0003\u0022\u0132\u0008\u0022\u0001\u0022\u0001\u0022\u0001\u0022\u0001\u0023\u0001\u0023\u0001\u0023\u0001\u0023\u0003\u0023\u013b\u0008\u0023\u0001\u0024\u0001\u0024\u0001\u0025\u0001\u0025\u0001\u0026\u0005\u0026\u0142\u0008\u0026\u000a\u0026\u000c\u0026\u0145\u0009\u0026\u0001\u0027\u0001\u0027\u0001\u0028\u0001\u0028\u0001\u0029\u0001\u0029\u0001\u002a\u0001\u002a\u0001\u002b\u0001\u002b\u0001\u002c\u0001\u002c\u0001\u002d\u0001\u002d\u0001\u002e\u0001\u002e\u0001\u002f\u0001\u002f\u0001\u002f\u0000\u0000\u0030\u0000\u0002\u0004\u0006\u0008\u000a\u000c\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e\u0020\u0022\u0024\u0026\u0028\u002a\u002c\u002e\u0030\u0032\u0034\u0036\u0038\u003a\u003c\u003e\u0040\u0042\u0044\u0046\u0048\u004a\u004c\u004e\u0050\u0052\u0054\u0056\u0058\u005a\u005c\u005e\u0000\u0001\u0001\u0000\u0011\u0016\u0150\u0000\u0060\u0001\u0000\u0000\u0000\u0002\u0068\u0001\u0000\u0000\u0000\u0004\u0070\u0001\u0000\u0000\u0000\u0006\u0074\u0001\u0000\u0000\u0000\u0008\u0079\u0001\u0000\u0000\u0000\u000a\u007b\u0001\u0000\u0000\u0000\u000c\u0090\u0001\u0000\u0000\u0000\u000e\u0092\u0001\u0000\u0000\u0000\u0010\u0094\u0001\u0000\u0000\u0000\u0012\u0099\u0001\u0000\u0000\u0000\u0014\u00aa\u0001\u0000\u0000\u0000\u0016\u00ac\u0001\u0000\u0000\u0000\u0018\u00ae\u0001\u0000\u0000\u0000\u001a\u00b2\u0001\u0000\u0000\u0000\u001c\u00b4\u0001\u0000\u0000\u0000\u001e\u00b9\u0001\u0000\u0000\u0000\u0020\u00bb\u0001\u0000\u0000\u0000\u0022\u00be\u0001\u0000\u0000\u0000\u0024\u00c6\u0001\u0000\u0000\u0000\u0026\u00cb\u0001\u0000\u0000\u0000\u0028\u00d3\u0001\u0000\u0000\u0000\u002a\u00d5\u0001\u0000\u0000\u0000\u002c\u00d9\u0001\u0000\u0000\u0000\u002e\u00dd\u0001\u0000\u0000\u0000\u0030\u00df\u0001\u0000\u0000\u0000\u0032\u00ea\u0001\u0000\u0000\u0000\u0034\u00f8\u0001\u0000\u0000\u0000\u0036\u00fc\u0001\u0000\u0000\u0000\u0038\u0106\u0001\u0000\u0000\u0000\u003a\u010c\u0001\u0000\u0000\u0000\u003c\u0112\u0001\u0000\u0000\u0000\u003e\u0114\u0001\u0000\u0000\u0000\u0040\u011c\u0001\u0000\u0000\u0000\u0042\u0121\u0001\u0000\u0000\u0000\u0044\u0123\u0001\u0000\u0000\u0000\u0046\u013a\u0001\u0000\u0000\u0000\u0048\u013c\u0001\u0000\u0000\u0000\u004a\u013e\u0001\u0000\u0000\u0000\u004c\u0143\u0001\u0000\u0000\u0000\u004e\u0146\u0001\u0000\u0000\u0000\u0050\u0148\u0001\u0000\u0000\u0000\u0052\u014a\u0001\u0000\u0000\u0000\u0054\u014c\u0001\u0000\u0000\u0000\u0056\u014e\u0001\u0000\u0000\u0000\u0058\u0150\u0001\u0000\u0000\u0000\u005a\u0152\u0001\u0000\u0000\u0000\u005c\u0154\u0001\u0000\u0000\u0000\u005e\u0156\u0001\u0000\u0000\u0000\u0060\u0061\u0003\u0048\u0024\u0000\u0061\u0062\u0003\u0002\u0001\u0000\u0062\u0001\u0001\u0000\u0000\u0000\u0063\u0064\u0003\u004c\u0026\u0000\u0064\u0065\u0003\u0004\u0002\u0000\u0065\u0067\u0001\u0000\u0000\u0000\u0066\u0063\u0001\u0000\u0000\u0000\u0067\u006a\u0001\u0000\u0000\u0000\u0068\u0066\u0001\u0000\u0000\u0000\u0068\u0069\u0001\u0000\u0000\u0000\u0069\u0003\u0001\u0000\u0000\u0000\u006a\u0068\u0001\u0000\u0000\u0000\u006b\u0071\u0003\u000a\u0005\u0000\u006c\u006d\u0005\u0005\u0000\u0000\u006d\u0071\u0003\u0006\u0003\u0000\u006e\u006f\u0005\u0004\u0000\u0000\u006f\u0071\u0003\u0008\u0004\u0000\u0070\u006b\u0001\u0000\u0000\u0000\u0070\u006c\u0001\u0000\u0000\u0000\u0070\u006e\u0001\u0000\u0000\u0000\u0071\u0005\u0001\u0000\u0000\u0000\u0072\u0075\u0003\u004e\u0027\u0000\u0073\u0075\u0003\u0050\u0028\u0000\u0074\u0072\u0001\u0000\u0000\u0000\u0074\u0073\u0001\u0000\u0000\u0000\u0075\u0007\u0001\u0000\u0000\u0000\u0076\u007a\u0003\u000a\u0005\u0000\u0077\u007a\u0003\u004e\u0027\u0000\u0078\u007a\u0003\u0050\u0028\u0000\u0079\u0076\u0001\u0000\u0000\u0000\u0079\u0077\u0001\u0000\u0000\u0000\u0079\u0078\u0001\u0000\u0000\u0000\u007a\u0009\u0001\u0000\u0000\u0000\u007b\u007c\u0005\u0009\u0000\u0000\u007c\u007d\u0003\u004c\u0026\u0000\u007d\u0085\u0003\u000c\u0006\u0000\u007e\u007f\u0003\u004c\u0026\u0000\u007f\u0080\u0005\u0008\u0000\u0000\u0080\u0081\u0003\u004c\u0026\u0000\u0081\u0082\u0003\u000c\u0006\u0000\u0082\u0084\u0001\u0000\u0000\u0000\u0083\u007e\u0001\u0000\u0000\u0000\u0084\u0087\u0001\u0000\u0000\u0000\u0085\u0083\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087\u0085\u0001\u0000\u0000\u0000\u0088\u0089\u0003\u004c\u0026\u0000\u0089\u008a\u0005\u000a\u0000\u0000\u008a\u000b\u0001\u0000\u0000\u0000\u008b\u0091\u0003\u000e\u0007\u0000\u008c\u0091\u0003\u004e\u0027\u0000\u008d\u0091\u0003\u0012\u0009\u0000\u008e\u0091\u0003\u0010\u0008\u0000\u008f\u0091\u0003\u002c\u0016\u0000\u0090\u008b\u0001\u0000\u0000\u0000\u0090\u008c\u0001\u0000\u0000\u0000\u0090\u008d\u0001\u0000\u0000\u0000\u0090\u008e\u0001\u0000\u0000\u0000\u0090\u008f\u0001\u0000\u0000\u0000\u0091\u000d\u0001\u0000\u0000\u0000\u0092\u0093\u0003\u0052\u0029\u0000\u0093\u000f\u0001\u0000\u0000\u0000\u0094\u0095\u0003\u0056\u002b\u0000\u0095\u0011\u0001\u0000\u0000\u0000\u0096\u0097\u0003\u0014\u000a\u0000\u0097\u0098\u0003\u004c\u0026\u0000\u0098\u009a\u0001\u0000\u0000\u0000\u0099\u0096\u0001\u0000\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u009b\u0001\u0000\u0000\u0000\u009b\u009c\u0005\u0007\u0000\u0000\u009c\u00a0\u0003\u004c\u0026\u0000\u009d\u009e\u0003\u0016\u000b\u0000\u009e\u009f\u0003\u004c\u0026\u0000\u009f\u00a1\u0001\u0000\u0000\u0000\u00a0\u009d\u0001\u0000\u0000\u0000\u00a0\u00a1\u0001\u0000\u0000\u0000\u00a1\u00a8\u0001\u0000\u0000\u0000\u00a2\u00a6\u0005\u0007\u0000\u0000\u00a3\u00a4\u0003\u004c\u0026\u0000\u00a4\u00a5\u0003\u0018\u000c\u0000\u00a5\u00a7\u0001\u0000\u0000\u0000\u00a6\u00a3\u0001\u0000\u0000\u0000\u00a6\u00a7\u0001\u0000\u0000\u0000\u00a7\u00a9\u0001\u0000\u0000\u0000\u00a8\u00a2\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u0013\u0001\u0000\u0000\u0000\u00aa\u00ab\u0003\u0056\u002b\u0000\u00ab\u0015\u0001\u0000\u0000\u0000\u00ac\u00ad\u0003\u0056\u002b\u0000\u00ad\u0017\u0001\u0000\u0000\u0000\u00ae\u00af\u0003\u0056\u002b\u0000\u00af\u0019\u0001\u0000\u0000\u0000\u00b0\u00b3\u0003\u001c\u000e\u0000\u00b1\u00b3\u0003\u0000\u0000\u0000\u00b2\u00b0\u0001\u0000\u0000\u0000\u00b2\u00b1\u0001\u0000\u0000\u0000\u00b3\u001b\u0001\u0000\u0000\u0000\u00b4\u00b5\u0003\u004a\u0025\u0000\u00b5\u00b6\u0003\u0002\u0001\u0000\u00b6\u001d\u0001\u0000\u0000\u0000\u00b7\u00ba\u0003\u0020\u0010\u0000\u00b8\u00ba\u0003\u0022\u0011\u0000\u00b9\u00b7\u0001\u0000\u0000\u0000\u00b9\u00b8\u0001\u0000\u0000\u0000\u00ba\u001f\u0001\u0000\u0000\u0000\u00bb\u00bc\u0003\u004a\u0025\u0000\u00bc\u00bd\u0003\u0024\u0012\u0000\u00bd\u0021\u0001\u0000\u0000\u0000\u00be\u00bf\u0003\u0048\u0024\u0000\u00bf\u00c0\u0003\u0024\u0012\u0000\u00c0\u0023\u0001\u0000\u0000\u0000\u00c1\u00c2\u0003\u004c\u0026\u0000\u00c2\u00c3\u0003\u0026\u0013\u0000\u00c3\u00c5\u0001\u0000\u0000\u0000\u00c4\u00c1\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c6\u00c7\u0001\u0000\u0000\u0000\u00c7\u0025\u0001\u0000\u0000\u0000\u00c8\u00c6\u0001\u0000\u0000\u0000\u00c9\u00cc\u0003\u0028\u0014\u0000\u00ca\u00cc\u0003\u002a\u0015\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb\u00ca\u0001\u0000\u0000\u0000\u00cc\u0027\u0001\u0000\u0000\u0000\u00cd\u00ce\u0005\u0009\u0000\u0000\u00ce\u00cf\u0003\u000e\u0007\u0000\u00cf\u00d0\u0005\u000a\u0000\u0000\u00d0\u00d4\u0001\u0000\u0000\u0000\u00d1\u00d2\u0005\u0005\u0000\u0000\u00d2\u00d4\u0003\u0050\u0028\u0000\u00d3\u00cd\u0001\u0000\u0000\u0000\u00d3\u00d1\u0001\u0000\u0000\u0000\u00d4\u0029\u0001\u0000\u0000\u0000\u00d5\u00d6\u0005\u0009\u0000\u0000\u00d6\u00d7\u0003\u0010\u0008\u0000\u00d7\u00d8\u0005\u000a\u0000\u0000\u00d8\u002b\u0001\u0000\u0000\u0000\u00d9\u00da\u0005\u000b\u0000\u0000\u00da\u00db\u0003\u004c\u0026\u0000\u00db\u00dc\u0003\u002e\u0017\u0000\u00dc\u002d\u0001\u0000\u0000\u0000\u00dd\u00de\u0003\u0030\u0018\u0000\u00de\u002f\u0001\u0000\u0000\u0000\u00df\u00e7\u0003\u0032\u0019\u0000\u00e0\u00e1\u0003\u004c\u0026\u0000\u00e1\u00e2\u0005\u000f\u0000\u0000\u00e2\u00e3\u0003\u004c\u0026\u0000\u00e3\u00e4\u0003\u0032\u0019\u0000\u00e4\u00e6\u0001\u0000\u0000\u0000\u00e5\u00e0\u0001\u0000\u0000\u0000\u00e6\u00e9\u0001\u0000\u0000\u0000\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u0031\u0001\u0000\u0000\u0000\u00e9\u00e7\u0001\u0000\u0000\u0000\u00ea\u00f2\u0003\u0034\u001a\u0000\u00eb\u00ec\u0003\u004c\u0026\u0000\u00ec\u00ed\u0005\u0010\u0000\u0000\u00ed\u00ee\u0003\u004c\u0026\u0000\u00ee\u00ef\u0003\u0034\u001a\u0000\u00ef\u00f1\u0001\u0000\u0000\u0000\u00f0\u00eb\u0001\u0000\u0000\u0000\u00f1\u00f4\u0001\u0000\u0000\u0000\u00f2\u00f0\u0001\u0000\u0000\u0000\u00f2\u00f3\u0001\u0000\u0000\u0000\u00f3\u0033\u0001\u0000\u0000\u0000\u00f4\u00f2\u0001\u0000\u0000\u0000\u00f5\u00f9\u0003\u0036\u001b\u0000\u00f6\u00f9\u0003\u003a\u001d\u0000\u00f7\u00f9\u0003\u0038\u001c\u0000\u00f8\u00f5\u0001\u0000\u0000\u0000\u00f8\u00f6\u0001\u0000\u0000\u0000\u00f8\u00f7\u0001\u0000\u0000\u0000\u00f9\u0035\u0001\u0000\u0000\u0000\u00fa\u00fb\u0005\u000e\u0000\u0000\u00fb\u00fd\u0003\u004c\u0026\u0000\u00fc\u00fa\u0001\u0000\u0000\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005\u000c\u0000\u0000\u00ff\u0100\u0003\u004c\u0026\u0000\u0100\u0101\u0003\u002e\u0017\u0000\u0101\u0102\u0003\u004c\u0026\u0000\u0102\u0103\u0005\u000d\u0000\u0000\u0103\u0037\u0001\u0000\u0000\u0000\u0104\u0105\u0005\u000e\u0000\u0000\u0105\u0107\u0003\u004c\u0026\u0000\u0106\u0104\u0001\u0000\u0000\u0000\u0106\u0107\u0001\u0000\u0000\u0000\u0107\u010a\u0001\u0000\u0000\u0000\u0108\u010b\u0003\u001a\u000d\u0000\u0109\u010b\u0003\u0044\u0022\u0000\u010a\u0108\u0001\u0000\u0000\u0000\u010a\u0109\u0001\u0000\u0000\u0000\u010b\u0039\u0001\u0000\u0000\u0000\u010c\u010d\u0003\u003c\u001e\u0000\u010d\u010e\u0003\u004c\u0026\u0000\u010e\u010f\u0003\u005e\u002f\u0000\u010f\u0110\u0003\u004c\u0026\u0000\u0110\u0111\u0003\u003e\u001f\u0000\u0111\u003b\u0001\u0000\u0000\u0000\u0112\u0113\u0003\u0042\u0021\u0000\u0113\u003d\u0001\u0000\u0000\u0000\u0114\u0115\u0003\u0042\u0021\u0000\u0115\u003f\u0001\u0000\u0000\u0000\u0116\u011d\u0003\u0056\u002b\u0000\u0117\u011d\u0003\u0054\u002a\u0000\u0118\u011d\u0003\u0052\u0029\u0000\u0119\u011d\u0003\u0058\u002c\u0000\u011a\u011d\u0003\u005a\u002d\u0000\u011b\u011d\u0003\u005c\u002e\u0000\u011c\u0116\u0001\u0000\u0000\u0000\u011c\u0117\u0001\u0000\u0000\u0000\u011c\u0118\u0001\u0000\u0000\u0000\u011c\u0119\u0001\u0000\u0000\u0000\u011c\u011a\u0001\u0000\u0000\u0000\u011c\u011b\u0001\u0000\u0000\u0000\u011d\u0041\u0001\u0000\u0000\u0000\u011e\u0122\u0003\u0040\u0020\u0000\u011f\u0122\u0003\u001e\u000f\u0000\u0120\u0122\u0003\u0044\u0022\u0000\u0121\u011e\u0001\u0000\u0000\u0000\u0121\u011f\u0001\u0000\u0000\u0000\u0121\u0120\u0001\u0000\u0000\u0000\u0122\u0043\u0001\u0000\u0000\u0000\u0123\u0124\u0005\u001d\u0000\u0000\u0124\u0125\u0005\u000c\u0000\u0000\u0125\u0131\u0003\u004c\u0026\u0000\u0126\u012e\u0003\u0046\u0023\u0000\u0127\u0128\u0003\u004c\u0026\u0000\u0128\u0129\u0005\u0008\u0000\u0000\u0129\u012a\u0003\u004c\u0026\u0000\u012a\u012b\u0003\u0046\u0023\u0000\u012b\u012d\u0001\u0000\u0000\u0000\u012c\u0127\u0001\u0000\u0000\u0000\u012d\u0130\u0001\u0000\u0000\u0000\u012e\u012c\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f\u0132\u0001\u0000\u0000\u0000\u0130\u012e\u0001\u0000\u0000\u0000\u0131\u0126\u0001\u0000\u0000\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u0133\u0001\u0000\u0000\u0000\u0133\u0134\u0003\u004c\u0026\u0000\u0134\u0135\u0005\u000d\u0000\u0000\u0135\u0045\u0001\u0000\u0000\u0000\u0136\u013b\u0003\u0040\u0020\u0000\u0137\u013b\u0003\u001a\u000d\u0000\u0138\u013b\u0003\u0044\u0022\u0000\u0139\u013b\u0003\u002e\u0017\u0000\u013a\u0136\u0001\u0000\u0000\u0000\u013a\u0137\u0001\u0000\u0000\u0000\u013a\u0138\u0001\u0000\u0000\u0000\u013a\u0139\u0001\u0000\u0000\u0000\u013b\u0047\u0001\u0000\u0000\u0000\u013c\u013d\u0005\u0001\u0000\u0000\u013d\u0049\u0001\u0000\u0000\u0000\u013e\u013f\u0005\u0002\u0000\u0000\u013f\u004b\u0001\u0000\u0000\u0000\u0140\u0142\u0005\u0003\u0000\u0000\u0141\u0140\u0001\u0000\u0000\u0000\u0142\u0145\u0001\u0000\u0000\u0000\u0143\u0141\u0001\u0000\u0000\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u004d\u0001\u0000\u0000\u0000\u0145\u0143\u0001\u0000\u0000\u0000\u0146\u0147\u0005\u0006\u0000\u0000\u0147\u004f\u0001\u0000\u0000\u0000\u0148\u0149\u0005\u001e\u0000\u0000\u0149\u0051\u0001\u0000\u0000\u0000\u014a\u014b\u0005\u0017\u0000\u0000\u014b\u0053\u0001\u0000\u0000\u0000\u014c\u014d\u0005\u001c\u0000\u0000\u014d\u0055\u0001\u0000\u0000\u0000\u014e\u014f\u0005\u001b\u0000\u0000\u014f\u0057\u0001\u0000\u0000\u0000\u0150\u0151\u0005\u0019\u0000\u0000\u0151\u0059\u0001\u0000\u0000\u0000\u0152\u0153\u0005\u001a\u0000\u0000\u0153\u005b\u0001\u0000\u0000\u0000\u0154\u0155\u0005\u0018\u0000\u0000\u0155\u005d\u0001\u0000\u0000\u0000\u0156\u0157\u0007\u0000\u0000\u0000\u0157\u005f\u0001\u0000\u0000\u0000\u001b\u0068\u0070\u0074\u0079\u0085\u0090\u0099\u00a0\u00a6\u00a8\u00b2\u00b9\u00c6\u00cb\u00d3\u00e7\u00f2\u00f8\u00fc\u0106\u010a\u011c\u0121\u012e\u0131\u013a\u0143"

        private val ATN = ATNDeserializer().deserialize(SERIALIZED_ATN.toCharArray())

        private val DECISION_TO_DFA = Array(ATN.numberOfDecisions) {
            DFA(ATN.getDecisionState(it)!!, it)
        }

        private val SHARED_CONTEXT_CACHE = PredictionContextCache()
        private val RULE_NAMES: Array = arrayOf(
            "jsonpath_query", "segments", "segment", "shorthand_segment", 
            "descendant_segment", "bracketed_selection", "selector", "name_selector", 
            "index_selector", "slice_selector", "start", "end", "step", 
            "filter_query", "rel_query", "singular_query", "rel_singular_query", 
            "abs_singular_query", "singular_query_segments", "singular_query_segment", 
            "name_segment", "index_segment", "filter_selector", "logical_expr", 
            "logical_or_expr", "logical_and_expr", "basic_expr", "paren_expr", 
            "test_expr", "comparison_expr", "firstComparable", "secondComparable", 
            "literal", "comparable", "function_expr", "function_argument", 
            "rootIdentifier", "currentNodeIdentifier", "ws", "wildcardSelector", 
            "memberNameShorthand", "stringLiteral", "number_expression", 
            "int_expression", "true_expression", "false_expression", "null_expression", 
            "comparisonOp"
        )

        private val LITERAL_NAMES: Array = arrayOf(
            null, "'\$'", "'@'", null, "'..'", "'.'", null, "':'", "','", 
            null, "']'", "'?'", "'('", "')'", "'!'", "'||'", "'&&'", "'=='", 
            "'!='", "'<'", "'>'", "'<='", "'>='", null, "'null'", "'true'", 
            "'false'"
        )

        private val SYMBOLIC_NAMES: Array = arrayOf(
            null, "ROOT_IDENTIFIER", "CURRENT_NODE_IDENTIFIER", "BLANK", 
            "DESCENDANT_SELECTOR", "SHORTHAND_SELECTOR", "WILDCARD_SELECTOR", 
            "COLON", "COMMA", "SQUARE_BRACKET_OPEN", "SQUARE_BRACKET_CLOSE", 
            "QUESTIONMARK", "BRACKET_OPEN", "BRACKET_CLOSE", "LOGICAL_NOT_OP", 
            "LOGICAL_OR_OP", "LOGICAL_AND_OP", "COMPARISON_OP_EQUALS", "COMPARISON_OP_NOT_EQUALS", 
            "COMPARISON_OP_SMALLER_THAN", "COMPARISON_OP_GREATER_THAN", 
            "COMPARISON_OP_SMALLER_THAN_OR_EQUALS", "COMPARISON_OP_GREATER_THAN_OR_EQUALS", 
            "STRING_LITERAL", "NULL_TOKEN", "TRUE_TOKEN", "FALSE_TOKEN", 
            "INT_TOKEN", "NUMBER_TOKEN", "FUNCTION_NAME", "MEMBER_NAME_SHORTHAND"
        )

        private val VOCABULARY = VocabularyImpl(LITERAL_NAMES, SYMBOLIC_NAMES)

        private val TOKEN_NAMES: Array = Array(SYMBOLIC_NAMES.size) {
            VOCABULARY.getLiteralName(it)
                ?: VOCABULARY.getSymbolicName(it)
                ?: ""
        }
    }

    public object Tokens {
        public const val EOF: Int = -1
        public const val ROOT_IDENTIFIER: Int = 1
        public const val CURRENT_NODE_IDENTIFIER: Int = 2
        public const val BLANK: Int = 3
        public const val DESCENDANT_SELECTOR: Int = 4
        public const val SHORTHAND_SELECTOR: Int = 5
        public const val WILDCARD_SELECTOR: Int = 6
        public const val COLON: Int = 7
        public const val COMMA: Int = 8
        public const val SQUARE_BRACKET_OPEN: Int = 9
        public const val SQUARE_BRACKET_CLOSE: Int = 10
        public const val QUESTIONMARK: Int = 11
        public const val BRACKET_OPEN: Int = 12
        public const val BRACKET_CLOSE: Int = 13
        public const val LOGICAL_NOT_OP: Int = 14
        public const val LOGICAL_OR_OP: Int = 15
        public const val LOGICAL_AND_OP: Int = 16
        public const val COMPARISON_OP_EQUALS: Int = 17
        public const val COMPARISON_OP_NOT_EQUALS: Int = 18
        public const val COMPARISON_OP_SMALLER_THAN: Int = 19
        public const val COMPARISON_OP_GREATER_THAN: Int = 20
        public const val COMPARISON_OP_SMALLER_THAN_OR_EQUALS: Int = 21
        public const val COMPARISON_OP_GREATER_THAN_OR_EQUALS: Int = 22
        public const val STRING_LITERAL: Int = 23
        public const val NULL_TOKEN: Int = 24
        public const val TRUE_TOKEN: Int = 25
        public const val FALSE_TOKEN: Int = 26
        public const val INT_TOKEN: Int = 27
        public const val NUMBER_TOKEN: Int = 28
        public const val FUNCTION_NAME: Int = 29
        public const val MEMBER_NAME_SHORTHAND: Int = 30
    }

    public object Rules {
        public const val Jsonpath_query: Int = 0
        public const val Segments: Int = 1
        public const val Segment: Int = 2
        public const val Shorthand_segment: Int = 3
        public const val Descendant_segment: Int = 4
        public const val Bracketed_selection: Int = 5
        public const val Selector: Int = 6
        public const val Name_selector: Int = 7
        public const val Index_selector: Int = 8
        public const val Slice_selector: Int = 9
        public const val Start: Int = 10
        public const val End: Int = 11
        public const val Step: Int = 12
        public const val Filter_query: Int = 13
        public const val Rel_query: Int = 14
        public const val Singular_query: Int = 15
        public const val Rel_singular_query: Int = 16
        public const val Abs_singular_query: Int = 17
        public const val Singular_query_segments: Int = 18
        public const val Singular_query_segment: Int = 19
        public const val Name_segment: Int = 20
        public const val Index_segment: Int = 21
        public const val Filter_selector: Int = 22
        public const val Logical_expr: Int = 23
        public const val Logical_or_expr: Int = 24
        public const val Logical_and_expr: Int = 25
        public const val Basic_expr: Int = 26
        public const val Paren_expr: Int = 27
        public const val Test_expr: Int = 28
        public const val Comparison_expr: Int = 29
        public const val FirstComparable: Int = 30
        public const val SecondComparable: Int = 31
        public const val Literal: Int = 32
        public const val Comparable: Int = 33
        public const val Function_expr: Int = 34
        public const val Function_argument: Int = 35
        public const val RootIdentifier: Int = 36
        public const val CurrentNodeIdentifier: Int = 37
        public const val Ws: Int = 38
        public const val WildcardSelector: Int = 39
        public const val MemberNameShorthand: Int = 40
        public const val StringLiteral: Int = 41
        public const val Number_expression: Int = 42
        public const val Int_expression: Int = 43
        public const val True_expression: Int = 44
        public const val False_expression: Int = 45
        public const val Null_expression: Int = 46
        public const val ComparisonOp: Int = 47
    }

    override var interpreter: ParserATNSimulator =
        @Suppress("LeakingThis")
        ParserATNSimulator(this, ATN, DECISION_TO_DFA, SHARED_CONTEXT_CACHE)

    override val grammarFileName: String =
        "JsonPathParser.g4"

    @Deprecated("Use vocabulary instead", replaceWith = ReplaceWith("vocabulary"))
    override val tokenNames: Array =
        TOKEN_NAMES

    override val ruleNames: Array =
        RULE_NAMES

    override val atn: ATN =
        ATN

    override val vocabulary: Vocabulary =
        VOCABULARY

    override val serializedATN: String =
        SERIALIZED_ATN

    /* Named actions */

    /* Funcs */
    public open class Jsonpath_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Jsonpath_query

        public fun rootIdentifier(): RootIdentifierContext = getRuleContext(RootIdentifierContext::class, 0)!!
        public fun segments(): SegmentsContext = getRuleContext(SegmentsContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterJsonpath_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitJsonpath_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitJsonpath_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun jsonpath_query(): Jsonpath_queryContext {
        var _localctx = Jsonpath_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 0, Rules.Jsonpath_query)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 96
            rootIdentifier()

            this.state = 97
            segments()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class SegmentsContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Segments

        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun segment(): List = getRuleContexts(SegmentContext::class)
        public fun segment(i: Int): SegmentContext? = getRuleContext(SegmentContext::class, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSegments(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSegments(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSegments(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun segments(): SegmentsContext {
        var _localctx = SegmentsContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 2, Rules.Segments)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 104
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 0, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 99
                    ws()

                    this.state = 100
                    segment()
             
                }

                this.state = 106
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 0, context)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class SegmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Segment

        public fun bracketed_selection(): Bracketed_selectionContext? = getRuleContext(Bracketed_selectionContext::class, 0)
        public fun SHORTHAND_SELECTOR(): TerminalNode? = getToken(Tokens.SHORTHAND_SELECTOR, 0)
        public fun shorthand_segment(): Shorthand_segmentContext? = getRuleContext(Shorthand_segmentContext::class, 0)
        public fun DESCENDANT_SELECTOR(): TerminalNode? = getToken(Tokens.DESCENDANT_SELECTOR, 0)
        public fun descendant_segment(): Descendant_segmentContext? = getRuleContext(Descendant_segmentContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSegment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSegment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSegment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun segment(): SegmentContext {
        var _localctx = SegmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 4, Rules.Segment)

        try {
            this.state = 112
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.SQUARE_BRACKET_OPEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 107
                    bracketed_selection()

                }Tokens.SHORTHAND_SELECTOR -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 108
                    match(Tokens.SHORTHAND_SELECTOR)

                    this.state = 109
                    shorthand_segment()

                }Tokens.DESCENDANT_SELECTOR -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 3)
                    this.state = 110
                    match(Tokens.DESCENDANT_SELECTOR)

                    this.state = 111
                    descendant_segment()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Shorthand_segmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Shorthand_segment

        public fun wildcardSelector(): WildcardSelectorContext? = getRuleContext(WildcardSelectorContext::class, 0)
        public fun memberNameShorthand(): MemberNameShorthandContext? = getRuleContext(MemberNameShorthandContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterShorthand_segment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitShorthand_segment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitShorthand_segment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun shorthand_segment(): Shorthand_segmentContext {
        var _localctx = Shorthand_segmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 6, Rules.Shorthand_segment)

        try {
            this.state = 116
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.WILDCARD_SELECTOR -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 114
                    wildcardSelector()

                }Tokens.MEMBER_NAME_SHORTHAND -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 115
                    memberNameShorthand()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Descendant_segmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Descendant_segment

        public fun bracketed_selection(): Bracketed_selectionContext? = getRuleContext(Bracketed_selectionContext::class, 0)
        public fun wildcardSelector(): WildcardSelectorContext? = getRuleContext(WildcardSelectorContext::class, 0)
        public fun memberNameShorthand(): MemberNameShorthandContext? = getRuleContext(MemberNameShorthandContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterDescendant_segment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitDescendant_segment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitDescendant_segment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun descendant_segment(): Descendant_segmentContext {
        var _localctx = Descendant_segmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 8, Rules.Descendant_segment)

        try {
            this.state = 121
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.SQUARE_BRACKET_OPEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 118
                    bracketed_selection()

                }Tokens.WILDCARD_SELECTOR -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 119
                    wildcardSelector()

                }Tokens.MEMBER_NAME_SHORTHAND -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 3)
                    this.state = 120
                    memberNameShorthand()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Bracketed_selectionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Bracketed_selection

        public fun SQUARE_BRACKET_OPEN(): TerminalNode = getToken(Tokens.SQUARE_BRACKET_OPEN, 0)!!
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun selector(): List = getRuleContexts(SelectorContext::class)
        public fun selector(i: Int): SelectorContext? = getRuleContext(SelectorContext::class, i)
        public fun SQUARE_BRACKET_CLOSE(): TerminalNode = getToken(Tokens.SQUARE_BRACKET_CLOSE, 0)!!
        public fun COMMA(): List = getTokens(Tokens.COMMA)
        public fun COMMA(i: Int): TerminalNode? = getToken(Tokens.COMMA, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterBracketed_selection(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitBracketed_selection(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitBracketed_selection(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun bracketed_selection(): Bracketed_selectionContext {
        var _localctx = Bracketed_selectionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 10, Rules.Bracketed_selection)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 123
            match(Tokens.SQUARE_BRACKET_OPEN)

            this.state = 124
            ws()

            this.state = 125
            selector()

            this.state = 133
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 4, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 126
                    ws()

                    this.state = 127
                    match(Tokens.COMMA)

                    this.state = 128
                    ws()

                    this.state = 129
                    selector()
             
                }

                this.state = 135
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 4, context)
            }
            this.state = 136
            ws()

            this.state = 137
            match(Tokens.SQUARE_BRACKET_CLOSE)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class SelectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Selector

        public fun name_selector(): Name_selectorContext? = getRuleContext(Name_selectorContext::class, 0)
        public fun wildcardSelector(): WildcardSelectorContext? = getRuleContext(WildcardSelectorContext::class, 0)
        public fun slice_selector(): Slice_selectorContext? = getRuleContext(Slice_selectorContext::class, 0)
        public fun index_selector(): Index_selectorContext? = getRuleContext(Index_selectorContext::class, 0)
        public fun filter_selector(): Filter_selectorContext? = getRuleContext(Filter_selectorContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSelector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSelector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSelector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun selector(): SelectorContext {
        var _localctx = SelectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 12, Rules.Selector)

        try {
            this.state = 144
            errorHandler.sync(this)

            when (interpreter.adaptivePredict(_input, 5, context)) {
                1 -> {
                    enterOuterAlt(_localctx, 1)
                    this.state = 139
                    name_selector()

                }2 -> {
                    enterOuterAlt(_localctx, 2)
                    this.state = 140
                    wildcardSelector()

                }3 -> {
                    enterOuterAlt(_localctx, 3)
                    this.state = 141
                    slice_selector()

                }4 -> {
                    enterOuterAlt(_localctx, 4)
                    this.state = 142
                    index_selector()

                }5 -> {
                    enterOuterAlt(_localctx, 5)
                    this.state = 143
                    filter_selector()

                }
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Name_selectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Name_selector

        public fun stringLiteral(): StringLiteralContext = getRuleContext(StringLiteralContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterName_selector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitName_selector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitName_selector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun name_selector(): Name_selectorContext {
        var _localctx = Name_selectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 14, Rules.Name_selector)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 146
            stringLiteral()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Index_selectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Index_selector

        public fun int_expression(): Int_expressionContext = getRuleContext(Int_expressionContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterIndex_selector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitIndex_selector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitIndex_selector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun index_selector(): Index_selectorContext {
        var _localctx = Index_selectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 16, Rules.Index_selector)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 148
            int_expression()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Slice_selectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Slice_selector

        public fun COLON(): List = getTokens(Tokens.COLON)
        public fun COLON(i: Int): TerminalNode? = getToken(Tokens.COLON, i)
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun start(): StartContext? = getRuleContext(StartContext::class, 0)
        public fun end(): EndContext? = getRuleContext(EndContext::class, 0)
        public fun step(): StepContext? = getRuleContext(StepContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSlice_selector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSlice_selector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSlice_selector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun slice_selector(): Slice_selectorContext {
        var _localctx = Slice_selectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 18, Rules.Slice_selector)
        var _la: Int

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 153
            errorHandler.sync(this)
            _la = _input.LA(1)

            if (_la == Tokens.INT_TOKEN) {
                this.state = 150
                start()

                this.state = 151
                ws()

            }
            this.state = 155
            match(Tokens.COLON)

            this.state = 156
            ws()

            this.state = 160
            errorHandler.sync(this)
            _la = _input.LA(1)

            if (_la == Tokens.INT_TOKEN) {
                this.state = 157
                end()

                this.state = 158
                ws()

            }
            this.state = 168
            errorHandler.sync(this)
            _la = _input.LA(1)

            if (_la == Tokens.COLON) {
                this.state = 162
                match(Tokens.COLON)

                this.state = 166
                errorHandler.sync(this)

                when (interpreter.adaptivePredict(_input, 8, context)) {
                    1 -> {
                        this.state = 163
                        ws()

                        this.state = 164
                        step()

                    }
                }
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class StartContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Start

        public fun int_expression(): Int_expressionContext = getRuleContext(Int_expressionContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterStart(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitStart(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitStart(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun start(): StartContext {
        var _localctx = StartContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 20, Rules.Start)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 170
            int_expression()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class EndContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.End

        public fun int_expression(): Int_expressionContext = getRuleContext(Int_expressionContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterEnd(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitEnd(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitEnd(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun end(): EndContext {
        var _localctx = EndContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 22, Rules.End)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 172
            int_expression()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class StepContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Step

        public fun int_expression(): Int_expressionContext = getRuleContext(Int_expressionContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterStep(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitStep(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitStep(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun step(): StepContext {
        var _localctx = StepContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 24, Rules.Step)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 174
            int_expression()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Filter_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Filter_query

        public fun rel_query(): Rel_queryContext? = getRuleContext(Rel_queryContext::class, 0)
        public fun jsonpath_query(): Jsonpath_queryContext? = getRuleContext(Jsonpath_queryContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFilter_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFilter_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFilter_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun filter_query(): Filter_queryContext {
        var _localctx = Filter_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 26, Rules.Filter_query)

        try {
            this.state = 178
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.CURRENT_NODE_IDENTIFIER -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 176
                    rel_query()

                }Tokens.ROOT_IDENTIFIER -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 177
                    jsonpath_query()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Rel_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Rel_query

        public fun currentNodeIdentifier(): CurrentNodeIdentifierContext = getRuleContext(CurrentNodeIdentifierContext::class, 0)!!
        public fun segments(): SegmentsContext = getRuleContext(SegmentsContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterRel_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitRel_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitRel_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun rel_query(): Rel_queryContext {
        var _localctx = Rel_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 28, Rules.Rel_query)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 180
            currentNodeIdentifier()

            this.state = 181
            segments()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Singular_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Singular_query

        public fun rel_singular_query(): Rel_singular_queryContext? = getRuleContext(Rel_singular_queryContext::class, 0)
        public fun abs_singular_query(): Abs_singular_queryContext? = getRuleContext(Abs_singular_queryContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSingular_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSingular_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSingular_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun singular_query(): Singular_queryContext {
        var _localctx = Singular_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 30, Rules.Singular_query)

        try {
            this.state = 185
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.CURRENT_NODE_IDENTIFIER -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 183
                    rel_singular_query()

                }Tokens.ROOT_IDENTIFIER -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 184
                    abs_singular_query()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Rel_singular_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Rel_singular_query

        public fun currentNodeIdentifier(): CurrentNodeIdentifierContext = getRuleContext(CurrentNodeIdentifierContext::class, 0)!!
        public fun singular_query_segments(): Singular_query_segmentsContext = getRuleContext(Singular_query_segmentsContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterRel_singular_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitRel_singular_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitRel_singular_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun rel_singular_query(): Rel_singular_queryContext {
        var _localctx = Rel_singular_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 32, Rules.Rel_singular_query)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 187
            currentNodeIdentifier()

            this.state = 188
            singular_query_segments()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Abs_singular_queryContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Abs_singular_query

        public fun rootIdentifier(): RootIdentifierContext = getRuleContext(RootIdentifierContext::class, 0)!!
        public fun singular_query_segments(): Singular_query_segmentsContext = getRuleContext(Singular_query_segmentsContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterAbs_singular_query(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitAbs_singular_query(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitAbs_singular_query(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun abs_singular_query(): Abs_singular_queryContext {
        var _localctx = Abs_singular_queryContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 34, Rules.Abs_singular_query)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 190
            rootIdentifier()

            this.state = 191
            singular_query_segments()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Singular_query_segmentsContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Singular_query_segments

        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun singular_query_segment(): List = getRuleContexts(Singular_query_segmentContext::class)
        public fun singular_query_segment(i: Int): Singular_query_segmentContext? = getRuleContext(Singular_query_segmentContext::class, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSingular_query_segments(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSingular_query_segments(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSingular_query_segments(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun singular_query_segments(): Singular_query_segmentsContext {
        var _localctx = Singular_query_segmentsContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 36, Rules.Singular_query_segments)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 198
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 12, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 193
                    ws()

                    this.state = 194
                    singular_query_segment()
             
                }

                this.state = 200
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 12, context)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Singular_query_segmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Singular_query_segment

        public fun name_segment(): Name_segmentContext? = getRuleContext(Name_segmentContext::class, 0)
        public fun index_segment(): Index_segmentContext? = getRuleContext(Index_segmentContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSingular_query_segment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSingular_query_segment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSingular_query_segment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun singular_query_segment(): Singular_query_segmentContext {
        var _localctx = Singular_query_segmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 38, Rules.Singular_query_segment)

        try {
            this.state = 203
            errorHandler.sync(this)

            when (interpreter.adaptivePredict(_input, 13, context)) {
                1 -> {
                    enterOuterAlt(_localctx, 1)
                    this.state = 201
                    name_segment()

                }2 -> {
                    enterOuterAlt(_localctx, 2)
                    this.state = 202
                    index_segment()

                }
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Name_segmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Name_segment

        public fun SQUARE_BRACKET_OPEN(): TerminalNode? = getToken(Tokens.SQUARE_BRACKET_OPEN, 0)
        public fun name_selector(): Name_selectorContext? = getRuleContext(Name_selectorContext::class, 0)
        public fun SQUARE_BRACKET_CLOSE(): TerminalNode? = getToken(Tokens.SQUARE_BRACKET_CLOSE, 0)
        public fun SHORTHAND_SELECTOR(): TerminalNode? = getToken(Tokens.SHORTHAND_SELECTOR, 0)
        public fun memberNameShorthand(): MemberNameShorthandContext? = getRuleContext(MemberNameShorthandContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterName_segment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitName_segment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitName_segment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun name_segment(): Name_segmentContext {
        var _localctx = Name_segmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 40, Rules.Name_segment)

        try {
            this.state = 211
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.SQUARE_BRACKET_OPEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 205
                    match(Tokens.SQUARE_BRACKET_OPEN)

                    this.state = 206
                    name_selector()

                    this.state = 207
                    match(Tokens.SQUARE_BRACKET_CLOSE)

                }Tokens.SHORTHAND_SELECTOR -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 209
                    match(Tokens.SHORTHAND_SELECTOR)

                    this.state = 210
                    memberNameShorthand()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Index_segmentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Index_segment

        public fun SQUARE_BRACKET_OPEN(): TerminalNode = getToken(Tokens.SQUARE_BRACKET_OPEN, 0)!!
        public fun index_selector(): Index_selectorContext = getRuleContext(Index_selectorContext::class, 0)!!
        public fun SQUARE_BRACKET_CLOSE(): TerminalNode = getToken(Tokens.SQUARE_BRACKET_CLOSE, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterIndex_segment(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitIndex_segment(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitIndex_segment(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun index_segment(): Index_segmentContext {
        var _localctx = Index_segmentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 42, Rules.Index_segment)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 213
            match(Tokens.SQUARE_BRACKET_OPEN)

            this.state = 214
            index_selector()

            this.state = 215
            match(Tokens.SQUARE_BRACKET_CLOSE)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Filter_selectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Filter_selector

        public fun QUESTIONMARK(): TerminalNode = getToken(Tokens.QUESTIONMARK, 0)!!
        public fun ws(): WsContext = getRuleContext(WsContext::class, 0)!!
        public fun logical_expr(): Logical_exprContext = getRuleContext(Logical_exprContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFilter_selector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFilter_selector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFilter_selector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun filter_selector(): Filter_selectorContext {
        var _localctx = Filter_selectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 44, Rules.Filter_selector)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 217
            match(Tokens.QUESTIONMARK)

            this.state = 218
            ws()

            this.state = 219
            logical_expr()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Logical_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Logical_expr

        public fun logical_or_expr(): Logical_or_exprContext = getRuleContext(Logical_or_exprContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterLogical_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitLogical_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitLogical_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun logical_expr(): Logical_exprContext {
        var _localctx = Logical_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 46, Rules.Logical_expr)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 221
            logical_or_expr()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Logical_or_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Logical_or_expr

        public fun logical_and_expr(): List = getRuleContexts(Logical_and_exprContext::class)
        public fun logical_and_expr(i: Int): Logical_and_exprContext? = getRuleContext(Logical_and_exprContext::class, i)
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun LOGICAL_OR_OP(): List = getTokens(Tokens.LOGICAL_OR_OP)
        public fun LOGICAL_OR_OP(i: Int): TerminalNode? = getToken(Tokens.LOGICAL_OR_OP, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterLogical_or_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitLogical_or_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitLogical_or_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun logical_or_expr(): Logical_or_exprContext {
        var _localctx = Logical_or_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 48, Rules.Logical_or_expr)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 223
            logical_and_expr()

            this.state = 231
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 15, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 224
                    ws()

                    this.state = 225
                    match(Tokens.LOGICAL_OR_OP)

                    this.state = 226
                    ws()

                    this.state = 227
                    logical_and_expr()
             
                }

                this.state = 233
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 15, context)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Logical_and_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Logical_and_expr

        public fun basic_expr(): List = getRuleContexts(Basic_exprContext::class)
        public fun basic_expr(i: Int): Basic_exprContext? = getRuleContext(Basic_exprContext::class, i)
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun LOGICAL_AND_OP(): List = getTokens(Tokens.LOGICAL_AND_OP)
        public fun LOGICAL_AND_OP(i: Int): TerminalNode? = getToken(Tokens.LOGICAL_AND_OP, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterLogical_and_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitLogical_and_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitLogical_and_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun logical_and_expr(): Logical_and_exprContext {
        var _localctx = Logical_and_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 50, Rules.Logical_and_expr)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 234
            basic_expr()

            this.state = 242
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 16, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 235
                    ws()

                    this.state = 236
                    match(Tokens.LOGICAL_AND_OP)

                    this.state = 237
                    ws()

                    this.state = 238
                    basic_expr()
             
                }

                this.state = 244
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 16, context)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Basic_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Basic_expr

        public fun paren_expr(): Paren_exprContext? = getRuleContext(Paren_exprContext::class, 0)
        public fun comparison_expr(): Comparison_exprContext? = getRuleContext(Comparison_exprContext::class, 0)
        public fun test_expr(): Test_exprContext? = getRuleContext(Test_exprContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterBasic_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitBasic_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitBasic_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun basic_expr(): Basic_exprContext {
        var _localctx = Basic_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 52, Rules.Basic_expr)

        try {
            this.state = 248
            errorHandler.sync(this)

            when (interpreter.adaptivePredict(_input, 17, context)) {
                1 -> {
                    enterOuterAlt(_localctx, 1)
                    this.state = 245
                    paren_expr()

                }2 -> {
                    enterOuterAlt(_localctx, 2)
                    this.state = 246
                    comparison_expr()

                }3 -> {
                    enterOuterAlt(_localctx, 3)
                    this.state = 247
                    test_expr()

                }
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Paren_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Paren_expr

        public fun BRACKET_OPEN(): TerminalNode = getToken(Tokens.BRACKET_OPEN, 0)!!
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun logical_expr(): Logical_exprContext = getRuleContext(Logical_exprContext::class, 0)!!
        public fun BRACKET_CLOSE(): TerminalNode = getToken(Tokens.BRACKET_CLOSE, 0)!!
        public fun LOGICAL_NOT_OP(): TerminalNode? = getToken(Tokens.LOGICAL_NOT_OP, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterParen_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitParen_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitParen_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun paren_expr(): Paren_exprContext {
        var _localctx = Paren_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 54, Rules.Paren_expr)
        var _la: Int

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 252
            errorHandler.sync(this)
            _la = _input.LA(1)

            if (_la == Tokens.LOGICAL_NOT_OP) {
                this.state = 250
                match(Tokens.LOGICAL_NOT_OP)

                this.state = 251
                ws()

            }
            this.state = 254
            match(Tokens.BRACKET_OPEN)

            this.state = 255
            ws()

            this.state = 256
            logical_expr()

            this.state = 257
            ws()

            this.state = 258
            match(Tokens.BRACKET_CLOSE)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Test_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Test_expr

        public fun filter_query(): Filter_queryContext? = getRuleContext(Filter_queryContext::class, 0)
        public fun function_expr(): Function_exprContext? = getRuleContext(Function_exprContext::class, 0)
        public fun LOGICAL_NOT_OP(): TerminalNode? = getToken(Tokens.LOGICAL_NOT_OP, 0)
        public fun ws(): WsContext? = getRuleContext(WsContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterTest_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitTest_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitTest_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun test_expr(): Test_exprContext {
        var _localctx = Test_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 56, Rules.Test_expr)
        var _la: Int

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 262
            errorHandler.sync(this)
            _la = _input.LA(1)

            if (_la == Tokens.LOGICAL_NOT_OP) {
                this.state = 260
                match(Tokens.LOGICAL_NOT_OP)

                this.state = 261
                ws()

            }
            this.state = 266
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.ROOT_IDENTIFIER, Tokens.CURRENT_NODE_IDENTIFIER -> /*LL1AltBlock*/ {
                    this.state = 264
                    filter_query()

                }Tokens.FUNCTION_NAME -> /*LL1AltBlock*/ {
                    this.state = 265
                    function_expr()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Comparison_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Comparison_expr

        public fun firstComparable(): FirstComparableContext = getRuleContext(FirstComparableContext::class, 0)!!
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun comparisonOp(): ComparisonOpContext = getRuleContext(ComparisonOpContext::class, 0)!!
        public fun secondComparable(): SecondComparableContext = getRuleContext(SecondComparableContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterComparison_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitComparison_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitComparison_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun comparison_expr(): Comparison_exprContext {
        var _localctx = Comparison_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 58, Rules.Comparison_expr)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 268
            firstComparable()

            this.state = 269
            ws()

            this.state = 270
            comparisonOp()

            this.state = 271
            ws()

            this.state = 272
            secondComparable()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class FirstComparableContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.FirstComparable

        public fun comparable(): ComparableContext = getRuleContext(ComparableContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFirstComparable(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFirstComparable(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFirstComparable(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun firstComparable(): FirstComparableContext {
        var _localctx = FirstComparableContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 60, Rules.FirstComparable)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 274
            comparable()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class SecondComparableContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.SecondComparable

        public fun comparable(): ComparableContext = getRuleContext(ComparableContext::class, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterSecondComparable(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitSecondComparable(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitSecondComparable(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun secondComparable(): SecondComparableContext {
        var _localctx = SecondComparableContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 62, Rules.SecondComparable)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 276
            comparable()

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class LiteralContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Literal

        public fun int_expression(): Int_expressionContext? = getRuleContext(Int_expressionContext::class, 0)
        public fun number_expression(): Number_expressionContext? = getRuleContext(Number_expressionContext::class, 0)
        public fun stringLiteral(): StringLiteralContext? = getRuleContext(StringLiteralContext::class, 0)
        public fun true_expression(): True_expressionContext? = getRuleContext(True_expressionContext::class, 0)
        public fun false_expression(): False_expressionContext? = getRuleContext(False_expressionContext::class, 0)
        public fun null_expression(): Null_expressionContext? = getRuleContext(Null_expressionContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterLiteral(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitLiteral(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitLiteral(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun literal(): LiteralContext {
        var _localctx = LiteralContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 64, Rules.Literal)

        try {
            this.state = 284
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.INT_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 278
                    int_expression()

                }Tokens.NUMBER_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 279
                    number_expression()

                }Tokens.STRING_LITERAL -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 3)
                    this.state = 280
                    stringLiteral()

                }Tokens.TRUE_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 4)
                    this.state = 281
                    true_expression()

                }Tokens.FALSE_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 5)
                    this.state = 282
                    false_expression()

                }Tokens.NULL_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 6)
                    this.state = 283
                    null_expression()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class ComparableContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Comparable

        public fun literal(): LiteralContext? = getRuleContext(LiteralContext::class, 0)
        public fun singular_query(): Singular_queryContext? = getRuleContext(Singular_queryContext::class, 0)
        public fun function_expr(): Function_exprContext? = getRuleContext(Function_exprContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterComparable(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitComparable(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitComparable(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun comparable(): ComparableContext {
        var _localctx = ComparableContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 66, Rules.Comparable)

        try {
            this.state = 289
            errorHandler.sync(this)

            when (_input.LA(1)) {
                Tokens.STRING_LITERAL, Tokens.NULL_TOKEN, Tokens.TRUE_TOKEN, Tokens.FALSE_TOKEN, Tokens.INT_TOKEN, Tokens.NUMBER_TOKEN -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 1)
                    this.state = 286
                    literal()

                }Tokens.ROOT_IDENTIFIER, Tokens.CURRENT_NODE_IDENTIFIER -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 2)
                    this.state = 287
                    singular_query()

                }Tokens.FUNCTION_NAME -> /*LL1AltBlock*/ {
                    enterOuterAlt(_localctx, 3)
                    this.state = 288
                    function_expr()

                }
                else -> throw NoViableAltException(this)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Function_exprContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Function_expr

        public fun FUNCTION_NAME(): TerminalNode = getToken(Tokens.FUNCTION_NAME, 0)!!
        public fun BRACKET_OPEN(): TerminalNode = getToken(Tokens.BRACKET_OPEN, 0)!!
        public fun ws(): List = getRuleContexts(WsContext::class)
        public fun ws(i: Int): WsContext? = getRuleContext(WsContext::class, i)
        public fun BRACKET_CLOSE(): TerminalNode = getToken(Tokens.BRACKET_CLOSE, 0)!!
        public fun function_argument(): List = getRuleContexts(Function_argumentContext::class)
        public fun function_argument(i: Int): Function_argumentContext? = getRuleContext(Function_argumentContext::class, i)
        public fun COMMA(): List = getTokens(Tokens.COMMA)
        public fun COMMA(i: Int): TerminalNode? = getToken(Tokens.COMMA, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFunction_expr(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFunction_expr(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFunction_expr(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun function_expr(): Function_exprContext {
        var _localctx = Function_exprContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 68, Rules.Function_expr)
        var _la: Int

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 291
            match(Tokens.FUNCTION_NAME)

            this.state = 292
            match(Tokens.BRACKET_OPEN)

            this.state = 293
            ws()

            this.state = 305
            errorHandler.sync(this)
            _la = _input.LA(1)

            if ((((_la) and 0x3f.inv()) == 0 && ((1L shl _la) and 1065373702L) != 0L)) {
                this.state = 294
                function_argument()

                this.state = 302
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 23, context)

                while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                    if (_alt == 1 ) {
                        this.state = 295
                        ws()

                        this.state = 296
                        match(Tokens.COMMA)

                        this.state = 297
                        ws()

                        this.state = 298
                        function_argument()
                 
                    }

                    this.state = 304
                    errorHandler.sync(this)
                    _alt = interpreter.adaptivePredict(_input, 23, context)
                }
            }
            this.state = 307
            ws()

            this.state = 308
            match(Tokens.BRACKET_CLOSE)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Function_argumentContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Function_argument

        public fun literal(): LiteralContext? = getRuleContext(LiteralContext::class, 0)
        public fun filter_query(): Filter_queryContext? = getRuleContext(Filter_queryContext::class, 0)
        public fun function_expr(): Function_exprContext? = getRuleContext(Function_exprContext::class, 0)
        public fun logical_expr(): Logical_exprContext? = getRuleContext(Logical_exprContext::class, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFunction_argument(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFunction_argument(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFunction_argument(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun function_argument(): Function_argumentContext {
        var _localctx = Function_argumentContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 70, Rules.Function_argument)

        try {
            this.state = 314
            errorHandler.sync(this)

            when (interpreter.adaptivePredict(_input, 25, context)) {
                1 -> {
                    enterOuterAlt(_localctx, 1)
                    this.state = 310
                    literal()

                }2 -> {
                    enterOuterAlt(_localctx, 2)
                    this.state = 311
                    filter_query()

                }3 -> {
                    enterOuterAlt(_localctx, 3)
                    this.state = 312
                    function_expr()

                }4 -> {
                    enterOuterAlt(_localctx, 4)
                    this.state = 313
                    logical_expr()

                }
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class RootIdentifierContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.RootIdentifier

        public fun ROOT_IDENTIFIER(): TerminalNode = getToken(Tokens.ROOT_IDENTIFIER, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterRootIdentifier(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitRootIdentifier(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitRootIdentifier(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun rootIdentifier(): RootIdentifierContext {
        var _localctx = RootIdentifierContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 72, Rules.RootIdentifier)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 316
            match(Tokens.ROOT_IDENTIFIER)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class CurrentNodeIdentifierContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.CurrentNodeIdentifier

        public fun CURRENT_NODE_IDENTIFIER(): TerminalNode = getToken(Tokens.CURRENT_NODE_IDENTIFIER, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterCurrentNodeIdentifier(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitCurrentNodeIdentifier(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitCurrentNodeIdentifier(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun currentNodeIdentifier(): CurrentNodeIdentifierContext {
        var _localctx = CurrentNodeIdentifierContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 74, Rules.CurrentNodeIdentifier)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 318
            match(Tokens.CURRENT_NODE_IDENTIFIER)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class WsContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Ws

        public fun BLANK(): List = getTokens(Tokens.BLANK)
        public fun BLANK(i: Int): TerminalNode? = getToken(Tokens.BLANK, i)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterWs(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitWs(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitWs(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun ws(): WsContext {
        var _localctx = WsContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 76, Rules.Ws)

        try {
            var _alt: Int
            enterOuterAlt(_localctx, 1)
            this.state = 323
            errorHandler.sync(this)
            _alt = interpreter.adaptivePredict(_input, 26, context)

            while (_alt != 2 && _alt != INVALID_ALT_NUMBER) {
                if (_alt == 1 ) {
                    this.state = 320
                    match(Tokens.BLANK)
             
                }

                this.state = 325
                errorHandler.sync(this)
                _alt = interpreter.adaptivePredict(_input, 26, context)
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class WildcardSelectorContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.WildcardSelector

        public fun WILDCARD_SELECTOR(): TerminalNode = getToken(Tokens.WILDCARD_SELECTOR, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterWildcardSelector(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitWildcardSelector(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitWildcardSelector(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun wildcardSelector(): WildcardSelectorContext {
        var _localctx = WildcardSelectorContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 78, Rules.WildcardSelector)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 326
            match(Tokens.WILDCARD_SELECTOR)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class MemberNameShorthandContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.MemberNameShorthand

        public fun MEMBER_NAME_SHORTHAND(): TerminalNode = getToken(Tokens.MEMBER_NAME_SHORTHAND, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterMemberNameShorthand(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitMemberNameShorthand(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitMemberNameShorthand(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun memberNameShorthand(): MemberNameShorthandContext {
        var _localctx = MemberNameShorthandContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 80, Rules.MemberNameShorthand)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 328
            match(Tokens.MEMBER_NAME_SHORTHAND)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class StringLiteralContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.StringLiteral

        public fun STRING_LITERAL(): TerminalNode = getToken(Tokens.STRING_LITERAL, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterStringLiteral(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitStringLiteral(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitStringLiteral(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun stringLiteral(): StringLiteralContext {
        var _localctx = StringLiteralContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 82, Rules.StringLiteral)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 330
            match(Tokens.STRING_LITERAL)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Number_expressionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Number_expression

        public fun NUMBER_TOKEN(): TerminalNode = getToken(Tokens.NUMBER_TOKEN, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterNumber_expression(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitNumber_expression(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitNumber_expression(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun number_expression(): Number_expressionContext {
        var _localctx = Number_expressionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 84, Rules.Number_expression)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 332
            match(Tokens.NUMBER_TOKEN)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Int_expressionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Int_expression

        public fun INT_TOKEN(): TerminalNode = getToken(Tokens.INT_TOKEN, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterInt_expression(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitInt_expression(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitInt_expression(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun int_expression(): Int_expressionContext {
        var _localctx = Int_expressionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 86, Rules.Int_expression)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 334
            match(Tokens.INT_TOKEN)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class True_expressionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.True_expression

        public fun TRUE_TOKEN(): TerminalNode = getToken(Tokens.TRUE_TOKEN, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterTrue_expression(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitTrue_expression(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitTrue_expression(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun true_expression(): True_expressionContext {
        var _localctx = True_expressionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 88, Rules.True_expression)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 336
            match(Tokens.TRUE_TOKEN)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class False_expressionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.False_expression

        public fun FALSE_TOKEN(): TerminalNode = getToken(Tokens.FALSE_TOKEN, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterFalse_expression(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitFalse_expression(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitFalse_expression(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun false_expression(): False_expressionContext {
        var _localctx = False_expressionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 90, Rules.False_expression)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 338
            match(Tokens.FALSE_TOKEN)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class Null_expressionContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.Null_expression

        public fun NULL_TOKEN(): TerminalNode = getToken(Tokens.NULL_TOKEN, 0)!!

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterNull_expression(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitNull_expression(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitNull_expression(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun null_expression(): Null_expressionContext {
        var _localctx = Null_expressionContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 92, Rules.Null_expression)

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 340
            match(Tokens.NULL_TOKEN)

        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }

    public open class ComparisonOpContext : ParserRuleContext {
        override val ruleIndex: Int = Rules.ComparisonOp

        public fun COMPARISON_OP_EQUALS(): TerminalNode? = getToken(Tokens.COMPARISON_OP_EQUALS, 0)
        public fun COMPARISON_OP_NOT_EQUALS(): TerminalNode? = getToken(Tokens.COMPARISON_OP_NOT_EQUALS, 0)
        public fun COMPARISON_OP_SMALLER_THAN(): TerminalNode? = getToken(Tokens.COMPARISON_OP_SMALLER_THAN, 0)
        public fun COMPARISON_OP_GREATER_THAN(): TerminalNode? = getToken(Tokens.COMPARISON_OP_GREATER_THAN, 0)
        public fun COMPARISON_OP_SMALLER_THAN_OR_EQUALS(): TerminalNode? = getToken(Tokens.COMPARISON_OP_SMALLER_THAN_OR_EQUALS, 0)
        public fun COMPARISON_OP_GREATER_THAN_OR_EQUALS(): TerminalNode? = getToken(Tokens.COMPARISON_OP_GREATER_THAN_OR_EQUALS, 0)

        public constructor(parent: ParserRuleContext?, invokingState: Int) : super(parent, invokingState) {
        }

        override fun enterRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.enterComparisonOp(this)
            }
        }

        override fun exitRule(listener: ParseTreeListener) {
            if (listener is JsonPathParserListener) {
                listener.exitComparisonOp(this)
            }
        }

        override fun  accept(visitor: ParseTreeVisitor): T {
            return if (visitor is JsonPathParserVisitor) {
                visitor.visitComparisonOp(this)
            } else {
                visitor.visitChildren(this)
            }
        }
    }


    public fun comparisonOp(): ComparisonOpContext {
        var _localctx = ComparisonOpContext(context, state)
        var _token: Token?
        var _ctx: RuleContext?

        enterRule(_localctx, 94, Rules.ComparisonOp)
        var _la: Int

        try {
            enterOuterAlt(_localctx, 1)
            this.state = 342
            _la = _input.LA(1)

            if (!((((_la) and 0x3f.inv()) == 0 && ((1L shl _la) and 8257536L) != 0L))) {
                errorHandler.recoverInline(this)
            }
            else {
                if (_input.LA(1) == Tokens.EOF) {
                    isMatchedEOF = true
                }

                errorHandler.reportMatch(this)
                consume()
            }
        }
        catch (re: RecognitionException) {
            _localctx.exception = re
            errorHandler.reportError(this, re)
            errorHandler.recover(this, re)
        }
        finally {
            exitRule()
        }

        return _localctx
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy