kodexa 7.5.514404640805__py3-none-any.whl → 8.0.14958192442__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kodexa/dataclasses/__init__.py +1 -1
- kodexa/model/__init__.py +2 -2
- kodexa/model/objects.py +21 -1
- kodexa/model/utils.py +1 -1
- kodexa/pipeline/pipeline.py +1 -1
- kodexa/platform/client.py +1 -2
- kodexa/platform/kodexa.py +4 -1
- kodexa/platform/manifest.py +447 -0
- kodexa/selectors/__init__.py +1 -1
- kodexa/selectors/ast.py +371 -98
- kodexa/selectors/error.py +29 -0
- kodexa/selectors/kodexa-ast-visitor.py +268 -0
- kodexa/selectors/parser.py +91 -0
- kodexa/selectors/resources/KodexaSelector.interp +99 -0
- kodexa/selectors/resources/KodexaSelector.tokens +56 -0
- kodexa/selectors/resources/KodexaSelectorLexer.interp +119 -0
- kodexa/selectors/resources/KodexaSelectorLexer.py +204 -0
- kodexa/selectors/resources/KodexaSelectorLexer.tokens +56 -0
- kodexa/selectors/resources/KodexaSelectorListener.py +570 -0
- kodexa/selectors/resources/KodexaSelectorParser.py +3246 -0
- kodexa/selectors/resources/KodexaSelectorVisitor.py +323 -0
- kodexa/selectors/visitor.py +265 -0
- kodexa/steps/__init__.py +4 -2
- kodexa/steps/common.py +0 -68
- kodexa/testing/test_utils.py +1 -1
- {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/METADATA +7 -3
- kodexa-8.0.14958192442.dist-info/RECORD +53 -0
- {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/WHEEL +1 -1
- kodexa/model/model.py +0 -3259
- kodexa/model/persistence.py +0 -2017
- kodexa/selectors/core.py +0 -124
- kodexa/selectors/lexrules.py +0 -137
- kodexa/selectors/lextab.py +0 -83
- kodexa/selectors/lextab.pyi +0 -1
- kodexa/selectors/parserules.py +0 -414
- kodexa/selectors/parserules.pyi +0 -1
- kodexa/selectors/parsetab.py +0 -4149
- kodexa/selectors/parsetab.pyi +0 -1
- kodexa-7.5.514404640805.dist-info/RECORD +0 -50
- {kodexa-7.5.514404640805.dist-info → kodexa-8.0.14958192442.dist-info}/LICENSE +0 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
from antlr4.error.ErrorListener import ErrorListener
|
2
|
+
|
3
|
+
class KodexaSyntaxErrorListener(ErrorListener):
|
4
|
+
"""
|
5
|
+
Custom error listener for ANTLR parser to provide better error messages.
|
6
|
+
"""
|
7
|
+
|
8
|
+
def __init__(self):
|
9
|
+
super(KodexaSyntaxErrorListener, self).__init__()
|
10
|
+
self.errors = []
|
11
|
+
|
12
|
+
def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e):
|
13
|
+
"""
|
14
|
+
Collect syntax errors during parsing.
|
15
|
+
"""
|
16
|
+
error_msg = f"line {line}:{column} {msg}"
|
17
|
+
self.errors.append(error_msg)
|
18
|
+
|
19
|
+
def hasErrors(self):
|
20
|
+
"""
|
21
|
+
Check if any errors were detected.
|
22
|
+
"""
|
23
|
+
return len(self.errors) > 0
|
24
|
+
|
25
|
+
def getErrors(self):
|
26
|
+
"""
|
27
|
+
Get the list of error messages.
|
28
|
+
"""
|
29
|
+
return self.errors
|
@@ -0,0 +1,268 @@
|
|
1
|
+
from antlr4 import *
|
2
|
+
from kodexa.selectors.resources.KodexaSelectorParser import KodexaSelectorParser
|
3
|
+
from kodexa.selectors.resources.KodexaSelectorVisitor import KodexaSelectorVisitor
|
4
|
+
import kodexa.selectors.ast as ast
|
5
|
+
|
6
|
+
class KodexaASTVisitor(KodexaSelectorVisitor):
|
7
|
+
"""
|
8
|
+
Visitor implementation for building an AST from an ANTLR parse tree.
|
9
|
+
This converts the ANTLR parse tree to the same AST structure used in the original code.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def visitOrExpr(self, ctx:KodexaSelectorParser.OrExprContext):
|
13
|
+
left = self.visit(ctx.expr(0))
|
14
|
+
right = self.visit(ctx.expr(1))
|
15
|
+
return ast.BinaryExpression(left, 'or', right)
|
16
|
+
|
17
|
+
def visitAndExpr(self, ctx:KodexaSelectorParser.AndExprContext):
|
18
|
+
left = self.visit(ctx.expr(0))
|
19
|
+
right = self.visit(ctx.expr(1))
|
20
|
+
return ast.BinaryExpression(left, 'and', right)
|
21
|
+
|
22
|
+
def visitEqualsExpr(self, ctx:KodexaSelectorParser.EqualsExprContext):
|
23
|
+
left = self.visit(ctx.expr(0))
|
24
|
+
right = self.visit(ctx.expr(1))
|
25
|
+
op = ctx.EQUALS().getText()
|
26
|
+
return ast.BinaryExpression(left, op, right)
|
27
|
+
|
28
|
+
def visitRelationalExpr(self, ctx:KodexaSelectorParser.RelationalExprContext):
|
29
|
+
left = self.visit(ctx.expr(0))
|
30
|
+
right = self.visit(ctx.expr(1))
|
31
|
+
op = ctx.REL_OP().getText()
|
32
|
+
return ast.BinaryExpression(left, op, right)
|
33
|
+
|
34
|
+
def visitAddExpr(self, ctx:KodexaSelectorParser.AddExprContext):
|
35
|
+
left = self.visit(ctx.expr(0))
|
36
|
+
right = self.visit(ctx.expr(1))
|
37
|
+
return ast.BinaryExpression(left, '+', right)
|
38
|
+
|
39
|
+
def visitSubtractExpr(self, ctx:KodexaSelectorParser.SubtractExprContext):
|
40
|
+
left = self.visit(ctx.expr(0))
|
41
|
+
right = self.visit(ctx.expr(1))
|
42
|
+
return ast.BinaryExpression(left, '-', right)
|
43
|
+
|
44
|
+
def visitUnionExpr(self, ctx:KodexaSelectorParser.UnionExprContext):
|
45
|
+
left = self.visit(ctx.expr(0))
|
46
|
+
right = self.visit(ctx.expr(1))
|
47
|
+
return ast.BinaryExpression(left, '|', right)
|
48
|
+
|
49
|
+
def visitIntersectExpr(self, ctx:KodexaSelectorParser.IntersectExprContext):
|
50
|
+
left = self.visit(ctx.expr(0))
|
51
|
+
right = self.visit(ctx.expr(1))
|
52
|
+
return ast.BinaryExpression(left, 'intersect', right)
|
53
|
+
|
54
|
+
def visitUnaryMinusExpr(self, ctx:KodexaSelectorParser.UnaryMinusExprContext):
|
55
|
+
operand = self.visit(ctx.expr())
|
56
|
+
return ast.UnaryExpression('-', operand)
|
57
|
+
|
58
|
+
def visitPipelineExpr(self, ctx:KodexaSelectorParser.PipelineExprContext):
|
59
|
+
left = self.visit(ctx.expr(0))
|
60
|
+
right = self.visit(ctx.expr(1))
|
61
|
+
return ast.PipelineExpression(left, 'stream', right)
|
62
|
+
|
63
|
+
def visitFuncCallExpr(self, ctx:KodexaSelectorParser.FuncCallExprContext):
|
64
|
+
return self.visit(ctx.functionCall())
|
65
|
+
|
66
|
+
def visitBooleanLiteralExpr(self, ctx:KodexaSelectorParser.BooleanLiteralExprContext):
|
67
|
+
return self.visit(ctx.booleanLiteral())
|
68
|
+
|
69
|
+
def visitPathBinaryExpr(self, ctx:KodexaSelectorParser.PathBinaryExprContext):
|
70
|
+
left = self.visit(ctx.filterExpr())
|
71
|
+
op = self.visit(ctx.pathSep())
|
72
|
+
right = self.visit(ctx.relativeLocationPath())
|
73
|
+
return ast.BinaryExpression(left, op, right)
|
74
|
+
|
75
|
+
def visitRootOnly(self, ctx:KodexaSelectorParser.RootOnlyContext):
|
76
|
+
return ast.AbsolutePath('/')
|
77
|
+
|
78
|
+
def visitRootPath(self, ctx:KodexaSelectorParser.RootPathContext):
|
79
|
+
relative = self.visit(ctx.relativeLocationPath())
|
80
|
+
return ast.AbsolutePath('/', relative)
|
81
|
+
|
82
|
+
def visitAbbreviatedAbsoluteLocationPath(self, ctx:KodexaSelectorParser.AbbreviatedAbsoluteLocationPathContext):
|
83
|
+
relative = self.visit(ctx.relativeLocationPath())
|
84
|
+
return ast.AbsolutePath('//', relative)
|
85
|
+
|
86
|
+
def visitSingleStep(self, ctx:KodexaSelectorParser.SingleStepContext):
|
87
|
+
return self.visit(ctx.step())
|
88
|
+
|
89
|
+
def visitPathStep(self, ctx:KodexaSelectorParser.PathStepContext):
|
90
|
+
left = self.visit(ctx.relativeLocationPath())
|
91
|
+
right = self.visit(ctx.step())
|
92
|
+
return ast.BinaryExpression(left, '/', right)
|
93
|
+
|
94
|
+
def visitAbbrevPathStep(self, ctx:KodexaSelectorParser.AbbrevPathStepContext):
|
95
|
+
left = self.visit(ctx.relativeLocationPath())
|
96
|
+
right = self.visit(ctx.step())
|
97
|
+
return ast.BinaryExpression(left, '//', right)
|
98
|
+
|
99
|
+
def visitNodeTestStep(self, ctx:KodexaSelectorParser.NodeTestStepContext):
|
100
|
+
node_test = self.visit(ctx.nodeTest())
|
101
|
+
return ast.Step(None, node_test, [])
|
102
|
+
|
103
|
+
def visitNodeTestPredStep(self, ctx:KodexaSelectorParser.NodeTestPredStepContext):
|
104
|
+
node_test = self.visit(ctx.nodeTest())
|
105
|
+
predicates = self.visit(ctx.predicateList())
|
106
|
+
return ast.Step(None, node_test, predicates)
|
107
|
+
|
108
|
+
def visitAxisNodeTestStep(self, ctx:KodexaSelectorParser.AxisNodeTestStepContext):
|
109
|
+
axis = self.visit(ctx.axisSpecifier())
|
110
|
+
node_test = self.visit(ctx.nodeTest())
|
111
|
+
return ast.Step(axis, node_test, [])
|
112
|
+
|
113
|
+
def visitAxisNodeTestPredStep(self, ctx:KodexaSelectorParser.AxisNodeTestPredStepContext):
|
114
|
+
axis = self.visit(ctx.axisSpecifier())
|
115
|
+
node_test = self.visit(ctx.nodeTest())
|
116
|
+
predicates = self.visit(ctx.predicateList())
|
117
|
+
return ast.Step(axis, node_test, predicates)
|
118
|
+
|
119
|
+
def visitSelfStep(self, ctx:KodexaSelectorParser.SelfStepContext):
|
120
|
+
return ast.AbbreviatedStep('.')
|
121
|
+
|
122
|
+
def visitParentStep(self, ctx:KodexaSelectorParser.ParentStepContext):
|
123
|
+
return ast.AbbreviatedStep('..')
|
124
|
+
|
125
|
+
def visitFullAxis(self, ctx:KodexaSelectorParser.FullAxisContext):
|
126
|
+
return ctx.AXISNAME().getText()
|
127
|
+
|
128
|
+
def visitAttrAxis(self, ctx:KodexaSelectorParser.AttrAxisContext):
|
129
|
+
return '@'
|
130
|
+
|
131
|
+
def visitNameTestNode(self, ctx:KodexaSelectorParser.NameTestNodeContext):
|
132
|
+
return self.visit(ctx.nameTest())
|
133
|
+
|
134
|
+
def visitAnyNameTest(self, ctx:KodexaSelectorParser.AnyNameTestContext):
|
135
|
+
return ast.NameTest(None, '*')
|
136
|
+
|
137
|
+
def visitPrefixedAnyNameTest(self, ctx:KodexaSelectorParser.PrefixedAnyNameTestContext):
|
138
|
+
prefix = ctx.NCNAME().getText()
|
139
|
+
return ast.NameTest(prefix, '*')
|
140
|
+
|
141
|
+
def visitQNameTest(self, ctx:KodexaSelectorParser.QNameTestContext):
|
142
|
+
qname = self.visit(ctx.qName())
|
143
|
+
return ast.NameTest(qname[0], qname[1])
|
144
|
+
|
145
|
+
def visitPrefixedName(self, ctx:KodexaSelectorParser.PrefixedNameContext):
|
146
|
+
prefix = ctx.NCNAME(0).getText()
|
147
|
+
name = ctx.NCNAME(1).getText()
|
148
|
+
return (prefix, name)
|
149
|
+
|
150
|
+
def visitSimpleName(self, ctx:KodexaSelectorParser.SimpleNameContext):
|
151
|
+
return (None, ctx.NCNAME().getText())
|
152
|
+
|
153
|
+
def visitPrefixedFuncName(self, ctx:KodexaSelectorParser.PrefixedFuncNameContext):
|
154
|
+
prefix = ctx.NCNAME().getText()
|
155
|
+
name = ctx.FUNCNAME().getText()
|
156
|
+
return (prefix, name)
|
157
|
+
|
158
|
+
def visitSimpleFuncName(self, ctx:KodexaSelectorParser.SimpleFuncNameContext):
|
159
|
+
return (None, ctx.FUNCNAME().getText())
|
160
|
+
|
161
|
+
def visitVarRefFilter(self, ctx:KodexaSelectorParser.VarRefFilterContext):
|
162
|
+
return self.visit(ctx.variableReference())
|
163
|
+
|
164
|
+
def visitLiteralFilter(self, ctx:KodexaSelectorParser.LiteralFilterContext):
|
165
|
+
literal = ctx.LITERAL().getText()
|
166
|
+
return literal[1:-1] # Remove quotes
|
167
|
+
|
168
|
+
def visitBooleanFilter(self, ctx:KodexaSelectorParser.BooleanFilterContext):
|
169
|
+
return self.visit(ctx.booleanLiteral())
|
170
|
+
|
171
|
+
def visitBooleanLiteral(self, ctx:KodexaSelectorParser.BooleanLiteralContext):
|
172
|
+
if ctx.TRUE() is not None:
|
173
|
+
return True
|
174
|
+
else:
|
175
|
+
return False
|
176
|
+
|
177
|
+
def visitTrueFunction(self, ctx:KodexaSelectorParser.TrueFunctionContext):
|
178
|
+
args = self.visit(ctx.formalArguments())
|
179
|
+
return ast.FunctionCall(None, "true", args)
|
180
|
+
|
181
|
+
def visitFalseFunction(self, ctx:KodexaSelectorParser.FalseFunctionContext):
|
182
|
+
args = self.visit(ctx.formalArguments())
|
183
|
+
return ast.FunctionCall(None, "false", args)
|
184
|
+
|
185
|
+
def visitNumberFilter(self, ctx:KodexaSelectorParser.NumberFilterContext):
|
186
|
+
return self.visit(ctx.number())
|
187
|
+
|
188
|
+
def visitFuncCallFilter(self, ctx:KodexaSelectorParser.FuncCallFilterContext):
|
189
|
+
return self.visit(ctx.functionCall())
|
190
|
+
|
191
|
+
def visitGroupedFilter(self, ctx:KodexaSelectorParser.GroupedFilterContext):
|
192
|
+
return self.visit(ctx.expr())
|
193
|
+
|
194
|
+
def visitPredicatedFilter(self, ctx:KodexaSelectorParser.PredicatedFilterContext):
|
195
|
+
base = self.visit(ctx.filterExpr())
|
196
|
+
predicate = self.visit(ctx.predicate())
|
197
|
+
|
198
|
+
if not hasattr(base, 'append_predicate'):
|
199
|
+
base = ast.PredicatedExpression(base)
|
200
|
+
|
201
|
+
base.append_predicate(predicate)
|
202
|
+
return base
|
203
|
+
|
204
|
+
def visitSinglePredicate(self, ctx:KodexaSelectorParser.SinglePredicateContext):
|
205
|
+
return [self.visit(ctx.predicate())]
|
206
|
+
|
207
|
+
def visitMultiplePredicate(self, ctx:KodexaSelectorParser.MultiplePredicateContext):
|
208
|
+
predicates = self.visit(ctx.predicateList())
|
209
|
+
predicates.append(self.visit(ctx.predicate()))
|
210
|
+
return predicates
|
211
|
+
|
212
|
+
def visitPredicate(self, ctx:KodexaSelectorParser.PredicateContext):
|
213
|
+
return self.visit(ctx.expr())
|
214
|
+
|
215
|
+
def visitVariableReference(self, ctx:KodexaSelectorParser.VariableReferenceContext):
|
216
|
+
qname = self.visit(ctx.qName())
|
217
|
+
return ast.VariableReference(qname)
|
218
|
+
|
219
|
+
def visitNumber(self, ctx:KodexaSelectorParser.NumberContext):
|
220
|
+
if ctx.FLOAT() is not None:
|
221
|
+
return float(ctx.FLOAT().getText())
|
222
|
+
else:
|
223
|
+
return int(ctx.INTEGER().getText())
|
224
|
+
|
225
|
+
def visitFunctionCall(self, ctx:KodexaSelectorParser.FunctionCallContext):
|
226
|
+
if ctx.builtInFunctionCall() is not None:
|
227
|
+
return self.visit(ctx.builtInFunctionCall())
|
228
|
+
else:
|
229
|
+
qname = self.visit(ctx.funcQName())
|
230
|
+
args = self.visit(ctx.formalArguments())
|
231
|
+
return ast.FunctionCall(qname[0], qname[1], args)
|
232
|
+
|
233
|
+
def visitEmptyArgs(self, ctx:KodexaSelectorParser.EmptyArgsContext):
|
234
|
+
return []
|
235
|
+
|
236
|
+
def visitArgsList(self, ctx:KodexaSelectorParser.ArgsListContext):
|
237
|
+
return self.visit(ctx.argumentList())
|
238
|
+
|
239
|
+
def visitSingleArg(self, ctx:KodexaSelectorParser.SingleArgContext):
|
240
|
+
return [self.visit(ctx.expr())]
|
241
|
+
|
242
|
+
def visitMultipleArgs(self, ctx:KodexaSelectorParser.MultipleArgsContext):
|
243
|
+
args = self.visit(ctx.argumentList())
|
244
|
+
args.append(self.visit(ctx.expr()))
|
245
|
+
return args
|
246
|
+
|
247
|
+
def visitPathSep(self, ctx:KodexaSelectorParser.PathSepContext):
|
248
|
+
if ctx.PATH_SEP() is not None:
|
249
|
+
return '/'
|
250
|
+
else:
|
251
|
+
return '//'
|
252
|
+
|
253
|
+
# Add default implementations for any missing visit methods
|
254
|
+
def visitChildren(self, ctx):
|
255
|
+
result = self.defaultResult()
|
256
|
+
n = ctx.getChildCount()
|
257
|
+
for i in range(n):
|
258
|
+
if not ctx.getChild(i).getText() in ['{', '}', ';']:
|
259
|
+
c = ctx.getChild(i)
|
260
|
+
childResult = c.accept(self)
|
261
|
+
result = self.aggregateResult(result, childResult)
|
262
|
+
return result
|
263
|
+
|
264
|
+
def defaultResult(self):
|
265
|
+
return None
|
266
|
+
|
267
|
+
def aggregateResult(self, aggregate, nextResult):
|
268
|
+
return nextResult if nextResult is not None else aggregate
|
@@ -0,0 +1,91 @@
|
|
1
|
+
"""Core XPath parsing using ANTLR.
|
2
|
+
|
3
|
+
This module provides the interface for parsing XPath expressions using ANTLR.
|
4
|
+
"""
|
5
|
+
|
6
|
+
import re
|
7
|
+
from antlr4 import InputStream, CommonTokenStream
|
8
|
+
from kodexa.model.model import Document
|
9
|
+
from kodexa.selectors.resources.KodexaSelectorLexer import KodexaSelectorLexer
|
10
|
+
from kodexa.selectors.resources.KodexaSelectorParser import KodexaSelectorParser
|
11
|
+
from kodexa.selectors.visitor import KodexaASTVisitor
|
12
|
+
from kodexa.selectors.error import KodexaSyntaxErrorListener
|
13
|
+
|
14
|
+
__all__ = ["parse"]
|
15
|
+
|
16
|
+
class SelectorContext:
|
17
|
+
def __init__(self, document: Document, first_only=False):
|
18
|
+
self.pattern_cache = {}
|
19
|
+
self.last_op = None
|
20
|
+
self.document: Document = document
|
21
|
+
self.stream = 0
|
22
|
+
self.first_only = first_only
|
23
|
+
|
24
|
+
def cache_pattern(self, pattern):
|
25
|
+
if pattern not in self.pattern_cache:
|
26
|
+
self.pattern_cache[pattern] = re.compile(pattern)
|
27
|
+
return self.pattern_cache[pattern]
|
28
|
+
|
29
|
+
def parse(xpath):
|
30
|
+
"""Parse an xpath expression.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
xpath (str): The XPath expression to parse.
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
The AST representing the parsed XPath expression.
|
37
|
+
|
38
|
+
Raises:
|
39
|
+
RuntimeError: If there are syntax errors in the XPath expression.
|
40
|
+
"""
|
41
|
+
# Create an input stream from the xpath string
|
42
|
+
input_stream = InputStream(xpath)
|
43
|
+
|
44
|
+
# Create a lexer that feeds off of the input stream
|
45
|
+
lexer = KodexaSelectorLexer(input_stream)
|
46
|
+
|
47
|
+
# Remove the default console error listener
|
48
|
+
lexer.removeErrorListeners()
|
49
|
+
|
50
|
+
# Add our custom error listener
|
51
|
+
error_listener = KodexaSyntaxErrorListener()
|
52
|
+
lexer.addErrorListener(error_listener)
|
53
|
+
|
54
|
+
# Create a buffer of tokens pulled from the lexer
|
55
|
+
token_stream = CommonTokenStream(lexer)
|
56
|
+
|
57
|
+
# Create a parser that feeds off the tokens buffer
|
58
|
+
parser = KodexaSelectorParser(token_stream)
|
59
|
+
|
60
|
+
# Remove the default console error listener
|
61
|
+
parser.removeErrorListeners()
|
62
|
+
|
63
|
+
# Add our custom error listener
|
64
|
+
parser.addErrorListener(error_listener)
|
65
|
+
|
66
|
+
# Begin parsing at the "xpath" rule
|
67
|
+
tree = parser.xpath()
|
68
|
+
|
69
|
+
# Check if there were any syntax errors
|
70
|
+
if error_listener.hasErrors():
|
71
|
+
error_msg = "\n".join(error_listener.getErrors())
|
72
|
+
raise RuntimeError(f"Syntax error in Kodexa selector expression: {error_msg}")
|
73
|
+
|
74
|
+
# Create a visitor to build the AST
|
75
|
+
visitor = KodexaASTVisitor()
|
76
|
+
|
77
|
+
# Visit the parse tree and get the resulting AST
|
78
|
+
ast = visitor.visit(tree)
|
79
|
+
|
80
|
+
return ast
|
81
|
+
|
82
|
+
def debug_tokens(s):
|
83
|
+
"""Lex a string as XPath tokens, and print each token as it is lexed.
|
84
|
+
This is used primarily for debugging."""
|
85
|
+
input_stream = InputStream(s)
|
86
|
+
lexer = KodexaSelectorLexer(input_stream)
|
87
|
+
token_stream = CommonTokenStream(lexer)
|
88
|
+
token_stream.fill()
|
89
|
+
|
90
|
+
for token in token_stream.tokens:
|
91
|
+
print(token)
|
@@ -0,0 +1,99 @@
|
|
1
|
+
token literal names:
|
2
|
+
null
|
3
|
+
'or'
|
4
|
+
'and'
|
5
|
+
'intersect'
|
6
|
+
'stream'
|
7
|
+
'/'
|
8
|
+
'//'
|
9
|
+
'.'
|
10
|
+
'..'
|
11
|
+
'::'
|
12
|
+
'@'
|
13
|
+
'('
|
14
|
+
')'
|
15
|
+
'['
|
16
|
+
']'
|
17
|
+
'|'
|
18
|
+
null
|
19
|
+
null
|
20
|
+
'+'
|
21
|
+
'-'
|
22
|
+
'*'
|
23
|
+
','
|
24
|
+
':'
|
25
|
+
'$'
|
26
|
+
'true'
|
27
|
+
'false'
|
28
|
+
null
|
29
|
+
null
|
30
|
+
null
|
31
|
+
null
|
32
|
+
null
|
33
|
+
null
|
34
|
+
null
|
35
|
+
null
|
36
|
+
|
37
|
+
token symbolic names:
|
38
|
+
null
|
39
|
+
OR
|
40
|
+
AND
|
41
|
+
INTERSECT
|
42
|
+
PIPELINE
|
43
|
+
PATH_SEP
|
44
|
+
ABBREV_PATH_SEP
|
45
|
+
ABBREV_STEP_SELF
|
46
|
+
ABBREV_STEP_PARENT
|
47
|
+
AXIS_SEP
|
48
|
+
ABBREV_AXIS_AT
|
49
|
+
LPAREN
|
50
|
+
RPAREN
|
51
|
+
LBRACKET
|
52
|
+
RBRACKET
|
53
|
+
UNION
|
54
|
+
EQUALS
|
55
|
+
REL_OP
|
56
|
+
PLUS
|
57
|
+
MINUS
|
58
|
+
STAR
|
59
|
+
COMMA
|
60
|
+
COLON
|
61
|
+
DOLLAR
|
62
|
+
TRUE
|
63
|
+
FALSE
|
64
|
+
FUNCTION_NAME
|
65
|
+
LITERAL
|
66
|
+
FLOAT
|
67
|
+
INTEGER
|
68
|
+
NCNAME
|
69
|
+
FUNCNAME
|
70
|
+
AXISNAME
|
71
|
+
WS
|
72
|
+
|
73
|
+
rule names:
|
74
|
+
xpath
|
75
|
+
expr
|
76
|
+
absoluteLocationPath
|
77
|
+
abbreviatedAbsoluteLocationPath
|
78
|
+
relativeLocationPath
|
79
|
+
step
|
80
|
+
axisSpecifier
|
81
|
+
nodeTest
|
82
|
+
nameTest
|
83
|
+
qName
|
84
|
+
filterExpr
|
85
|
+
predicateList
|
86
|
+
predicate
|
87
|
+
variableReference
|
88
|
+
number
|
89
|
+
booleanLiteral
|
90
|
+
functionCall
|
91
|
+
builtInFunctionCall
|
92
|
+
funcQName
|
93
|
+
formalArguments
|
94
|
+
argumentList
|
95
|
+
pathSep
|
96
|
+
|
97
|
+
|
98
|
+
atn:
|
99
|
+
[4, 1, 33, 229, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 63, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 92, 8, 1, 10, 1, 12, 1, 95, 9, 1, 1, 2, 1, 2, 1, 2, 3, 2, 100, 8, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 114, 8, 4, 10, 4, 12, 4, 117, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 132, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 137, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 146, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 152, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 164, 8, 10, 1, 10, 1, 10, 5, 10, 168, 8, 10, 10, 10, 12, 10, 171, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 178, 8, 11, 10, 11, 12, 11, 181, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 198, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 204, 8, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 214, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 222, 8, 20, 10, 20, 12, 20, 225, 9, 20, 1, 21, 1, 21, 1, 21, 0, 5, 2, 8, 20, 22, 40, 22, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 0, 3, 1, 0, 28, 29, 1, 0, 24, 25, 1, 0, 5, 6, 247, 0, 44, 1, 0, 0, 0, 2, 62, 1, 0, 0, 0, 4, 99, 1, 0, 0, 0, 6, 101, 1, 0, 0, 0, 8, 104, 1, 0, 0, 0, 10, 131, 1, 0, 0, 0, 12, 136, 1, 0, 0, 0, 14, 138, 1, 0, 0, 0, 16, 145, 1, 0, 0, 0, 18, 151, 1, 0, 0, 0, 20, 163, 1, 0, 0, 0, 22, 172, 1, 0, 0, 0, 24, 182, 1, 0, 0, 0, 26, 186, 1, 0, 0, 0, 28, 189, 1, 0, 0, 0, 30, 191, 1, 0, 0, 0, 32, 197, 1, 0, 0, 0, 34, 203, 1, 0, 0, 0, 36, 205, 1, 0, 0, 0, 38, 213, 1, 0, 0, 0, 40, 215, 1, 0, 0, 0, 42, 226, 1, 0, 0, 0, 44, 45, 3, 2, 1, 0, 45, 1, 1, 0, 0, 0, 46, 47, 6, 1, -1, 0, 47, 48, 5, 19, 0, 0, 48, 63, 3, 2, 1, 11, 49, 63, 3, 32, 16, 0, 50, 51, 3, 20, 10, 0, 51, 52, 3, 42, 21, 0, 52, 53, 3, 8, 4, 0, 53, 63, 1, 0, 0, 0, 54, 63, 3, 8, 4, 0, 55, 63, 3, 4, 2, 0, 56, 63, 3, 6, 3, 0, 57, 63, 3, 20, 10, 0, 58, 63, 3, 16, 8, 0, 59, 60, 5, 5, 0, 0, 60, 63, 3, 16, 8, 0, 61, 63, 3, 30, 15, 0, 62, 46, 1, 0, 0, 0, 62, 49, 1, 0, 0, 0, 62, 50, 1, 0, 0, 0, 62, 54, 1, 0, 0, 0, 62, 55, 1, 0, 0, 0, 62, 56, 1, 0, 0, 0, 62, 57, 1, 0, 0, 0, 62, 58, 1, 0, 0, 0, 62, 59, 1, 0, 0, 0, 62, 61, 1, 0, 0, 0, 63, 93, 1, 0, 0, 0, 64, 65, 10, 19, 0, 0, 65, 66, 5, 1, 0, 0, 66, 92, 3, 2, 1, 20, 67, 68, 10, 18, 0, 0, 68, 69, 5, 2, 0, 0, 69, 92, 3, 2, 1, 19, 70, 71, 10, 17, 0, 0, 71, 72, 5, 16, 0, 0, 72, 92, 3, 2, 1, 18, 73, 74, 10, 16, 0, 0, 74, 75, 5, 17, 0, 0, 75, 92, 3, 2, 1, 17, 76, 77, 10, 15, 0, 0, 77, 78, 5, 18, 0, 0, 78, 92, 3, 2, 1, 16, 79, 80, 10, 14, 0, 0, 80, 81, 5, 19, 0, 0, 81, 92, 3, 2, 1, 15, 82, 83, 10, 13, 0, 0, 83, 84, 5, 15, 0, 0, 84, 92, 3, 2, 1, 14, 85, 86, 10, 12, 0, 0, 86, 87, 5, 3, 0, 0, 87, 92, 3, 2, 1, 13, 88, 89, 10, 10, 0, 0, 89, 90, 5, 4, 0, 0, 90, 92, 3, 2, 1, 11, 91, 64, 1, 0, 0, 0, 91, 67, 1, 0, 0, 0, 91, 70, 1, 0, 0, 0, 91, 73, 1, 0, 0, 0, 91, 76, 1, 0, 0, 0, 91, 79, 1, 0, 0, 0, 91, 82, 1, 0, 0, 0, 91, 85, 1, 0, 0, 0, 91, 88, 1, 0, 0, 0, 92, 95, 1, 0, 0, 0, 93, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 3, 1, 0, 0, 0, 95, 93, 1, 0, 0, 0, 96, 100, 5, 5, 0, 0, 97, 98, 5, 5, 0, 0, 98, 100, 3, 8, 4, 0, 99, 96, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 100, 5, 1, 0, 0, 0, 101, 102, 5, 6, 0, 0, 102, 103, 3, 8, 4, 0, 103, 7, 1, 0, 0, 0, 104, 105, 6, 4, -1, 0, 105, 106, 3, 10, 5, 0, 106, 115, 1, 0, 0, 0, 107, 108, 10, 2, 0, 0, 108, 109, 5, 5, 0, 0, 109, 114, 3, 10, 5, 0, 110, 111, 10, 1, 0, 0, 111, 112, 5, 6, 0, 0, 112, 114, 3, 10, 5, 0, 113, 107, 1, 0, 0, 0, 113, 110, 1, 0, 0, 0, 114, 117, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 9, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 118, 132, 3, 14, 7, 0, 119, 120, 3, 14, 7, 0, 120, 121, 3, 22, 11, 0, 121, 132, 1, 0, 0, 0, 122, 123, 3, 12, 6, 0, 123, 124, 3, 14, 7, 0, 124, 132, 1, 0, 0, 0, 125, 126, 3, 12, 6, 0, 126, 127, 3, 14, 7, 0, 127, 128, 3, 22, 11, 0, 128, 132, 1, 0, 0, 0, 129, 132, 5, 7, 0, 0, 130, 132, 5, 8, 0, 0, 131, 118, 1, 0, 0, 0, 131, 119, 1, 0, 0, 0, 131, 122, 1, 0, 0, 0, 131, 125, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 130, 1, 0, 0, 0, 132, 11, 1, 0, 0, 0, 133, 134, 5, 32, 0, 0, 134, 137, 5, 9, 0, 0, 135, 137, 5, 10, 0, 0, 136, 133, 1, 0, 0, 0, 136, 135, 1, 0, 0, 0, 137, 13, 1, 0, 0, 0, 138, 139, 3, 16, 8, 0, 139, 15, 1, 0, 0, 0, 140, 146, 5, 20, 0, 0, 141, 142, 5, 30, 0, 0, 142, 143, 5, 22, 0, 0, 143, 146, 5, 20, 0, 0, 144, 146, 3, 18, 9, 0, 145, 140, 1, 0, 0, 0, 145, 141, 1, 0, 0, 0, 145, 144, 1, 0, 0, 0, 146, 17, 1, 0, 0, 0, 147, 148, 5, 30, 0, 0, 148, 149, 5, 22, 0, 0, 149, 152, 5, 30, 0, 0, 150, 152, 5, 30, 0, 0, 151, 147, 1, 0, 0, 0, 151, 150, 1, 0, 0, 0, 152, 19, 1, 0, 0, 0, 153, 154, 6, 10, -1, 0, 154, 164, 3, 26, 13, 0, 155, 164, 5, 27, 0, 0, 156, 164, 3, 28, 14, 0, 157, 164, 3, 30, 15, 0, 158, 164, 3, 32, 16, 0, 159, 160, 5, 11, 0, 0, 160, 161, 3, 2, 1, 0, 161, 162, 5, 12, 0, 0, 162, 164, 1, 0, 0, 0, 163, 153, 1, 0, 0, 0, 163, 155, 1, 0, 0, 0, 163, 156, 1, 0, 0, 0, 163, 157, 1, 0, 0, 0, 163, 158, 1, 0, 0, 0, 163, 159, 1, 0, 0, 0, 164, 169, 1, 0, 0, 0, 165, 166, 10, 1, 0, 0, 166, 168, 3, 24, 12, 0, 167, 165, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 21, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 6, 11, -1, 0, 173, 174, 3, 24, 12, 0, 174, 179, 1, 0, 0, 0, 175, 176, 10, 1, 0, 0, 176, 178, 3, 24, 12, 0, 177, 175, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 23, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 13, 0, 0, 183, 184, 3, 2, 1, 0, 184, 185, 5, 14, 0, 0, 185, 25, 1, 0, 0, 0, 186, 187, 5, 23, 0, 0, 187, 188, 3, 18, 9, 0, 188, 27, 1, 0, 0, 0, 189, 190, 7, 0, 0, 0, 190, 29, 1, 0, 0, 0, 191, 192, 7, 1, 0, 0, 192, 31, 1, 0, 0, 0, 193, 194, 3, 36, 18, 0, 194, 195, 3, 38, 19, 0, 195, 198, 1, 0, 0, 0, 196, 198, 3, 34, 17, 0, 197, 193, 1, 0, 0, 0, 197, 196, 1, 0, 0, 0, 198, 33, 1, 0, 0, 0, 199, 200, 5, 24, 0, 0, 200, 204, 3, 38, 19, 0, 201, 202, 5, 25, 0, 0, 202, 204, 3, 38, 19, 0, 203, 199, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 35, 1, 0, 0, 0, 205, 206, 5, 26, 0, 0, 206, 37, 1, 0, 0, 0, 207, 208, 5, 11, 0, 0, 208, 214, 5, 12, 0, 0, 209, 210, 5, 11, 0, 0, 210, 211, 3, 40, 20, 0, 211, 212, 5, 12, 0, 0, 212, 214, 1, 0, 0, 0, 213, 207, 1, 0, 0, 0, 213, 209, 1, 0, 0, 0, 214, 39, 1, 0, 0, 0, 215, 216, 6, 20, -1, 0, 216, 217, 3, 2, 1, 0, 217, 223, 1, 0, 0, 0, 218, 219, 10, 1, 0, 0, 219, 220, 5, 21, 0, 0, 220, 222, 3, 2, 1, 0, 221, 218, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 41, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 227, 7, 2, 0, 0, 227, 43, 1, 0, 0, 0, 17, 62, 91, 93, 99, 113, 115, 131, 136, 145, 151, 163, 169, 179, 197, 203, 213, 223]
|
@@ -0,0 +1,56 @@
|
|
1
|
+
OR=1
|
2
|
+
AND=2
|
3
|
+
INTERSECT=3
|
4
|
+
PIPELINE=4
|
5
|
+
PATH_SEP=5
|
6
|
+
ABBREV_PATH_SEP=6
|
7
|
+
ABBREV_STEP_SELF=7
|
8
|
+
ABBREV_STEP_PARENT=8
|
9
|
+
AXIS_SEP=9
|
10
|
+
ABBREV_AXIS_AT=10
|
11
|
+
LPAREN=11
|
12
|
+
RPAREN=12
|
13
|
+
LBRACKET=13
|
14
|
+
RBRACKET=14
|
15
|
+
UNION=15
|
16
|
+
EQUALS=16
|
17
|
+
REL_OP=17
|
18
|
+
PLUS=18
|
19
|
+
MINUS=19
|
20
|
+
STAR=20
|
21
|
+
COMMA=21
|
22
|
+
COLON=22
|
23
|
+
DOLLAR=23
|
24
|
+
TRUE=24
|
25
|
+
FALSE=25
|
26
|
+
FUNCTION_NAME=26
|
27
|
+
LITERAL=27
|
28
|
+
FLOAT=28
|
29
|
+
INTEGER=29
|
30
|
+
NCNAME=30
|
31
|
+
FUNCNAME=31
|
32
|
+
AXISNAME=32
|
33
|
+
WS=33
|
34
|
+
'or'=1
|
35
|
+
'and'=2
|
36
|
+
'intersect'=3
|
37
|
+
'stream'=4
|
38
|
+
'/'=5
|
39
|
+
'//'=6
|
40
|
+
'.'=7
|
41
|
+
'..'=8
|
42
|
+
'::'=9
|
43
|
+
'@'=10
|
44
|
+
'('=11
|
45
|
+
')'=12
|
46
|
+
'['=13
|
47
|
+
']'=14
|
48
|
+
'|'=15
|
49
|
+
'+'=18
|
50
|
+
'-'=19
|
51
|
+
'*'=20
|
52
|
+
','=21
|
53
|
+
':'=22
|
54
|
+
'$'=23
|
55
|
+
'true'=24
|
56
|
+
'false'=25
|
@@ -0,0 +1,119 @@
|
|
1
|
+
token literal names:
|
2
|
+
null
|
3
|
+
'or'
|
4
|
+
'and'
|
5
|
+
'intersect'
|
6
|
+
'stream'
|
7
|
+
'/'
|
8
|
+
'//'
|
9
|
+
'.'
|
10
|
+
'..'
|
11
|
+
'::'
|
12
|
+
'@'
|
13
|
+
'('
|
14
|
+
')'
|
15
|
+
'['
|
16
|
+
']'
|
17
|
+
'|'
|
18
|
+
null
|
19
|
+
null
|
20
|
+
'+'
|
21
|
+
'-'
|
22
|
+
'*'
|
23
|
+
','
|
24
|
+
':'
|
25
|
+
'$'
|
26
|
+
'true'
|
27
|
+
'false'
|
28
|
+
null
|
29
|
+
null
|
30
|
+
null
|
31
|
+
null
|
32
|
+
null
|
33
|
+
null
|
34
|
+
null
|
35
|
+
null
|
36
|
+
|
37
|
+
token symbolic names:
|
38
|
+
null
|
39
|
+
OR
|
40
|
+
AND
|
41
|
+
INTERSECT
|
42
|
+
PIPELINE
|
43
|
+
PATH_SEP
|
44
|
+
ABBREV_PATH_SEP
|
45
|
+
ABBREV_STEP_SELF
|
46
|
+
ABBREV_STEP_PARENT
|
47
|
+
AXIS_SEP
|
48
|
+
ABBREV_AXIS_AT
|
49
|
+
LPAREN
|
50
|
+
RPAREN
|
51
|
+
LBRACKET
|
52
|
+
RBRACKET
|
53
|
+
UNION
|
54
|
+
EQUALS
|
55
|
+
REL_OP
|
56
|
+
PLUS
|
57
|
+
MINUS
|
58
|
+
STAR
|
59
|
+
COMMA
|
60
|
+
COLON
|
61
|
+
DOLLAR
|
62
|
+
TRUE
|
63
|
+
FALSE
|
64
|
+
FUNCTION_NAME
|
65
|
+
LITERAL
|
66
|
+
FLOAT
|
67
|
+
INTEGER
|
68
|
+
NCNAME
|
69
|
+
FUNCNAME
|
70
|
+
AXISNAME
|
71
|
+
WS
|
72
|
+
|
73
|
+
rule names:
|
74
|
+
OR
|
75
|
+
AND
|
76
|
+
INTERSECT
|
77
|
+
PIPELINE
|
78
|
+
PATH_SEP
|
79
|
+
ABBREV_PATH_SEP
|
80
|
+
ABBREV_STEP_SELF
|
81
|
+
ABBREV_STEP_PARENT
|
82
|
+
AXIS_SEP
|
83
|
+
ABBREV_AXIS_AT
|
84
|
+
LPAREN
|
85
|
+
RPAREN
|
86
|
+
LBRACKET
|
87
|
+
RBRACKET
|
88
|
+
UNION
|
89
|
+
EQUALS
|
90
|
+
REL_OP
|
91
|
+
PLUS
|
92
|
+
MINUS
|
93
|
+
STAR
|
94
|
+
COMMA
|
95
|
+
COLON
|
96
|
+
DOLLAR
|
97
|
+
TRUE
|
98
|
+
FALSE
|
99
|
+
FUNCTION_NAME
|
100
|
+
LITERAL
|
101
|
+
FLOAT
|
102
|
+
INTEGER
|
103
|
+
NCNAME
|
104
|
+
FUNCNAME
|
105
|
+
AXISNAME
|
106
|
+
NameStartChar
|
107
|
+
NameChar
|
108
|
+
DIGIT
|
109
|
+
WS
|
110
|
+
|
111
|
+
channel names:
|
112
|
+
DEFAULT_TOKEN_CHANNEL
|
113
|
+
HIDDEN
|
114
|
+
|
115
|
+
mode names:
|
116
|
+
DEFAULT_MODE
|
117
|
+
|
118
|
+
atn:
|
119
|
+
[4, 0, 33, 312, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 3, 15, 126, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 133, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 241, 8, 25, 1, 26, 1, 26, 5, 26, 245, 8, 26, 10, 26, 12, 26, 248, 9, 26, 1, 26, 1, 26, 1, 26, 5, 26, 253, 8, 26, 10, 26, 12, 26, 256, 9, 26, 1, 26, 3, 26, 259, 8, 26, 1, 27, 4, 27, 262, 8, 27, 11, 27, 12, 27, 263, 1, 27, 1, 27, 5, 27, 268, 8, 27, 10, 27, 12, 27, 271, 9, 27, 1, 27, 1, 27, 4, 27, 275, 8, 27, 11, 27, 12, 27, 276, 3, 27, 279, 8, 27, 1, 28, 4, 28, 282, 8, 28, 11, 28, 12, 28, 283, 1, 29, 1, 29, 5, 29, 288, 8, 29, 10, 29, 12, 29, 291, 9, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 3, 32, 298, 8, 32, 1, 33, 1, 33, 3, 33, 302, 8, 33, 1, 34, 1, 34, 1, 35, 4, 35, 307, 8, 35, 11, 35, 12, 35, 308, 1, 35, 1, 35, 0, 0, 36, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 0, 67, 0, 69, 0, 71, 33, 1, 0, 7, 2, 0, 60, 60, 62, 62, 1, 0, 34, 34, 1, 0, 39, 39, 14, 0, 65, 90, 95, 95, 97, 122, 192, 214, 216, 246, 248, 767, 880, 893, 895, 8191, 8204, 8205, 8304, 8591, 11264, 12271, 12289, 55295, 63744, 64975, 65008, 65533, 5, 0, 45, 46, 48, 57, 183, 183, 768, 879, 8255, 8256, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 331, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 1, 73, 1, 0, 0, 0, 3, 76, 1, 0, 0, 0, 5, 80, 1, 0, 0, 0, 7, 90, 1, 0, 0, 0, 9, 97, 1, 0, 0, 0, 11, 99, 1, 0, 0, 0, 13, 102, 1, 0, 0, 0, 15, 104, 1, 0, 0, 0, 17, 107, 1, 0, 0, 0, 19, 110, 1, 0, 0, 0, 21, 112, 1, 0, 0, 0, 23, 114, 1, 0, 0, 0, 25, 116, 1, 0, 0, 0, 27, 118, 1, 0, 0, 0, 29, 120, 1, 0, 0, 0, 31, 125, 1, 0, 0, 0, 33, 132, 1, 0, 0, 0, 35, 134, 1, 0, 0, 0, 37, 136, 1, 0, 0, 0, 39, 138, 1, 0, 0, 0, 41, 140, 1, 0, 0, 0, 43, 142, 1, 0, 0, 0, 45, 144, 1, 0, 0, 0, 47, 146, 1, 0, 0, 0, 49, 151, 1, 0, 0, 0, 51, 240, 1, 0, 0, 0, 53, 258, 1, 0, 0, 0, 55, 278, 1, 0, 0, 0, 57, 281, 1, 0, 0, 0, 59, 285, 1, 0, 0, 0, 61, 292, 1, 0, 0, 0, 63, 294, 1, 0, 0, 0, 65, 297, 1, 0, 0, 0, 67, 301, 1, 0, 0, 0, 69, 303, 1, 0, 0, 0, 71, 306, 1, 0, 0, 0, 73, 74, 5, 111, 0, 0, 74, 75, 5, 114, 0, 0, 75, 2, 1, 0, 0, 0, 76, 77, 5, 97, 0, 0, 77, 78, 5, 110, 0, 0, 78, 79, 5, 100, 0, 0, 79, 4, 1, 0, 0, 0, 80, 81, 5, 105, 0, 0, 81, 82, 5, 110, 0, 0, 82, 83, 5, 116, 0, 0, 83, 84, 5, 101, 0, 0, 84, 85, 5, 114, 0, 0, 85, 86, 5, 115, 0, 0, 86, 87, 5, 101, 0, 0, 87, 88, 5, 99, 0, 0, 88, 89, 5, 116, 0, 0, 89, 6, 1, 0, 0, 0, 90, 91, 5, 115, 0, 0, 91, 92, 5, 116, 0, 0, 92, 93, 5, 114, 0, 0, 93, 94, 5, 101, 0, 0, 94, 95, 5, 97, 0, 0, 95, 96, 5, 109, 0, 0, 96, 8, 1, 0, 0, 0, 97, 98, 5, 47, 0, 0, 98, 10, 1, 0, 0, 0, 99, 100, 5, 47, 0, 0, 100, 101, 5, 47, 0, 0, 101, 12, 1, 0, 0, 0, 102, 103, 5, 46, 0, 0, 103, 14, 1, 0, 0, 0, 104, 105, 5, 46, 0, 0, 105, 106, 5, 46, 0, 0, 106, 16, 1, 0, 0, 0, 107, 108, 5, 58, 0, 0, 108, 109, 5, 58, 0, 0, 109, 18, 1, 0, 0, 0, 110, 111, 5, 64, 0, 0, 111, 20, 1, 0, 0, 0, 112, 113, 5, 40, 0, 0, 113, 22, 1, 0, 0, 0, 114, 115, 5, 41, 0, 0, 115, 24, 1, 0, 0, 0, 116, 117, 5, 91, 0, 0, 117, 26, 1, 0, 0, 0, 118, 119, 5, 93, 0, 0, 119, 28, 1, 0, 0, 0, 120, 121, 5, 124, 0, 0, 121, 30, 1, 0, 0, 0, 122, 123, 5, 33, 0, 0, 123, 126, 5, 61, 0, 0, 124, 126, 5, 61, 0, 0, 125, 122, 1, 0, 0, 0, 125, 124, 1, 0, 0, 0, 126, 32, 1, 0, 0, 0, 127, 128, 5, 60, 0, 0, 128, 133, 5, 61, 0, 0, 129, 130, 5, 62, 0, 0, 130, 133, 5, 61, 0, 0, 131, 133, 7, 0, 0, 0, 132, 127, 1, 0, 0, 0, 132, 129, 1, 0, 0, 0, 132, 131, 1, 0, 0, 0, 133, 34, 1, 0, 0, 0, 134, 135, 5, 43, 0, 0, 135, 36, 1, 0, 0, 0, 136, 137, 5, 45, 0, 0, 137, 38, 1, 0, 0, 0, 138, 139, 5, 42, 0, 0, 139, 40, 1, 0, 0, 0, 140, 141, 5, 44, 0, 0, 141, 42, 1, 0, 0, 0, 142, 143, 5, 58, 0, 0, 143, 44, 1, 0, 0, 0, 144, 145, 5, 36, 0, 0, 145, 46, 1, 0, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 114, 0, 0, 148, 149, 5, 117, 0, 0, 149, 150, 5, 101, 0, 0, 150, 48, 1, 0, 0, 0, 151, 152, 5, 102, 0, 0, 152, 153, 5, 97, 0, 0, 153, 154, 5, 108, 0, 0, 154, 155, 5, 115, 0, 0, 155, 156, 5, 101, 0, 0, 156, 50, 1, 0, 0, 0, 157, 158, 5, 99, 0, 0, 158, 159, 5, 111, 0, 0, 159, 160, 5, 110, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 101, 0, 0, 162, 163, 5, 110, 0, 0, 163, 164, 5, 116, 0, 0, 164, 165, 5, 82, 0, 0, 165, 166, 5, 101, 0, 0, 166, 167, 5, 103, 0, 0, 167, 168, 5, 101, 0, 0, 168, 241, 5, 120, 0, 0, 169, 170, 5, 116, 0, 0, 170, 171, 5, 121, 0, 0, 171, 172, 5, 112, 0, 0, 172, 173, 5, 101, 0, 0, 173, 174, 5, 82, 0, 0, 174, 175, 5, 101, 0, 0, 175, 176, 5, 103, 0, 0, 176, 177, 5, 101, 0, 0, 177, 241, 5, 120, 0, 0, 178, 179, 5, 116, 0, 0, 179, 180, 5, 97, 0, 0, 180, 181, 5, 103, 0, 0, 181, 182, 5, 82, 0, 0, 182, 183, 5, 101, 0, 0, 183, 184, 5, 103, 0, 0, 184, 185, 5, 101, 0, 0, 185, 241, 5, 120, 0, 0, 186, 187, 5, 104, 0, 0, 187, 188, 5, 97, 0, 0, 188, 189, 5, 115, 0, 0, 189, 190, 5, 84, 0, 0, 190, 191, 5, 97, 0, 0, 191, 241, 5, 103, 0, 0, 192, 193, 5, 104, 0, 0, 193, 194, 5, 97, 0, 0, 194, 195, 5, 115, 0, 0, 195, 196, 5, 70, 0, 0, 196, 197, 5, 101, 0, 0, 197, 198, 5, 97, 0, 0, 198, 199, 5, 116, 0, 0, 199, 200, 5, 117, 0, 0, 200, 201, 5, 114, 0, 0, 201, 241, 5, 101, 0, 0, 202, 203, 5, 104, 0, 0, 203, 204, 5, 97, 0, 0, 204, 205, 5, 115, 0, 0, 205, 206, 5, 70, 0, 0, 206, 207, 5, 101, 0, 0, 207, 208, 5, 97, 0, 0, 208, 209, 5, 116, 0, 0, 209, 210, 5, 117, 0, 0, 210, 211, 5, 114, 0, 0, 211, 212, 5, 101, 0, 0, 212, 213, 5, 86, 0, 0, 213, 214, 5, 97, 0, 0, 214, 215, 5, 108, 0, 0, 215, 216, 5, 117, 0, 0, 216, 241, 5, 101, 0, 0, 217, 218, 5, 99, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 110, 0, 0, 220, 221, 5, 116, 0, 0, 221, 222, 5, 101, 0, 0, 222, 223, 5, 110, 0, 0, 223, 241, 5, 116, 0, 0, 224, 225, 5, 105, 0, 0, 225, 241, 5, 100, 0, 0, 226, 227, 5, 110, 0, 0, 227, 228, 5, 111, 0, 0, 228, 229, 5, 100, 0, 0, 229, 230, 5, 101, 0, 0, 230, 231, 5, 95, 0, 0, 231, 232, 5, 116, 0, 0, 232, 233, 5, 121, 0, 0, 233, 234, 5, 112, 0, 0, 234, 241, 5, 101, 0, 0, 235, 236, 5, 105, 0, 0, 236, 237, 5, 110, 0, 0, 237, 238, 5, 100, 0, 0, 238, 239, 5, 101, 0, 0, 239, 241, 5, 120, 0, 0, 240, 157, 1, 0, 0, 0, 240, 169, 1, 0, 0, 0, 240, 178, 1, 0, 0, 0, 240, 186, 1, 0, 0, 0, 240, 192, 1, 0, 0, 0, 240, 202, 1, 0, 0, 0, 240, 217, 1, 0, 0, 0, 240, 224, 1, 0, 0, 0, 240, 226, 1, 0, 0, 0, 240, 235, 1, 0, 0, 0, 241, 52, 1, 0, 0, 0, 242, 246, 5, 34, 0, 0, 243, 245, 8, 1, 0, 0, 244, 243, 1, 0, 0, 0, 245, 248, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 249, 1, 0, 0, 0, 248, 246, 1, 0, 0, 0, 249, 259, 5, 34, 0, 0, 250, 254, 5, 39, 0, 0, 251, 253, 8, 2, 0, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 257, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 259, 5, 39, 0, 0, 258, 242, 1, 0, 0, 0, 258, 250, 1, 0, 0, 0, 259, 54, 1, 0, 0, 0, 260, 262, 3, 69, 34, 0, 261, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 261, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 269, 5, 46, 0, 0, 266, 268, 3, 69, 34, 0, 267, 266, 1, 0, 0, 0, 268, 271, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 279, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 272, 274, 5, 46, 0, 0, 273, 275, 3, 69, 34, 0, 274, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 279, 1, 0, 0, 0, 278, 261, 1, 0, 0, 0, 278, 272, 1, 0, 0, 0, 279, 56, 1, 0, 0, 0, 280, 282, 3, 69, 34, 0, 281, 280, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 58, 1, 0, 0, 0, 285, 289, 3, 65, 32, 0, 286, 288, 3, 67, 33, 0, 287, 286, 1, 0, 0, 0, 288, 291, 1, 0, 0, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 60, 1, 0, 0, 0, 291, 289, 1, 0, 0, 0, 292, 293, 3, 59, 29, 0, 293, 62, 1, 0, 0, 0, 294, 295, 3, 59, 29, 0, 295, 64, 1, 0, 0, 0, 296, 298, 7, 3, 0, 0, 297, 296, 1, 0, 0, 0, 298, 66, 1, 0, 0, 0, 299, 302, 3, 65, 32, 0, 300, 302, 7, 4, 0, 0, 301, 299, 1, 0, 0, 0, 301, 300, 1, 0, 0, 0, 302, 68, 1, 0, 0, 0, 303, 304, 7, 5, 0, 0, 304, 70, 1, 0, 0, 0, 305, 307, 7, 6, 0, 0, 306, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 308, 309, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 6, 35, 0, 0, 311, 72, 1, 0, 0, 0, 16, 0, 125, 132, 240, 246, 254, 258, 263, 269, 276, 278, 283, 289, 297, 301, 308, 1, 6, 0, 0]
|