Finish the parser code skeleton.
diff --git a/oal-parser/pom.xml b/oal-parser/pom.xml
new file mode 100644
index 0000000..9c572dc
--- /dev/null
+++ b/oal-parser/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>oal-tool</artifactId>
+ <groupId>org.apache.skywalking</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>oal-parser</artifactId>
+
+ <dependencies>
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.skywalking</groupId>
+ <artifactId>oal-syntax</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/oal-syntax/src/main/java/org/apache/skywalking/oal/tool/Main.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/Main.java
similarity index 100%
rename from oal-syntax/src/main/java/org/apache/skywalking/oal/tool/Main.java
rename to oal-parser/src/main/java/org/apache/skywalking/oal/tool/Main.java
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
new file mode 100644
index 0000000..05e3d38
--- /dev/null
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/AnalysisResult.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oal.tool.parser;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter(AccessLevel.PACKAGE)
+@Setter(AccessLevel.PUBLIC)
+public class AnalysisResult {
+ private String metricName;
+}
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
new file mode 100644
index 0000000..d896333
--- /dev/null
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/OALListener.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oal.tool.parser;
+
+import java.util.List;
+import org.antlr.v4.runtime.misc.NotNull;
+import org.apache.skywalking.oal.tool.grammar.OALParser;
+import org.apache.skywalking.oal.tool.grammar.OALParserBaseListener;
+
+public class OALListener extends OALParserBaseListener {
+ private List<AnalysisResult> results;
+ private AnalysisResult current;
+
+ public OALListener(List<AnalysisResult> results) {
+ this.results = results;
+ }
+
+ @Override
+ public void enterAggregationStatement(@NotNull OALParser.AggregationStatementContext ctx) {
+ current = new AnalysisResult();
+ }
+
+ @Override
+ public void exitAggregationStatement(@NotNull OALParser.AggregationStatementContext ctx) {
+ results.add(current);
+ current = null;
+ }
+
+ @Override public void enterVariable(OALParser.VariableContext ctx) {
+ }
+
+ @Override public void exitVariable(OALParser.VariableContext ctx) {
+ current.setMetricName(ctx.getText());
+ }
+}
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ScriptParser.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ScriptParser.java
new file mode 100644
index 0000000..7d9b56e
--- /dev/null
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/ScriptParser.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oal.tool.parser;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+import org.antlr.v4.runtime.CharStreams;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.antlr.v4.runtime.tree.ParseTreeWalker;
+import org.apache.skywalking.oal.tool.grammar.OALLexer;
+import org.apache.skywalking.oal.tool.grammar.OALParser;
+
+public class ScriptParser {
+ private OALLexer lexer;
+
+ private ScriptParser() {
+
+ }
+
+ public static ScriptParser createFromFile(String scriptFilepath) throws IOException {
+ ScriptParser parser = new ScriptParser();
+ parser.lexer = new OALLexer(CharStreams.fromFileName(scriptFilepath));
+ return parser;
+ }
+
+ public static ScriptParser createFromScriptText(String script) throws IOException {
+ ScriptParser parser = new ScriptParser();
+ parser.lexer = new OALLexer(CharStreams.fromString(script));
+ return parser;
+ }
+
+ public List<AnalysisResult> parse() throws IOException {
+ List<AnalysisResult> results = new LinkedList<>();
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+
+ OALParser parser = new OALParser(tokens);
+
+ ParseTree tree = parser.root();
+ ParseTreeWalker walker = new ParseTreeWalker();
+
+ walker.walk(new OALListener(results), tree);
+
+ return results;
+ }
+
+ public void close() {
+ }
+}
diff --git a/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
new file mode 100644
index 0000000..83e6baf
--- /dev/null
+++ b/oal-parser/src/test/java/org/apache/skywalking/oal/tool/parser/ScriptParserTest.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oal.tool.parser;
+
+import java.io.IOException;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ScriptParserTest {
+ @Test
+ public void testParse() throws IOException {
+ ScriptParser parser = ScriptParser.createFromScriptText(
+ "Endpoint_avg = from(Endpoint.latency).avg(); //comment test" + "\n" +
+ "Service_avg = from(Endpoint.latency).avg()"
+ );
+ List<AnalysisResult> results = parser.parse();
+
+ Assert.assertEquals(2, results.size());
+
+ AnalysisResult endpointAvg = results.get(0);
+ Assert.assertEquals("Endpoint_avg", endpointAvg.getMetricName());
+
+ AnalysisResult serviceAvg = results.get(1);
+ Assert.assertEquals("Service_avg", serviceAvg.getMetricName());
+ }
+}
diff --git a/oal-syntax/src/test/resources/oal_test.oal b/oal-parser/src/test/resources/oal_test.oal
similarity index 100%
rename from oal-syntax/src/test/resources/oal_test.oal
rename to oal-parser/src/test/resources/oal_test.oal
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/Main.class b/oal-parser/target/classes/org/apache/skywalking/oal/tool/Main.class
similarity index 100%
rename from oal-syntax/target/classes/org/apache/skywalking/oal/tool/Main.class
rename to oal-parser/target/classes/org/apache/skywalking/oal/tool/Main.class
Binary files differ
diff --git a/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/AnalysisResult.class b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/AnalysisResult.class
new file mode 100644
index 0000000..2c4d1d3
--- /dev/null
+++ b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/AnalysisResult.class
Binary files differ
diff --git a/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/OALListener.class b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/OALListener.class
new file mode 100644
index 0000000..573b463
--- /dev/null
+++ b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/OALListener.class
Binary files differ
diff --git a/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/ScriptParser.class b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/ScriptParser.class
new file mode 100644
index 0000000..cb40261
--- /dev/null
+++ b/oal-parser/target/classes/org/apache/skywalking/oal/tool/parser/ScriptParser.class
Binary files differ
diff --git a/oal-syntax/target/test-classes/oal_test.oal b/oal-parser/target/test-classes/oal_test.oal
similarity index 100%
rename from oal-syntax/target/test-classes/oal_test.oal
rename to oal-parser/target/test-classes/oal_test.oal
diff --git a/oal-parser/target/test-classes/org/apache/skywalking/oal/tool/parser/ScriptParserTest.class b/oal-parser/target/test-classes/org/apache/skywalking/oal/tool/parser/ScriptParserTest.class
new file mode 100644
index 0000000..f5a0b37
--- /dev/null
+++ b/oal-parser/target/test-classes/org/apache/skywalking/oal/tool/parser/ScriptParserTest.class
Binary files differ
diff --git a/oal-syntax/pom.xml b/oal-syntax/pom.xml
index 7d847bb..734f5fa 100644
--- a/oal-syntax/pom.xml
+++ b/oal-syntax/pom.xml
@@ -36,11 +36,6 @@
<artifactId>antlr4</artifactId>
<version>4.7.1</version>
</dependency>
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- <version>1.4</version>
- </dependency>
</dependencies>
<build>
@@ -48,7 +43,7 @@
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
- <version>4.3</version>
+ <version>4.7.1</version>
<executions>
<execution>
<id>antlr</id>
diff --git a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4 b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
index 9345bc9..c7811d1 100644
--- a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
+++ b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
@@ -59,6 +59,8 @@
-> channel(HIDDEN)
;
+SPACE: [ \t\r\n]+ -> channel(HIDDEN);
+
// Identifiers
IDENTIFIER: Letter LetterOrDigit*;
@@ -100,4 +102,5 @@
LR_BRACKET: '(';
RR_BRACKET: ')';
COMMA: ',';
-SEMI: ';';
\ No newline at end of file
+SEMI: ';';
+EQUAL: '=';
\ No newline at end of file
diff --git a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
index f6a4c1b..10c3842 100644
--- a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
+++ b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
@@ -1,21 +1,3 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
FROM=1
FILTER=2
SRC_ALL=3
@@ -34,12 +16,14 @@
STRING_LITERAL=16
DelimitedComment=17
LineComment=18
-IDENTIFIER=19
-DOT=20
-LR_BRACKET=21
-RR_BRACKET=22
-COMMA=23
-SEMI=24
+SPACE=19
+IDENTIFIER=20
+DOT=21
+LR_BRACKET=22
+RR_BRACKET=23
+COMMA=24
+SEMI=25
+EQUAL=26
'from'=1
'filter'=2
'All'=3
@@ -50,8 +34,9 @@
'ServiceInstanceRelation'=8
'EndpointRelation'=9
'ServiceInstance_JVM_Memory_Pool'=12
-'.'=20
-'('=21
-')'=22
-','=23
-';'=24
+'.'=21
+'('=22
+')'=23
+','=24
+';'=25
+'='=26
diff --git a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4 b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
index 65fdff1..3c49751 100644
--- a/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
+++ b/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
@@ -26,19 +26,35 @@
// Top Level Description
root
- : metricStatements? DelimitedComment ? LineComment ? EOF
+ : (aggregationStatement)*
;
-metricStatements
- : metricStatement*
+aggregationStatement
+ : variable (SPACE)? EQUAL (SPACE)? metricStatement DelimitedComment? LineComment? (SEMI|EOF)
;
metricStatement
- : FROM '(' source '.' IDENTIFIER ')'
+ : FROM LR_BRACKET source DOT IDENTIFIER RR_BRACKET DOT aggregateFunction
;
source
: SRC_ALL | SRC_SERVICE | SRC_SERVICE_INSTANCE | SRC_ENDPOINT |
SRC_SERVICE_RELATION | SRC_SERVICE_INSTANCE_RELATION | SRC_ENDPOINT_RELATION |
SRC_SERVICE_INSTANCE_JVM_CPU | SRC_SERVICE_INSTANCE_JVM_MEMORY | SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL // JVM source of service instance
+ ;
+
+variable
+ : IDENTIFIER
+ ;
+
+aggregateFunction
+ : functionName LR_BRACKET (filterExpression)? RR_BRACKET
+ ;
+
+functionName
+ : IDENTIFIER
+ ;
+
+filterExpression
+ :
;
\ No newline at end of file
diff --git a/oal-syntax/target/classes/META-INF/DEPENDENCIES b/oal-syntax/target/classes/META-INF/DEPENDENCIES
index d7e502c..2764812 100644
--- a/oal-syntax/target/classes/META-INF/DEPENDENCIES
+++ b/oal-syntax/target/classes/META-INF/DEPENDENCIES
@@ -28,10 +28,6 @@
- JSR 353 (JSON Processing) Default Provider (http://jsonp.java.net) org.glassfish:javax.json:bundle:1.0.4
License: Dual license consisting of the CDDL v1.1 and GPL v2 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
-From: 'The Apache Software Foundation' (https://www.apache.org/)
- - Apache Commons CLI (http://commons.apache.org/proper/commons-cli/) commons-cli:commons-cli:jar:1.4
- License: Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt)
-
diff --git a/oal-syntax/target/classes/OALLexer.tokens b/oal-syntax/target/classes/OALLexer.tokens
new file mode 100644
index 0000000..10c3842
--- /dev/null
+++ b/oal-syntax/target/classes/OALLexer.tokens
@@ -0,0 +1,42 @@
+FROM=1
+FILTER=2
+SRC_ALL=3
+SRC_SERVICE=4
+SRC_SERVICE_INSTANCE=5
+SRC_ENDPOINT=6
+SRC_SERVICE_RELATION=7
+SRC_SERVICE_INSTANCE_RELATION=8
+SRC_ENDPOINT_RELATION=9
+SRC_SERVICE_INSTANCE_JVM_CPU=10
+SRC_SERVICE_INSTANCE_JVM_MEMORY=11
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
+DECIMAL_LITERAL=13
+BOOL_LITERAL=14
+CHAR_LITERAL=15
+STRING_LITERAL=16
+DelimitedComment=17
+LineComment=18
+SPACE=19
+IDENTIFIER=20
+DOT=21
+LR_BRACKET=22
+RR_BRACKET=23
+COMMA=24
+SEMI=25
+EQUAL=26
+'from'=1
+'filter'=2
+'All'=3
+'Service'=4
+'ServiceInstance'=5
+'Endpoint'=6
+'ServiceRelation'=7
+'ServiceInstanceRelation'=8
+'EndpointRelation'=9
+'ServiceInstance_JVM_Memory_Pool'=12
+'.'=21
+'('=22
+')'=23
+','=24
+';'=25
+'='=26
diff --git a/oal-syntax/target/classes/OALParser.tokens b/oal-syntax/target/classes/OALParser.tokens
new file mode 100644
index 0000000..10c3842
--- /dev/null
+++ b/oal-syntax/target/classes/OALParser.tokens
@@ -0,0 +1,42 @@
+FROM=1
+FILTER=2
+SRC_ALL=3
+SRC_SERVICE=4
+SRC_SERVICE_INSTANCE=5
+SRC_ENDPOINT=6
+SRC_SERVICE_RELATION=7
+SRC_SERVICE_INSTANCE_RELATION=8
+SRC_ENDPOINT_RELATION=9
+SRC_SERVICE_INSTANCE_JVM_CPU=10
+SRC_SERVICE_INSTANCE_JVM_MEMORY=11
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
+DECIMAL_LITERAL=13
+BOOL_LITERAL=14
+CHAR_LITERAL=15
+STRING_LITERAL=16
+DelimitedComment=17
+LineComment=18
+SPACE=19
+IDENTIFIER=20
+DOT=21
+LR_BRACKET=22
+RR_BRACKET=23
+COMMA=24
+SEMI=25
+EQUAL=26
+'from'=1
+'filter'=2
+'All'=3
+'Service'=4
+'ServiceInstance'=5
+'Endpoint'=6
+'ServiceRelation'=7
+'ServiceInstanceRelation'=8
+'EndpointRelation'=9
+'ServiceInstance_JVM_Memory_Pool'=12
+'.'=21
+'('=22
+')'=23
+','=24
+';'=25
+'='=26
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.class
index f9557cc..111519e 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.interp b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.interp
new file mode 100644
index 0000000..6444ad4
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALLexer.interp
@@ -0,0 +1,101 @@
+token literal names:
+null
+'from'
+'filter'
+'All'
+'Service'
+'ServiceInstance'
+'Endpoint'
+'ServiceRelation'
+'ServiceInstanceRelation'
+'EndpointRelation'
+null
+null
+'ServiceInstance_JVM_Memory_Pool'
+null
+null
+null
+null
+null
+null
+null
+null
+'.'
+'('
+')'
+','
+';'
+'='
+
+token symbolic names:
+null
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+rule names:
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+EscapeSequence
+HexDigits
+HexDigit
+Digits
+LetterOrDigit
+Letter
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 28, 407, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 257, 10, 14, 3, 14, 6, 14, 260, 10, 14, 13, 14, 14, 14, 261, 3, 14, 5, 14, 265, 10, 14, 5, 14, 267, 10, 14, 3, 14, 5, 14, 270, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 281, 10, 15, 3, 16, 3, 16, 3, 16, 5, 16, 286, 10, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 7, 17, 293, 10, 17, 12, 17, 14, 17, 296, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 305, 10, 18, 12, 18, 14, 18, 308, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 319, 10, 19, 12, 19, 14, 19, 322, 11, 19, 3, 19, 3, 19, 3, 20, 6, 20, 327, 10, 20, 13, 20, 14, 20, 328, 3, 20, 3, 20, 3, 21, 3, 21, 7, 21, 335, 10, 21, 12, 21, 14, 21, 338, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 344, 10, 22, 3, 22, 5, 22, 347, 10, 22, 3, 22, 3, 22, 3, 22, 6, 22, 352, 10, 22, 13, 22, 14, 22, 353, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 361, 10, 22, 3, 23, 3, 23, 3, 23, 7, 23, 366, 10, 23, 12, 23, 14, 23, 369, 11, 23, 3, 23, 5, 23, 372, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 7, 25, 378, 10, 25, 12, 25, 14, 25, 381, 11, 25, 3, 25, 5, 25, 384, 10, 25, 3, 26, 3, 26, 5, 26, 388, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 394, 10, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 306, 2, 34, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 2, 45, 2, 47, 2, 49, 2, 51, 2, 53, 2, 55, 23, 57, 24, 59, 25, 61, 26, 63, 27, 65, 28, 3, 2, 18, 3, 2, 51, 59, 4, 2, 78, 78, 110, 110, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 3, 2, 50, 53, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 59, 4, 2, 50, 59, 97, 97, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 2, 427, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 3, 67, 3, 2, 2, 2, 5, 72, 3, 2, 2, 2, 7, 79, 3, 2, 2, 2, 9, 83, 3, 2, 2, 2, 11, 91, 3, 2, 2, 2, 13, 107, 3, 2, 2, 2, 15, 116, 3, 2, 2, 2, 17, 132, 3, 2, 2, 2, 19, 156, 3, 2, 2, 2, 21, 173, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 221, 3, 2, 2, 2, 27, 266, 3, 2, 2, 2, 29, 280, 3, 2, 2, 2, 31, 282, 3, 2, 2, 2, 33, 289, 3, 2, 2, 2, 35, 299, 3, 2, 2, 2, 37, 314, 3, 2, 2, 2, 39, 326, 3, 2, 2, 2, 41, 332, 3, 2, 2, 2, 43, 360, 3, 2, 2, 2, 45, 362, 3, 2, 2, 2, 47, 373, 3, 2, 2, 2, 49, 375, 3, 2, 2, 2, 51, 387, 3, 2, 2, 2, 53, 393, 3, 2, 2, 2, 55, 395, 3, 2, 2, 2, 57, 397, 3, 2, 2, 2, 59, 399, 3, 2, 2, 2, 61, 401, 3, 2, 2, 2, 63, 403, 3, 2, 2, 2, 65, 405, 3, 2, 2, 2, 67, 68, 7, 104, 2, 2, 68, 69, 7, 116, 2, 2, 69, 70, 7, 113, 2, 2, 70, 71, 7, 111, 2, 2, 71, 4, 3, 2, 2, 2, 72, 73, 7, 104, 2, 2, 73, 74, 7, 107, 2, 2, 74, 75, 7, 110, 2, 2, 75, 76, 7, 118, 2, 2, 76, 77, 7, 103, 2, 2, 77, 78, 7, 116, 2, 2, 78, 6, 3, 2, 2, 2, 79, 80, 7, 67, 2, 2, 80, 81, 7, 110, 2, 2, 81, 82, 7, 110, 2, 2, 82, 8, 3, 2, 2, 2, 83, 84, 7, 85, 2, 2, 84, 85, 7, 103, 2, 2, 85, 86, 7, 116, 2, 2, 86, 87, 7, 120, 2, 2, 87, 88, 7, 107, 2, 2, 88, 89, 7, 101, 2, 2, 89, 90, 7, 103, 2, 2, 90, 10, 3, 2, 2, 2, 91, 92, 7, 85, 2, 2, 92, 93, 7, 103, 2, 2, 93, 94, 7, 116, 2, 2, 94, 95, 7, 120, 2, 2, 95, 96, 7, 107, 2, 2, 96, 97, 7, 101, 2, 2, 97, 98, 7, 103, 2, 2, 98, 99, 7, 75, 2, 2, 99, 100, 7, 112, 2, 2, 100, 101, 7, 117, 2, 2, 101, 102, 7, 118, 2, 2, 102, 103, 7, 99, 2, 2, 103, 104, 7, 112, 2, 2, 104, 105, 7, 101, 2, 2, 105, 106, 7, 103, 2, 2, 106, 12, 3, 2, 2, 2, 107, 108, 7, 71, 2, 2, 108, 109, 7, 112, 2, 2, 109, 110, 7, 102, 2, 2, 110, 111, 7, 114, 2, 2, 111, 112, 7, 113, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 112, 2, 2, 114, 115, 7, 118, 2, 2, 115, 14, 3, 2, 2, 2, 116, 117, 7, 85, 2, 2, 117, 118, 7, 103, 2, 2, 118, 119, 7, 116, 2, 2, 119, 120, 7, 120, 2, 2, 120, 121, 7, 107, 2, 2, 121, 122, 7, 101, 2, 2, 122, 123, 7, 103, 2, 2, 123, 124, 7, 84, 2, 2, 124, 125, 7, 103, 2, 2, 125, 126, 7, 110, 2, 2, 126, 127, 7, 99, 2, 2, 127, 128, 7, 118, 2, 2, 128, 129, 7, 107, 2, 2, 129, 130, 7, 113, 2, 2, 130, 131, 7, 112, 2, 2, 131, 16, 3, 2, 2, 2, 132, 133, 7, 85, 2, 2, 133, 134, 7, 103, 2, 2, 134, 135, 7, 116, 2, 2, 135, 136, 7, 120, 2, 2, 136, 137, 7, 107, 2, 2, 137, 138, 7, 101, 2, 2, 138, 139, 7, 103, 2, 2, 139, 140, 7, 75, 2, 2, 140, 141, 7, 112, 2, 2, 141, 142, 7, 117, 2, 2, 142, 143, 7, 118, 2, 2, 143, 144, 7, 99, 2, 2, 144, 145, 7, 112, 2, 2, 145, 146, 7, 101, 2, 2, 146, 147, 7, 103, 2, 2, 147, 148, 7, 84, 2, 2, 148, 149, 7, 103, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 99, 2, 2, 151, 152, 7, 118, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 112, 2, 2, 155, 18, 3, 2, 2, 2, 156, 157, 7, 71, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 160, 7, 114, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 107, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 84, 2, 2, 165, 166, 7, 103, 2, 2, 166, 167, 7, 110, 2, 2, 167, 168, 7, 99, 2, 2, 168, 169, 7, 118, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 113, 2, 2, 171, 172, 7, 112, 2, 2, 172, 20, 3, 2, 2, 2, 173, 174, 7, 85, 2, 2, 174, 175, 7, 103, 2, 2, 175, 176, 7, 116, 2, 2, 176, 177, 7, 120, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 101, 2, 2, 179, 180, 7, 103, 2, 2, 180, 181, 7, 75, 2, 2, 181, 182, 7, 112, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 118, 2, 2, 184, 185, 7, 99, 2, 2, 185, 186, 7, 112, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 97, 2, 2, 189, 190, 7, 76, 2, 2, 190, 191, 7, 88, 2, 2, 191, 192, 7, 79, 2, 2, 192, 193, 7, 97, 2, 2, 193, 194, 7, 69, 2, 2, 194, 195, 7, 82, 2, 2, 195, 196, 7, 87, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 85, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 120, 2, 2, 201, 202, 7, 107, 2, 2, 202, 203, 7, 101, 2, 2, 203, 204, 7, 103, 2, 2, 204, 205, 7, 75, 2, 2, 205, 206, 7, 112, 2, 2, 206, 207, 7, 117, 2, 2, 207, 208, 7, 118, 2, 2, 208, 209, 7, 99, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 101, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 97, 2, 2, 213, 214, 7, 76, 2, 2, 214, 215, 7, 88, 2, 2, 215, 216, 7, 79, 2, 2, 216, 217, 7, 97, 2, 2, 217, 218, 7, 69, 2, 2, 218, 219, 7, 82, 2, 2, 219, 220, 7, 87, 2, 2, 220, 24, 3, 2, 2, 2, 221, 222, 7, 85, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 120, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 103, 2, 2, 228, 229, 7, 75, 2, 2, 229, 230, 7, 112, 2, 2, 230, 231, 7, 117, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 99, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 101, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 97, 2, 2, 237, 238, 7, 76, 2, 2, 238, 239, 7, 88, 2, 2, 239, 240, 7, 79, 2, 2, 240, 241, 7, 97, 2, 2, 241, 242, 7, 79, 2, 2, 242, 243, 7, 103, 2, 2, 243, 244, 7, 111, 2, 2, 244, 245, 7, 113, 2, 2, 245, 246, 7, 116, 2, 2, 246, 247, 7, 123, 2, 2, 247, 248, 7, 97, 2, 2, 248, 249, 7, 82, 2, 2, 249, 250, 7, 113, 2, 2, 250, 251, 7, 113, 2, 2, 251, 252, 7, 110, 2, 2, 252, 26, 3, 2, 2, 2, 253, 267, 7, 50, 2, 2, 254, 264, 9, 2, 2, 2, 255, 257, 5, 49, 25, 2, 256, 255, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 265, 3, 2, 2, 2, 258, 260, 7, 97, 2, 2, 259, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 265, 5, 49, 25, 2, 264, 256, 3, 2, 2, 2, 264, 259, 3, 2, 2, 2, 265, 267, 3, 2, 2, 2, 266, 253, 3, 2, 2, 2, 266, 254, 3, 2, 2, 2, 267, 269, 3, 2, 2, 2, 268, 270, 9, 3, 2, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 28, 3, 2, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 116, 2, 2, 273, 274, 7, 119, 2, 2, 274, 281, 7, 103, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 99, 2, 2, 277, 278, 7, 110, 2, 2, 278, 279, 7, 117, 2, 2, 279, 281, 7, 103, 2, 2, 280, 271, 3, 2, 2, 2, 280, 275, 3, 2, 2, 2, 281, 30, 3, 2, 2, 2, 282, 285, 7, 41, 2, 2, 283, 286, 10, 4, 2, 2, 284, 286, 5, 43, 22, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 41, 2, 2, 288, 32, 3, 2, 2, 2, 289, 294, 7, 36, 2, 2, 290, 293, 10, 5, 2, 2, 291, 293, 5, 43, 22, 2, 292, 290, 3, 2, 2, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 297, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 298, 7, 36, 2, 2, 298, 34, 3, 2, 2, 2, 299, 300, 7, 49, 2, 2, 300, 301, 7, 44, 2, 2, 301, 306, 3, 2, 2, 2, 302, 305, 5, 35, 18, 2, 303, 305, 11, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 303, 3, 2, 2, 2, 305, 308, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 309, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 309, 310, 7, 44, 2, 2, 310, 311, 7, 49, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 8, 18, 2, 2, 313, 36, 3, 2, 2, 2, 314, 315, 7, 49, 2, 2, 315, 316, 7, 49, 2, 2, 316, 320, 3, 2, 2, 2, 317, 319, 10, 6, 2, 2, 318, 317, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 8, 19, 2, 2, 324, 38, 3, 2, 2, 2, 325, 327, 9, 7, 2, 2, 326, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 8, 20, 2, 2, 331, 40, 3, 2, 2, 2, 332, 336, 5, 53, 27, 2, 333, 335, 5, 51, 26, 2, 334, 333, 3, 2, 2, 2, 335, 338, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 42, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 339, 340, 7, 94, 2, 2, 340, 361, 9, 8, 2, 2, 341, 346, 7, 94, 2, 2, 342, 344, 9, 9, 2, 2, 343, 342, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 347, 9, 10, 2, 2, 346, 343, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 361, 9, 10, 2, 2, 349, 351, 7, 94, 2, 2, 350, 352, 7, 119, 2, 2, 351, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 5, 47, 24, 2, 356, 357, 5, 47, 24, 2, 357, 358, 5, 47, 24, 2, 358, 359, 5, 47, 24, 2, 359, 361, 3, 2, 2, 2, 360, 339, 3, 2, 2, 2, 360, 341, 3, 2, 2, 2, 360, 349, 3, 2, 2, 2, 361, 44, 3, 2, 2, 2, 362, 371, 5, 47, 24, 2, 363, 366, 5, 47, 24, 2, 364, 366, 7, 97, 2, 2, 365, 363, 3, 2, 2, 2, 365, 364, 3, 2, 2, 2, 366, 369, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 370, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 372, 5, 47, 24, 2, 371, 367, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 46, 3, 2, 2, 2, 373, 374, 9, 11, 2, 2, 374, 48, 3, 2, 2, 2, 375, 383, 9, 12, 2, 2, 376, 378, 9, 13, 2, 2, 377, 376, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 384, 9, 12, 2, 2, 383, 379, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 50, 3, 2, 2, 2, 385, 388, 5, 53, 27, 2, 386, 388, 9, 12, 2, 2, 387, 385, 3, 2, 2, 2, 387, 386, 3, 2, 2, 2, 388, 52, 3, 2, 2, 2, 389, 394, 9, 14, 2, 2, 390, 394, 10, 15, 2, 2, 391, 392, 9, 16, 2, 2, 392, 394, 9, 17, 2, 2, 393, 389, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 54, 3, 2, 2, 2, 395, 396, 7, 48, 2, 2, 396, 56, 3, 2, 2, 2, 397, 398, 7, 42, 2, 2, 398, 58, 3, 2, 2, 2, 399, 400, 7, 43, 2, 2, 400, 60, 3, 2, 2, 2, 401, 402, 7, 46, 2, 2, 402, 62, 3, 2, 2, 2, 403, 404, 7, 61, 2, 2, 404, 64, 3, 2, 2, 2, 405, 406, 7, 63, 2, 2, 406, 66, 3, 2, 2, 2, 28, 2, 256, 261, 264, 266, 269, 280, 285, 292, 294, 304, 306, 320, 328, 336, 343, 346, 353, 360, 365, 367, 371, 379, 383, 387, 393, 3, 2, 3, 2]
\ No newline at end of file
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregateFunctionContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregateFunctionContext.class
new file mode 100644
index 0000000..d8b7c8e
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregateFunctionContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregationStatementContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregationStatementContext.class
new file mode 100644
index 0000000..5c27a6a
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$AggregationStatementContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FilterExpressionContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FilterExpressionContext.class
new file mode 100644
index 0000000..18a7b73
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FilterExpressionContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FunctionNameContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FunctionNameContext.class
new file mode 100644
index 0000000..129e981
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$FunctionNameContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementContext.class
index 16ec3bc..7484203 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementContext.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementsContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementsContext.class
deleted file mode 100644
index 9f50c4b..0000000
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementsContext.class
+++ /dev/null
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class
index 846b9bf..16d70ad 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$SourceContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$SourceContext.class
index 6dc4fd1..071cba9 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$SourceContext.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$SourceContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$VariableContext.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$VariableContext.class
new file mode 100644
index 0000000..fda239a
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser$VariableContext.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.class
index ce89ba0..c92d0e9 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.interp b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.interp
new file mode 100644
index 0000000..cf82033
--- /dev/null
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParser.interp
@@ -0,0 +1,71 @@
+token literal names:
+null
+'from'
+'filter'
+'All'
+'Service'
+'ServiceInstance'
+'Endpoint'
+'ServiceRelation'
+'ServiceInstanceRelation'
+'EndpointRelation'
+null
+null
+'ServiceInstance_JVM_Memory_Pool'
+null
+null
+null
+null
+null
+null
+null
+null
+'.'
+'('
+')'
+','
+';'
+'='
+
+token symbolic names:
+null
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+rule names:
+root
+aggregationStatement
+metricStatement
+source
+variable
+aggregateFunction
+functionName
+filterExpression
+
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 28, 66, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 3, 3, 3, 5, 3, 27, 10, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 3, 5, 3, 38, 10, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 5, 7, 58, 10, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 2, 2, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 4, 3, 3, 27, 27, 3, 2, 5, 14, 2, 63, 2, 21, 3, 2, 2, 2, 4, 24, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 50, 3, 2, 2, 2, 10, 52, 3, 2, 2, 2, 12, 54, 3, 2, 2, 2, 14, 61, 3, 2, 2, 2, 16, 63, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 3, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 26, 5, 10, 6, 2, 25, 27, 7, 21, 2, 2, 26, 25, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 28, 3, 2, 2, 2, 28, 30, 7, 28, 2, 2, 29, 31, 7, 21, 2, 2, 30, 29, 3, 2, 2, 2, 30, 31, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 5, 6, 4, 2, 33, 35, 7, 19, 2, 2, 34, 33, 3, 2, 2, 2, 34, 35, 3, 2, 2, 2, 35, 37, 3, 2, 2, 2, 36, 38, 7, 20, 2, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 39, 3, 2, 2, 2, 39, 40, 9, 2, 2, 2, 40, 5, 3, 2, 2, 2, 41, 42, 7, 3, 2, 2, 42, 43, 7, 24, 2, 2, 43, 44, 5, 8, 5, 2, 44, 45, 7, 23, 2, 2, 45, 46, 7, 22, 2, 2, 46, 47, 7, 25, 2, 2, 47, 48, 7, 23, 2, 2, 48, 49, 5, 12, 7, 2, 49, 7, 3, 2, 2, 2, 50, 51, 9, 3, 2, 2, 51, 9, 3, 2, 2, 2, 52, 53, 7, 22, 2, 2, 53, 11, 3, 2, 2, 2, 54, 55, 5, 14, 8, 2, 55, 57, 7, 24, 2, 2, 56, 58, 5, 16, 9, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 60, 7, 25, 2, 2, 60, 13, 3, 2, 2, 2, 61, 62, 7, 22, 2, 2, 62, 15, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 17, 3, 2, 2, 2, 8, 21, 26, 30, 34, 37, 57]
\ No newline at end of file
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class
index b79a112..fefd9f5 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class
Binary files differ
diff --git a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserListener.class b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserListener.class
index 5f93eea..a36d79d 100644
--- a/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserListener.class
+++ b/oal-syntax/target/classes/org/apache/skywalking/oal/tool/grammar/OALParserListener.class
Binary files differ
diff --git a/oal-syntax/target/generated-sources/antlr4/OALLexer.tokens b/oal-syntax/target/generated-sources/antlr4/OALLexer.tokens
index 19d4b02..10c3842 100644
--- a/oal-syntax/target/generated-sources/antlr4/OALLexer.tokens
+++ b/oal-syntax/target/generated-sources/antlr4/OALLexer.tokens
@@ -1,39 +1,42 @@
-COMMA=23
+FROM=1
FILTER=2
SRC_ALL=3
-DOT=20
-SEMI=24
-SRC_SERVICE_INSTANCE=5
-SRC_SERVICE_INSTANCE_JVM_MEMORY=11
-LineComment=18
-LR_BRACKET=21
-FROM=1
-SRC_SERVICE_INSTANCE_JVM_CPU=10
-DelimitedComment=17
SRC_SERVICE=4
-SRC_SERVICE_RELATION=7
-BOOL_LITERAL=14
-SRC_ENDPOINT_RELATION=9
-SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
+SRC_SERVICE_INSTANCE=5
SRC_ENDPOINT=6
-RR_BRACKET=22
+SRC_SERVICE_RELATION=7
SRC_SERVICE_INSTANCE_RELATION=8
-STRING_LITERAL=16
-CHAR_LITERAL=15
-IDENTIFIER=19
+SRC_ENDPOINT_RELATION=9
+SRC_SERVICE_INSTANCE_JVM_CPU=10
+SRC_SERVICE_INSTANCE_JVM_MEMORY=11
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
DECIMAL_LITERAL=13
-'.'=20
-','=23
-'Service'=4
-')'=22
-'('=21
-'ServiceInstanceRelation'=8
-'ServiceInstance_JVM_Memory_Pool'=12
+BOOL_LITERAL=14
+CHAR_LITERAL=15
+STRING_LITERAL=16
+DelimitedComment=17
+LineComment=18
+SPACE=19
+IDENTIFIER=20
+DOT=21
+LR_BRACKET=22
+RR_BRACKET=23
+COMMA=24
+SEMI=25
+EQUAL=26
'from'=1
-'All'=3
-'EndpointRelation'=9
-';'=24
-'Endpoint'=6
'filter'=2
-'ServiceRelation'=7
+'All'=3
+'Service'=4
'ServiceInstance'=5
+'Endpoint'=6
+'ServiceRelation'=7
+'ServiceInstanceRelation'=8
+'EndpointRelation'=9
+'ServiceInstance_JVM_Memory_Pool'=12
+'.'=21
+'('=22
+')'=23
+','=24
+';'=25
+'='=26
diff --git a/oal-syntax/target/generated-sources/antlr4/OALParser.tokens b/oal-syntax/target/generated-sources/antlr4/OALParser.tokens
index 19d4b02..10c3842 100644
--- a/oal-syntax/target/generated-sources/antlr4/OALParser.tokens
+++ b/oal-syntax/target/generated-sources/antlr4/OALParser.tokens
@@ -1,39 +1,42 @@
-COMMA=23
+FROM=1
FILTER=2
SRC_ALL=3
-DOT=20
-SEMI=24
-SRC_SERVICE_INSTANCE=5
-SRC_SERVICE_INSTANCE_JVM_MEMORY=11
-LineComment=18
-LR_BRACKET=21
-FROM=1
-SRC_SERVICE_INSTANCE_JVM_CPU=10
-DelimitedComment=17
SRC_SERVICE=4
-SRC_SERVICE_RELATION=7
-BOOL_LITERAL=14
-SRC_ENDPOINT_RELATION=9
-SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
+SRC_SERVICE_INSTANCE=5
SRC_ENDPOINT=6
-RR_BRACKET=22
+SRC_SERVICE_RELATION=7
SRC_SERVICE_INSTANCE_RELATION=8
-STRING_LITERAL=16
-CHAR_LITERAL=15
-IDENTIFIER=19
+SRC_ENDPOINT_RELATION=9
+SRC_SERVICE_INSTANCE_JVM_CPU=10
+SRC_SERVICE_INSTANCE_JVM_MEMORY=11
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12
DECIMAL_LITERAL=13
-'.'=20
-','=23
-'Service'=4
-')'=22
-'('=21
-'ServiceInstanceRelation'=8
-'ServiceInstance_JVM_Memory_Pool'=12
+BOOL_LITERAL=14
+CHAR_LITERAL=15
+STRING_LITERAL=16
+DelimitedComment=17
+LineComment=18
+SPACE=19
+IDENTIFIER=20
+DOT=21
+LR_BRACKET=22
+RR_BRACKET=23
+COMMA=24
+SEMI=25
+EQUAL=26
'from'=1
-'All'=3
-'EndpointRelation'=9
-';'=24
-'Endpoint'=6
'filter'=2
-'ServiceRelation'=7
+'All'=3
+'Service'=4
'ServiceInstance'=5
+'Endpoint'=6
+'ServiceRelation'=7
+'ServiceInstanceRelation'=8
+'EndpointRelation'=9
+'ServiceInstance_JVM_Memory_Pool'=12
+'.'=21
+'('=22
+')'=23
+','=24
+';'=25
+'='=26
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.interp b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.interp
new file mode 100644
index 0000000..6444ad4
--- /dev/null
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.interp
@@ -0,0 +1,101 @@
+token literal names:
+null
+'from'
+'filter'
+'All'
+'Service'
+'ServiceInstance'
+'Endpoint'
+'ServiceRelation'
+'ServiceInstanceRelation'
+'EndpointRelation'
+null
+null
+'ServiceInstance_JVM_Memory_Pool'
+null
+null
+null
+null
+null
+null
+null
+null
+'.'
+'('
+')'
+','
+';'
+'='
+
+token symbolic names:
+null
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+rule names:
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+EscapeSequence
+HexDigits
+HexDigit
+Digits
+LetterOrDigit
+Letter
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 28, 407, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 257, 10, 14, 3, 14, 6, 14, 260, 10, 14, 13, 14, 14, 14, 261, 3, 14, 5, 14, 265, 10, 14, 5, 14, 267, 10, 14, 3, 14, 5, 14, 270, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 281, 10, 15, 3, 16, 3, 16, 3, 16, 5, 16, 286, 10, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 7, 17, 293, 10, 17, 12, 17, 14, 17, 296, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 305, 10, 18, 12, 18, 14, 18, 308, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 319, 10, 19, 12, 19, 14, 19, 322, 11, 19, 3, 19, 3, 19, 3, 20, 6, 20, 327, 10, 20, 13, 20, 14, 20, 328, 3, 20, 3, 20, 3, 21, 3, 21, 7, 21, 335, 10, 21, 12, 21, 14, 21, 338, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 344, 10, 22, 3, 22, 5, 22, 347, 10, 22, 3, 22, 3, 22, 3, 22, 6, 22, 352, 10, 22, 13, 22, 14, 22, 353, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 361, 10, 22, 3, 23, 3, 23, 3, 23, 7, 23, 366, 10, 23, 12, 23, 14, 23, 369, 11, 23, 3, 23, 5, 23, 372, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 7, 25, 378, 10, 25, 12, 25, 14, 25, 381, 11, 25, 3, 25, 5, 25, 384, 10, 25, 3, 26, 3, 26, 5, 26, 388, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 394, 10, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 306, 2, 34, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 2, 45, 2, 47, 2, 49, 2, 51, 2, 53, 2, 55, 23, 57, 24, 59, 25, 61, 26, 63, 27, 65, 28, 3, 2, 18, 3, 2, 51, 59, 4, 2, 78, 78, 110, 110, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 10, 2, 36, 36, 41, 41, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, 118, 118, 3, 2, 50, 53, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 59, 4, 2, 50, 59, 97, 97, 6, 2, 38, 38, 67, 92, 97, 97, 99, 124, 4, 2, 2, 129, 55298, 56321, 3, 2, 55298, 56321, 3, 2, 56322, 57345, 2, 427, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 3, 67, 3, 2, 2, 2, 5, 72, 3, 2, 2, 2, 7, 79, 3, 2, 2, 2, 9, 83, 3, 2, 2, 2, 11, 91, 3, 2, 2, 2, 13, 107, 3, 2, 2, 2, 15, 116, 3, 2, 2, 2, 17, 132, 3, 2, 2, 2, 19, 156, 3, 2, 2, 2, 21, 173, 3, 2, 2, 2, 23, 197, 3, 2, 2, 2, 25, 221, 3, 2, 2, 2, 27, 266, 3, 2, 2, 2, 29, 280, 3, 2, 2, 2, 31, 282, 3, 2, 2, 2, 33, 289, 3, 2, 2, 2, 35, 299, 3, 2, 2, 2, 37, 314, 3, 2, 2, 2, 39, 326, 3, 2, 2, 2, 41, 332, 3, 2, 2, 2, 43, 360, 3, 2, 2, 2, 45, 362, 3, 2, 2, 2, 47, 373, 3, 2, 2, 2, 49, 375, 3, 2, 2, 2, 51, 387, 3, 2, 2, 2, 53, 393, 3, 2, 2, 2, 55, 395, 3, 2, 2, 2, 57, 397, 3, 2, 2, 2, 59, 399, 3, 2, 2, 2, 61, 401, 3, 2, 2, 2, 63, 403, 3, 2, 2, 2, 65, 405, 3, 2, 2, 2, 67, 68, 7, 104, 2, 2, 68, 69, 7, 116, 2, 2, 69, 70, 7, 113, 2, 2, 70, 71, 7, 111, 2, 2, 71, 4, 3, 2, 2, 2, 72, 73, 7, 104, 2, 2, 73, 74, 7, 107, 2, 2, 74, 75, 7, 110, 2, 2, 75, 76, 7, 118, 2, 2, 76, 77, 7, 103, 2, 2, 77, 78, 7, 116, 2, 2, 78, 6, 3, 2, 2, 2, 79, 80, 7, 67, 2, 2, 80, 81, 7, 110, 2, 2, 81, 82, 7, 110, 2, 2, 82, 8, 3, 2, 2, 2, 83, 84, 7, 85, 2, 2, 84, 85, 7, 103, 2, 2, 85, 86, 7, 116, 2, 2, 86, 87, 7, 120, 2, 2, 87, 88, 7, 107, 2, 2, 88, 89, 7, 101, 2, 2, 89, 90, 7, 103, 2, 2, 90, 10, 3, 2, 2, 2, 91, 92, 7, 85, 2, 2, 92, 93, 7, 103, 2, 2, 93, 94, 7, 116, 2, 2, 94, 95, 7, 120, 2, 2, 95, 96, 7, 107, 2, 2, 96, 97, 7, 101, 2, 2, 97, 98, 7, 103, 2, 2, 98, 99, 7, 75, 2, 2, 99, 100, 7, 112, 2, 2, 100, 101, 7, 117, 2, 2, 101, 102, 7, 118, 2, 2, 102, 103, 7, 99, 2, 2, 103, 104, 7, 112, 2, 2, 104, 105, 7, 101, 2, 2, 105, 106, 7, 103, 2, 2, 106, 12, 3, 2, 2, 2, 107, 108, 7, 71, 2, 2, 108, 109, 7, 112, 2, 2, 109, 110, 7, 102, 2, 2, 110, 111, 7, 114, 2, 2, 111, 112, 7, 113, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 112, 2, 2, 114, 115, 7, 118, 2, 2, 115, 14, 3, 2, 2, 2, 116, 117, 7, 85, 2, 2, 117, 118, 7, 103, 2, 2, 118, 119, 7, 116, 2, 2, 119, 120, 7, 120, 2, 2, 120, 121, 7, 107, 2, 2, 121, 122, 7, 101, 2, 2, 122, 123, 7, 103, 2, 2, 123, 124, 7, 84, 2, 2, 124, 125, 7, 103, 2, 2, 125, 126, 7, 110, 2, 2, 126, 127, 7, 99, 2, 2, 127, 128, 7, 118, 2, 2, 128, 129, 7, 107, 2, 2, 129, 130, 7, 113, 2, 2, 130, 131, 7, 112, 2, 2, 131, 16, 3, 2, 2, 2, 132, 133, 7, 85, 2, 2, 133, 134, 7, 103, 2, 2, 134, 135, 7, 116, 2, 2, 135, 136, 7, 120, 2, 2, 136, 137, 7, 107, 2, 2, 137, 138, 7, 101, 2, 2, 138, 139, 7, 103, 2, 2, 139, 140, 7, 75, 2, 2, 140, 141, 7, 112, 2, 2, 141, 142, 7, 117, 2, 2, 142, 143, 7, 118, 2, 2, 143, 144, 7, 99, 2, 2, 144, 145, 7, 112, 2, 2, 145, 146, 7, 101, 2, 2, 146, 147, 7, 103, 2, 2, 147, 148, 7, 84, 2, 2, 148, 149, 7, 103, 2, 2, 149, 150, 7, 110, 2, 2, 150, 151, 7, 99, 2, 2, 151, 152, 7, 118, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 113, 2, 2, 154, 155, 7, 112, 2, 2, 155, 18, 3, 2, 2, 2, 156, 157, 7, 71, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 102, 2, 2, 159, 160, 7, 114, 2, 2, 160, 161, 7, 113, 2, 2, 161, 162, 7, 107, 2, 2, 162, 163, 7, 112, 2, 2, 163, 164, 7, 118, 2, 2, 164, 165, 7, 84, 2, 2, 165, 166, 7, 103, 2, 2, 166, 167, 7, 110, 2, 2, 167, 168, 7, 99, 2, 2, 168, 169, 7, 118, 2, 2, 169, 170, 7, 107, 2, 2, 170, 171, 7, 113, 2, 2, 171, 172, 7, 112, 2, 2, 172, 20, 3, 2, 2, 2, 173, 174, 7, 85, 2, 2, 174, 175, 7, 103, 2, 2, 175, 176, 7, 116, 2, 2, 176, 177, 7, 120, 2, 2, 177, 178, 7, 107, 2, 2, 178, 179, 7, 101, 2, 2, 179, 180, 7, 103, 2, 2, 180, 181, 7, 75, 2, 2, 181, 182, 7, 112, 2, 2, 182, 183, 7, 117, 2, 2, 183, 184, 7, 118, 2, 2, 184, 185, 7, 99, 2, 2, 185, 186, 7, 112, 2, 2, 186, 187, 7, 101, 2, 2, 187, 188, 7, 103, 2, 2, 188, 189, 7, 97, 2, 2, 189, 190, 7, 76, 2, 2, 190, 191, 7, 88, 2, 2, 191, 192, 7, 79, 2, 2, 192, 193, 7, 97, 2, 2, 193, 194, 7, 69, 2, 2, 194, 195, 7, 82, 2, 2, 195, 196, 7, 87, 2, 2, 196, 22, 3, 2, 2, 2, 197, 198, 7, 85, 2, 2, 198, 199, 7, 103, 2, 2, 199, 200, 7, 116, 2, 2, 200, 201, 7, 120, 2, 2, 201, 202, 7, 107, 2, 2, 202, 203, 7, 101, 2, 2, 203, 204, 7, 103, 2, 2, 204, 205, 7, 75, 2, 2, 205, 206, 7, 112, 2, 2, 206, 207, 7, 117, 2, 2, 207, 208, 7, 118, 2, 2, 208, 209, 7, 99, 2, 2, 209, 210, 7, 112, 2, 2, 210, 211, 7, 101, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 97, 2, 2, 213, 214, 7, 76, 2, 2, 214, 215, 7, 88, 2, 2, 215, 216, 7, 79, 2, 2, 216, 217, 7, 97, 2, 2, 217, 218, 7, 69, 2, 2, 218, 219, 7, 82, 2, 2, 219, 220, 7, 87, 2, 2, 220, 24, 3, 2, 2, 2, 221, 222, 7, 85, 2, 2, 222, 223, 7, 103, 2, 2, 223, 224, 7, 116, 2, 2, 224, 225, 7, 120, 2, 2, 225, 226, 7, 107, 2, 2, 226, 227, 7, 101, 2, 2, 227, 228, 7, 103, 2, 2, 228, 229, 7, 75, 2, 2, 229, 230, 7, 112, 2, 2, 230, 231, 7, 117, 2, 2, 231, 232, 7, 118, 2, 2, 232, 233, 7, 99, 2, 2, 233, 234, 7, 112, 2, 2, 234, 235, 7, 101, 2, 2, 235, 236, 7, 103, 2, 2, 236, 237, 7, 97, 2, 2, 237, 238, 7, 76, 2, 2, 238, 239, 7, 88, 2, 2, 239, 240, 7, 79, 2, 2, 240, 241, 7, 97, 2, 2, 241, 242, 7, 79, 2, 2, 242, 243, 7, 103, 2, 2, 243, 244, 7, 111, 2, 2, 244, 245, 7, 113, 2, 2, 245, 246, 7, 116, 2, 2, 246, 247, 7, 123, 2, 2, 247, 248, 7, 97, 2, 2, 248, 249, 7, 82, 2, 2, 249, 250, 7, 113, 2, 2, 250, 251, 7, 113, 2, 2, 251, 252, 7, 110, 2, 2, 252, 26, 3, 2, 2, 2, 253, 267, 7, 50, 2, 2, 254, 264, 9, 2, 2, 2, 255, 257, 5, 49, 25, 2, 256, 255, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 265, 3, 2, 2, 2, 258, 260, 7, 97, 2, 2, 259, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 265, 5, 49, 25, 2, 264, 256, 3, 2, 2, 2, 264, 259, 3, 2, 2, 2, 265, 267, 3, 2, 2, 2, 266, 253, 3, 2, 2, 2, 266, 254, 3, 2, 2, 2, 267, 269, 3, 2, 2, 2, 268, 270, 9, 3, 2, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 28, 3, 2, 2, 2, 271, 272, 7, 118, 2, 2, 272, 273, 7, 116, 2, 2, 273, 274, 7, 119, 2, 2, 274, 281, 7, 103, 2, 2, 275, 276, 7, 104, 2, 2, 276, 277, 7, 99, 2, 2, 277, 278, 7, 110, 2, 2, 278, 279, 7, 117, 2, 2, 279, 281, 7, 103, 2, 2, 280, 271, 3, 2, 2, 2, 280, 275, 3, 2, 2, 2, 281, 30, 3, 2, 2, 2, 282, 285, 7, 41, 2, 2, 283, 286, 10, 4, 2, 2, 284, 286, 5, 43, 22, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 7, 41, 2, 2, 288, 32, 3, 2, 2, 2, 289, 294, 7, 36, 2, 2, 290, 293, 10, 5, 2, 2, 291, 293, 5, 43, 22, 2, 292, 290, 3, 2, 2, 2, 292, 291, 3, 2, 2, 2, 293, 296, 3, 2, 2, 2, 294, 292, 3, 2, 2, 2, 294, 295, 3, 2, 2, 2, 295, 297, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 297, 298, 7, 36, 2, 2, 298, 34, 3, 2, 2, 2, 299, 300, 7, 49, 2, 2, 300, 301, 7, 44, 2, 2, 301, 306, 3, 2, 2, 2, 302, 305, 5, 35, 18, 2, 303, 305, 11, 2, 2, 2, 304, 302, 3, 2, 2, 2, 304, 303, 3, 2, 2, 2, 305, 308, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 306, 304, 3, 2, 2, 2, 307, 309, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 309, 310, 7, 44, 2, 2, 310, 311, 7, 49, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 8, 18, 2, 2, 313, 36, 3, 2, 2, 2, 314, 315, 7, 49, 2, 2, 315, 316, 7, 49, 2, 2, 316, 320, 3, 2, 2, 2, 317, 319, 10, 6, 2, 2, 318, 317, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 323, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 324, 8, 19, 2, 2, 324, 38, 3, 2, 2, 2, 325, 327, 9, 7, 2, 2, 326, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 8, 20, 2, 2, 331, 40, 3, 2, 2, 2, 332, 336, 5, 53, 27, 2, 333, 335, 5, 51, 26, 2, 334, 333, 3, 2, 2, 2, 335, 338, 3, 2, 2, 2, 336, 334, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 42, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 339, 340, 7, 94, 2, 2, 340, 361, 9, 8, 2, 2, 341, 346, 7, 94, 2, 2, 342, 344, 9, 9, 2, 2, 343, 342, 3, 2, 2, 2, 343, 344, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 347, 9, 10, 2, 2, 346, 343, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 361, 9, 10, 2, 2, 349, 351, 7, 94, 2, 2, 350, 352, 7, 119, 2, 2, 351, 350, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 356, 5, 47, 24, 2, 356, 357, 5, 47, 24, 2, 357, 358, 5, 47, 24, 2, 358, 359, 5, 47, 24, 2, 359, 361, 3, 2, 2, 2, 360, 339, 3, 2, 2, 2, 360, 341, 3, 2, 2, 2, 360, 349, 3, 2, 2, 2, 361, 44, 3, 2, 2, 2, 362, 371, 5, 47, 24, 2, 363, 366, 5, 47, 24, 2, 364, 366, 7, 97, 2, 2, 365, 363, 3, 2, 2, 2, 365, 364, 3, 2, 2, 2, 366, 369, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 370, 3, 2, 2, 2, 369, 367, 3, 2, 2, 2, 370, 372, 5, 47, 24, 2, 371, 367, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 46, 3, 2, 2, 2, 373, 374, 9, 11, 2, 2, 374, 48, 3, 2, 2, 2, 375, 383, 9, 12, 2, 2, 376, 378, 9, 13, 2, 2, 377, 376, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 384, 9, 12, 2, 2, 383, 379, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 50, 3, 2, 2, 2, 385, 388, 5, 53, 27, 2, 386, 388, 9, 12, 2, 2, 387, 385, 3, 2, 2, 2, 387, 386, 3, 2, 2, 2, 388, 52, 3, 2, 2, 2, 389, 394, 9, 14, 2, 2, 390, 394, 10, 15, 2, 2, 391, 392, 9, 16, 2, 2, 392, 394, 9, 17, 2, 2, 393, 389, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 394, 54, 3, 2, 2, 2, 395, 396, 7, 48, 2, 2, 396, 56, 3, 2, 2, 2, 397, 398, 7, 42, 2, 2, 398, 58, 3, 2, 2, 2, 399, 400, 7, 43, 2, 2, 400, 60, 3, 2, 2, 2, 401, 402, 7, 46, 2, 2, 402, 62, 3, 2, 2, 2, 403, 404, 7, 61, 2, 2, 404, 64, 3, 2, 2, 2, 405, 406, 7, 63, 2, 2, 406, 66, 3, 2, 2, 2, 28, 2, 256, 261, 264, 266, 269, 280, 285, 292, 294, 304, 306, 320, 328, 336, 343, 346, 353, 360, 365, 367, 371, 379, 383, 387, 393, 3, 2, 3, 2]
\ No newline at end of file
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.java b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.java
index 08cab30..857795f 100644
--- a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.java
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.java
@@ -1,4 +1,4 @@
-// Generated from org/apache/skywalking/oal/tool/grammar/OALLexer.g4 by ANTLR 4.3
+// Generated from org/apache/skywalking/oal/tool/grammar/OALLexer.g4 by ANTLR 4.7.1
package org.apache.skywalking.oal.tool.grammar;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
@@ -11,7 +11,7 @@
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class OALLexer extends Lexer {
- static { RuntimeMetaData.checkVersion("4.3", RuntimeMetaData.VERSION); }
+ static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
@@ -21,28 +21,73 @@
SRC_SERVICE_RELATION=7, SRC_SERVICE_INSTANCE_RELATION=8, SRC_ENDPOINT_RELATION=9,
SRC_SERVICE_INSTANCE_JVM_CPU=10, SRC_SERVICE_INSTANCE_JVM_MEMORY=11, SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12,
DECIMAL_LITERAL=13, BOOL_LITERAL=14, CHAR_LITERAL=15, STRING_LITERAL=16,
- DelimitedComment=17, LineComment=18, IDENTIFIER=19, DOT=20, LR_BRACKET=21,
- RR_BRACKET=22, COMMA=23, SEMI=24;
+ DelimitedComment=17, LineComment=18, SPACE=19, IDENTIFIER=20, DOT=21,
+ LR_BRACKET=22, RR_BRACKET=23, COMMA=24, SEMI=25, EQUAL=26;
+ public static String[] channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+ };
+
public static String[] modeNames = {
"DEFAULT_MODE"
};
- public static final String[] tokenNames = {
- "'\\u0000'", "'\\u0001'", "'\\u0002'", "'\\u0003'", "'\\u0004'", "'\\u0005'",
- "'\\u0006'", "'\\u0007'", "'\b'", "'\t'", "'\n'", "'\\u000B'", "'\f'",
- "'\r'", "'\\u000E'", "'\\u000F'", "'\\u0010'", "'\\u0011'", "'\\u0012'",
- "'\\u0013'", "'\\u0014'", "'\\u0015'", "'\\u0016'", "'\\u0017'", "'\\u0018'"
- };
public static final String[] ruleNames = {
"FROM", "FILTER", "SRC_ALL", "SRC_SERVICE", "SRC_SERVICE_INSTANCE", "SRC_ENDPOINT",
"SRC_SERVICE_RELATION", "SRC_SERVICE_INSTANCE_RELATION", "SRC_ENDPOINT_RELATION",
"SRC_SERVICE_INSTANCE_JVM_CPU", "SRC_SERVICE_INSTANCE_JVM_MEMORY", "SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL",
"DECIMAL_LITERAL", "BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "DelimitedComment",
- "LineComment", "IDENTIFIER", "EscapeSequence", "HexDigits", "HexDigit",
+ "LineComment", "SPACE", "IDENTIFIER", "EscapeSequence", "HexDigits", "HexDigit",
"Digits", "LetterOrDigit", "Letter", "DOT", "LR_BRACKET", "RR_BRACKET",
- "COMMA", "SEMI"
+ "COMMA", "SEMI", "EQUAL"
};
+ private static final String[] _LITERAL_NAMES = {
+ null, "'from'", "'filter'", "'All'", "'Service'", "'ServiceInstance'",
+ "'Endpoint'", "'ServiceRelation'", "'ServiceInstanceRelation'", "'EndpointRelation'",
+ null, null, "'ServiceInstance_JVM_Memory_Pool'", null, null, null, null,
+ null, null, null, null, "'.'", "'('", "')'", "','", "';'", "'='"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, "FROM", "FILTER", "SRC_ALL", "SRC_SERVICE", "SRC_SERVICE_INSTANCE",
+ "SRC_ENDPOINT", "SRC_SERVICE_RELATION", "SRC_SERVICE_INSTANCE_RELATION",
+ "SRC_ENDPOINT_RELATION", "SRC_SERVICE_INSTANCE_JVM_CPU", "SRC_SERVICE_INSTANCE_JVM_MEMORY",
+ "SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL", "DECIMAL_LITERAL", "BOOL_LITERAL",
+ "CHAR_LITERAL", "STRING_LITERAL", "DelimitedComment", "LineComment", "SPACE",
+ "IDENTIFIER", "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", "EQUAL"
+ };
+ public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+ /**
+ * @deprecated Use {@link #VOCABULARY} instead.
+ */
+ @Deprecated
+ public static final String[] tokenNames;
+ static {
+ tokenNames = new String[_SYMBOLIC_NAMES.length];
+ for (int i = 0; i < tokenNames.length; i++) {
+ tokenNames[i] = VOCABULARY.getLiteralName(i);
+ if (tokenNames[i] == null) {
+ tokenNames[i] = VOCABULARY.getSymbolicName(i);
+ }
+
+ if (tokenNames[i] == null) {
+ tokenNames[i] = "<INVALID>";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
public OALLexer(CharStream input) {
super(input);
@@ -53,157 +98,162 @@
public String getGrammarFileName() { return "OALLexer.g4"; }
@Override
- public String[] getTokenNames() { return tokenNames; }
-
- @Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
+ public String[] getChannelNames() { return channelNames; }
+
+ @Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\32\u018a\b\1\4\2"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\34\u0197\b\1\4\2"+
"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
- "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\3\2"+
- "\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3"+
- "\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
- "\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3"+
- "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t"+
+ "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+
+ " \4!\t!\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3"+
+ "\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
+ "\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3"+
+ "\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t"+
"\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3"+
- "\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n"+
- "\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13"+
- "\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f"+
- "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+
- "\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
- "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16"+
- "\3\16\3\16\5\16\u00fd\n\16\3\16\6\16\u0100\n\16\r\16\16\16\u0101\3\16"+
- "\5\16\u0105\n\16\5\16\u0107\n\16\3\16\5\16\u010a\n\16\3\17\3\17\3\17\3"+
- "\17\3\17\3\17\3\17\3\17\3\17\5\17\u0115\n\17\3\20\3\20\3\20\5\20\u011a"+
- "\n\20\3\20\3\20\3\21\3\21\3\21\7\21\u0121\n\21\f\21\16\21\u0124\13\21"+
- "\3\21\3\21\3\22\3\22\3\22\3\22\3\22\7\22\u012d\n\22\f\22\16\22\u0130\13"+
- "\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\7\23\u013b\n\23\f\23"+
- "\16\23\u013e\13\23\3\23\3\23\3\24\3\24\7\24\u0144\n\24\f\24\16\24\u0147"+
- "\13\24\3\25\3\25\3\25\3\25\5\25\u014d\n\25\3\25\5\25\u0150\n\25\3\25\3"+
- "\25\3\25\6\25\u0155\n\25\r\25\16\25\u0156\3\25\3\25\3\25\3\25\3\25\5\25"+
- "\u015e\n\25\3\26\3\26\3\26\7\26\u0163\n\26\f\26\16\26\u0166\13\26\3\26"+
- "\5\26\u0169\n\26\3\27\3\27\3\30\3\30\7\30\u016f\n\30\f\30\16\30\u0172"+
- "\13\30\3\30\5\30\u0175\n\30\3\31\3\31\5\31\u0179\n\31\3\32\3\32\3\32\3"+
- "\32\5\32\u017f\n\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37"+
- "\3\u012e\2 \3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33"+
- "\17\35\20\37\21!\22#\23%\24\'\25)\2+\2-\2/\2\61\2\63\2\65\26\67\279\30"+
- ";\31=\32\3\2\21\3\2\63;\4\2NNnn\6\2\f\f\17\17))^^\6\2\f\f\17\17$$^^\4"+
- "\2\f\f\17\17\n\2$$))^^ddhhppttvv\3\2\62\65\3\2\629\5\2\62;CHch\3\2\62"+
- ";\4\2\62;aa\6\2&&C\\aac|\4\2\2\u0081\ud802\udc01\3\2\ud802\udc01\3\2\udc02"+
- "\ue001\u019d\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2"+
- "\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2"+
- "\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2"+
- "\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3"+
- "\2\2\2\2;\3\2\2\2\2=\3\2\2\2\3?\3\2\2\2\5D\3\2\2\2\7K\3\2\2\2\tO\3\2\2"+
- "\2\13W\3\2\2\2\rg\3\2\2\2\17p\3\2\2\2\21\u0080\3\2\2\2\23\u0098\3\2\2"+
- "\2\25\u00a9\3\2\2\2\27\u00c1\3\2\2\2\31\u00d9\3\2\2\2\33\u0106\3\2\2\2"+
- "\35\u0114\3\2\2\2\37\u0116\3\2\2\2!\u011d\3\2\2\2#\u0127\3\2\2\2%\u0136"+
- "\3\2\2\2\'\u0141\3\2\2\2)\u015d\3\2\2\2+\u015f\3\2\2\2-\u016a\3\2\2\2"+
- "/\u016c\3\2\2\2\61\u0178\3\2\2\2\63\u017e\3\2\2\2\65\u0180\3\2\2\2\67"+
- "\u0182\3\2\2\29\u0184\3\2\2\2;\u0186\3\2\2\2=\u0188\3\2\2\2?@\7h\2\2@"+
- "A\7t\2\2AB\7q\2\2BC\7o\2\2C\4\3\2\2\2DE\7h\2\2EF\7k\2\2FG\7n\2\2GH\7v"+
- "\2\2HI\7g\2\2IJ\7t\2\2J\6\3\2\2\2KL\7C\2\2LM\7n\2\2MN\7n\2\2N\b\3\2\2"+
- "\2OP\7U\2\2PQ\7g\2\2QR\7t\2\2RS\7x\2\2ST\7k\2\2TU\7e\2\2UV\7g\2\2V\n\3"+
- "\2\2\2WX\7U\2\2XY\7g\2\2YZ\7t\2\2Z[\7x\2\2[\\\7k\2\2\\]\7e\2\2]^\7g\2"+
- "\2^_\7K\2\2_`\7p\2\2`a\7u\2\2ab\7v\2\2bc\7c\2\2cd\7p\2\2de\7e\2\2ef\7"+
- "g\2\2f\f\3\2\2\2gh\7G\2\2hi\7p\2\2ij\7f\2\2jk\7r\2\2kl\7q\2\2lm\7k\2\2"+
- "mn\7p\2\2no\7v\2\2o\16\3\2\2\2pq\7U\2\2qr\7g\2\2rs\7t\2\2st\7x\2\2tu\7"+
- "k\2\2uv\7e\2\2vw\7g\2\2wx\7T\2\2xy\7g\2\2yz\7n\2\2z{\7c\2\2{|\7v\2\2|"+
- "}\7k\2\2}~\7q\2\2~\177\7p\2\2\177\20\3\2\2\2\u0080\u0081\7U\2\2\u0081"+
- "\u0082\7g\2\2\u0082\u0083\7t\2\2\u0083\u0084\7x\2\2\u0084\u0085\7k\2\2"+
- "\u0085\u0086\7e\2\2\u0086\u0087\7g\2\2\u0087\u0088\7K\2\2\u0088\u0089"+
- "\7p\2\2\u0089\u008a\7u\2\2\u008a\u008b\7v\2\2\u008b\u008c\7c\2\2\u008c"+
- "\u008d\7p\2\2\u008d\u008e\7e\2\2\u008e\u008f\7g\2\2\u008f\u0090\7T\2\2"+
- "\u0090\u0091\7g\2\2\u0091\u0092\7n\2\2\u0092\u0093\7c\2\2\u0093\u0094"+
- "\7v\2\2\u0094\u0095\7k\2\2\u0095\u0096\7q\2\2\u0096\u0097\7p\2\2\u0097"+
- "\22\3\2\2\2\u0098\u0099\7G\2\2\u0099\u009a\7p\2\2\u009a\u009b\7f\2\2\u009b"+
- "\u009c\7r\2\2\u009c\u009d\7q\2\2\u009d\u009e\7k\2\2\u009e\u009f\7p\2\2"+
- "\u009f\u00a0\7v\2\2\u00a0\u00a1\7T\2\2\u00a1\u00a2\7g\2\2\u00a2\u00a3"+
- "\7n\2\2\u00a3\u00a4\7c\2\2\u00a4\u00a5\7v\2\2\u00a5\u00a6\7k\2\2\u00a6"+
- "\u00a7\7q\2\2\u00a7\u00a8\7p\2\2\u00a8\24\3\2\2\2\u00a9\u00aa\7U\2\2\u00aa"+
- "\u00ab\7g\2\2\u00ab\u00ac\7t\2\2\u00ac\u00ad\7x\2\2\u00ad\u00ae\7k\2\2"+
- "\u00ae\u00af\7e\2\2\u00af\u00b0\7g\2\2\u00b0\u00b1\7K\2\2\u00b1\u00b2"+
- "\7p\2\2\u00b2\u00b3\7u\2\2\u00b3\u00b4\7v\2\2\u00b4\u00b5\7c\2\2\u00b5"+
- "\u00b6\7p\2\2\u00b6\u00b7\7e\2\2\u00b7\u00b8\7g\2\2\u00b8\u00b9\7a\2\2"+
- "\u00b9\u00ba\7L\2\2\u00ba\u00bb\7X\2\2\u00bb\u00bc\7O\2\2\u00bc\u00bd"+
- "\7a\2\2\u00bd\u00be\7E\2\2\u00be\u00bf\7R\2\2\u00bf\u00c0\7W\2\2\u00c0"+
- "\26\3\2\2\2\u00c1\u00c2\7U\2\2\u00c2\u00c3\7g\2\2\u00c3\u00c4\7t\2\2\u00c4"+
- "\u00c5\7x\2\2\u00c5\u00c6\7k\2\2\u00c6\u00c7\7e\2\2\u00c7\u00c8\7g\2\2"+
- "\u00c8\u00c9\7K\2\2\u00c9\u00ca\7p\2\2\u00ca\u00cb\7u\2\2\u00cb\u00cc"+
- "\7v\2\2\u00cc\u00cd\7c\2\2\u00cd\u00ce\7p\2\2\u00ce\u00cf\7e\2\2\u00cf"+
- "\u00d0\7g\2\2\u00d0\u00d1\7a\2\2\u00d1\u00d2\7L\2\2\u00d2\u00d3\7X\2\2"+
- "\u00d3\u00d4\7O\2\2\u00d4\u00d5\7a\2\2\u00d5\u00d6\7E\2\2\u00d6\u00d7"+
- "\7R\2\2\u00d7\u00d8\7W\2\2\u00d8\30\3\2\2\2\u00d9\u00da\7U\2\2\u00da\u00db"+
- "\7g\2\2\u00db\u00dc\7t\2\2\u00dc\u00dd\7x\2\2\u00dd\u00de\7k\2\2\u00de"+
- "\u00df\7e\2\2\u00df\u00e0\7g\2\2\u00e0\u00e1\7K\2\2\u00e1\u00e2\7p\2\2"+
- "\u00e2\u00e3\7u\2\2\u00e3\u00e4\7v\2\2\u00e4\u00e5\7c\2\2\u00e5\u00e6"+
- "\7p\2\2\u00e6\u00e7\7e\2\2\u00e7\u00e8\7g\2\2\u00e8\u00e9\7a\2\2\u00e9"+
- "\u00ea\7L\2\2\u00ea\u00eb\7X\2\2\u00eb\u00ec\7O\2\2\u00ec\u00ed\7a\2\2"+
- "\u00ed\u00ee\7O\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7o\2\2\u00f0\u00f1"+
- "\7q\2\2\u00f1\u00f2\7t\2\2\u00f2\u00f3\7{\2\2\u00f3\u00f4\7a\2\2\u00f4"+
- "\u00f5\7R\2\2\u00f5\u00f6\7q\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8\7n\2\2"+
- "\u00f8\32\3\2\2\2\u00f9\u0107\7\62\2\2\u00fa\u0104\t\2\2\2\u00fb\u00fd"+
- "\5/\30\2\u00fc\u00fb\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u0105\3\2\2\2\u00fe"+
- "\u0100\7a\2\2\u00ff\u00fe\3\2\2\2\u0100\u0101\3\2\2\2\u0101\u00ff\3\2"+
- "\2\2\u0101\u0102\3\2\2\2\u0102\u0103\3\2\2\2\u0103\u0105\5/\30\2\u0104"+
- "\u00fc\3\2\2\2\u0104\u00ff\3\2\2\2\u0105\u0107\3\2\2\2\u0106\u00f9\3\2"+
- "\2\2\u0106\u00fa\3\2\2\2\u0107\u0109\3\2\2\2\u0108\u010a\t\3\2\2\u0109"+
- "\u0108\3\2\2\2\u0109\u010a\3\2\2\2\u010a\34\3\2\2\2\u010b\u010c\7v\2\2"+
- "\u010c\u010d\7t\2\2\u010d\u010e\7w\2\2\u010e\u0115\7g\2\2\u010f\u0110"+
- "\7h\2\2\u0110\u0111\7c\2\2\u0111\u0112\7n\2\2\u0112\u0113\7u\2\2\u0113"+
- "\u0115\7g\2\2\u0114\u010b\3\2\2\2\u0114\u010f\3\2\2\2\u0115\36\3\2\2\2"+
- "\u0116\u0119\7)\2\2\u0117\u011a\n\4\2\2\u0118\u011a\5)\25\2\u0119\u0117"+
- "\3\2\2\2\u0119\u0118\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011c\7)\2\2\u011c"+
- " \3\2\2\2\u011d\u0122\7$\2\2\u011e\u0121\n\5\2\2\u011f\u0121\5)\25\2\u0120"+
- "\u011e\3\2\2\2\u0120\u011f\3\2\2\2\u0121\u0124\3\2\2\2\u0122\u0120\3\2"+
- "\2\2\u0122\u0123\3\2\2\2\u0123\u0125\3\2\2\2\u0124\u0122\3\2\2\2\u0125"+
- "\u0126\7$\2\2\u0126\"\3\2\2\2\u0127\u0128\7\61\2\2\u0128\u0129\7,\2\2"+
- "\u0129\u012e\3\2\2\2\u012a\u012d\5#\22\2\u012b\u012d\13\2\2\2\u012c\u012a"+
- "\3\2\2\2\u012c\u012b\3\2\2\2\u012d\u0130\3\2\2\2\u012e\u012f\3\2\2\2\u012e"+
- "\u012c\3\2\2\2\u012f\u0131\3\2\2\2\u0130\u012e\3\2\2\2\u0131\u0132\7,"+
- "\2\2\u0132\u0133\7\61\2\2\u0133\u0134\3\2\2\2\u0134\u0135\b\22\2\2\u0135"+
- "$\3\2\2\2\u0136\u0137\7\61\2\2\u0137\u0138\7\61\2\2\u0138\u013c\3\2\2"+
- "\2\u0139\u013b\n\6\2\2\u013a\u0139\3\2\2\2\u013b\u013e\3\2\2\2\u013c\u013a"+
- "\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u013f\3\2\2\2\u013e\u013c\3\2\2\2\u013f"+
- "\u0140\b\23\2\2\u0140&\3\2\2\2\u0141\u0145\5\63\32\2\u0142\u0144\5\61"+
- "\31\2\u0143\u0142\3\2\2\2\u0144\u0147\3\2\2\2\u0145\u0143\3\2\2\2\u0145"+
- "\u0146\3\2\2\2\u0146(\3\2\2\2\u0147\u0145\3\2\2\2\u0148\u0149\7^\2\2\u0149"+
- "\u015e\t\7\2\2\u014a\u014f\7^\2\2\u014b\u014d\t\b\2\2\u014c\u014b\3\2"+
- "\2\2\u014c\u014d\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0150\t\t\2\2\u014f"+
- "\u014c\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u015e\t\t"+
- "\2\2\u0152\u0154\7^\2\2\u0153\u0155\7w\2\2\u0154\u0153\3\2\2\2\u0155\u0156"+
- "\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2\2\u0158"+
- "\u0159\5-\27\2\u0159\u015a\5-\27\2\u015a\u015b\5-\27\2\u015b\u015c\5-"+
- "\27\2\u015c\u015e\3\2\2\2\u015d\u0148\3\2\2\2\u015d\u014a\3\2\2\2\u015d"+
- "\u0152\3\2\2\2\u015e*\3\2\2\2\u015f\u0168\5-\27\2\u0160\u0163\5-\27\2"+
- "\u0161\u0163\7a\2\2\u0162\u0160\3\2\2\2\u0162\u0161\3\2\2\2\u0163\u0166"+
- "\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2\2\2\u0165\u0167\3\2\2\2\u0166"+
- "\u0164\3\2\2\2\u0167\u0169\5-\27\2\u0168\u0164\3\2\2\2\u0168\u0169\3\2"+
- "\2\2\u0169,\3\2\2\2\u016a\u016b\t\n\2\2\u016b.\3\2\2\2\u016c\u0174\t\13"+
- "\2\2\u016d\u016f\t\f\2\2\u016e\u016d\3\2\2\2\u016f\u0172\3\2\2\2\u0170"+
- "\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0173\3\2\2\2\u0172\u0170\3\2"+
- "\2\2\u0173\u0175\t\13\2\2\u0174\u0170\3\2\2\2\u0174\u0175\3\2\2\2\u0175"+
- "\60\3\2\2\2\u0176\u0179\5\63\32\2\u0177\u0179\t\13\2\2\u0178\u0176\3\2"+
- "\2\2\u0178\u0177\3\2\2\2\u0179\62\3\2\2\2\u017a\u017f\t\r\2\2\u017b\u017f"+
- "\n\16\2\2\u017c\u017d\t\17\2\2\u017d\u017f\t\20\2\2\u017e\u017a\3\2\2"+
- "\2\u017e\u017b\3\2\2\2\u017e\u017c\3\2\2\2\u017f\64\3\2\2\2\u0180\u0181"+
- "\7\60\2\2\u0181\66\3\2\2\2\u0182\u0183\7*\2\2\u01838\3\2\2\2\u0184\u0185"+
- "\7+\2\2\u0185:\3\2\2\2\u0186\u0187\7.\2\2\u0187<\3\2\2\2\u0188\u0189\7"+
- "=\2\2\u0189>\3\2\2\2\33\2\u00fc\u0101\u0104\u0106\u0109\u0114\u0119\u0120"+
- "\u0122\u012c\u012e\u013c\u0145\u014c\u014f\u0156\u015d\u0162\u0164\u0168"+
- "\u0170\u0174\u0178\u017e\3\2\3\2";
+ "\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n"+
+ "\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3"+
+ "\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3"+
+ "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+
+ "\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
+ "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+
+ "\3\r\3\r\3\16\3\16\3\16\5\16\u0101\n\16\3\16\6\16\u0104\n\16\r\16\16\16"+
+ "\u0105\3\16\5\16\u0109\n\16\5\16\u010b\n\16\3\16\5\16\u010e\n\16\3\17"+
+ "\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u0119\n\17\3\20\3\20\3\20"+
+ "\5\20\u011e\n\20\3\20\3\20\3\21\3\21\3\21\7\21\u0125\n\21\f\21\16\21\u0128"+
+ "\13\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\7\22\u0131\n\22\f\22\16\22\u0134"+
+ "\13\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\7\23\u013f\n\23\f"+
+ "\23\16\23\u0142\13\23\3\23\3\23\3\24\6\24\u0147\n\24\r\24\16\24\u0148"+
+ "\3\24\3\24\3\25\3\25\7\25\u014f\n\25\f\25\16\25\u0152\13\25\3\26\3\26"+
+ "\3\26\3\26\5\26\u0158\n\26\3\26\5\26\u015b\n\26\3\26\3\26\3\26\6\26\u0160"+
+ "\n\26\r\26\16\26\u0161\3\26\3\26\3\26\3\26\3\26\5\26\u0169\n\26\3\27\3"+
+ "\27\3\27\7\27\u016e\n\27\f\27\16\27\u0171\13\27\3\27\5\27\u0174\n\27\3"+
+ "\30\3\30\3\31\3\31\7\31\u017a\n\31\f\31\16\31\u017d\13\31\3\31\5\31\u0180"+
+ "\n\31\3\32\3\32\5\32\u0184\n\32\3\33\3\33\3\33\3\33\5\33\u018a\n\33\3"+
+ "\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\u0132\2\"\3\3\5\4"+
+ "\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22"+
+ "#\23%\24\'\25)\26+\2-\2/\2\61\2\63\2\65\2\67\279\30;\31=\32?\33A\34\3"+
+ "\2\22\3\2\63;\4\2NNnn\6\2\f\f\17\17))^^\6\2\f\f\17\17$$^^\4\2\f\f\17\17"+
+ "\5\2\13\f\17\17\"\"\n\2$$))^^ddhhppttvv\3\2\62\65\3\2\629\5\2\62;CHch"+
+ "\3\2\62;\4\2\62;aa\6\2&&C\\aac|\4\2\2\u0081\ud802\udc01\3\2\ud802\udc01"+
+ "\3\2\udc02\ue001\2\u01ab\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2"+
+ "\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25"+
+ "\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2"+
+ "\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2\67\3\2"+
+ "\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\3C\3\2\2\2"+
+ "\5H\3\2\2\2\7O\3\2\2\2\tS\3\2\2\2\13[\3\2\2\2\rk\3\2\2\2\17t\3\2\2\2\21"+
+ "\u0084\3\2\2\2\23\u009c\3\2\2\2\25\u00ad\3\2\2\2\27\u00c5\3\2\2\2\31\u00dd"+
+ "\3\2\2\2\33\u010a\3\2\2\2\35\u0118\3\2\2\2\37\u011a\3\2\2\2!\u0121\3\2"+
+ "\2\2#\u012b\3\2\2\2%\u013a\3\2\2\2\'\u0146\3\2\2\2)\u014c\3\2\2\2+\u0168"+
+ "\3\2\2\2-\u016a\3\2\2\2/\u0175\3\2\2\2\61\u0177\3\2\2\2\63\u0183\3\2\2"+
+ "\2\65\u0189\3\2\2\2\67\u018b\3\2\2\29\u018d\3\2\2\2;\u018f\3\2\2\2=\u0191"+
+ "\3\2\2\2?\u0193\3\2\2\2A\u0195\3\2\2\2CD\7h\2\2DE\7t\2\2EF\7q\2\2FG\7"+
+ "o\2\2G\4\3\2\2\2HI\7h\2\2IJ\7k\2\2JK\7n\2\2KL\7v\2\2LM\7g\2\2MN\7t\2\2"+
+ "N\6\3\2\2\2OP\7C\2\2PQ\7n\2\2QR\7n\2\2R\b\3\2\2\2ST\7U\2\2TU\7g\2\2UV"+
+ "\7t\2\2VW\7x\2\2WX\7k\2\2XY\7e\2\2YZ\7g\2\2Z\n\3\2\2\2[\\\7U\2\2\\]\7"+
+ "g\2\2]^\7t\2\2^_\7x\2\2_`\7k\2\2`a\7e\2\2ab\7g\2\2bc\7K\2\2cd\7p\2\2d"+
+ "e\7u\2\2ef\7v\2\2fg\7c\2\2gh\7p\2\2hi\7e\2\2ij\7g\2\2j\f\3\2\2\2kl\7G"+
+ "\2\2lm\7p\2\2mn\7f\2\2no\7r\2\2op\7q\2\2pq\7k\2\2qr\7p\2\2rs\7v\2\2s\16"+
+ "\3\2\2\2tu\7U\2\2uv\7g\2\2vw\7t\2\2wx\7x\2\2xy\7k\2\2yz\7e\2\2z{\7g\2"+
+ "\2{|\7T\2\2|}\7g\2\2}~\7n\2\2~\177\7c\2\2\177\u0080\7v\2\2\u0080\u0081"+
+ "\7k\2\2\u0081\u0082\7q\2\2\u0082\u0083\7p\2\2\u0083\20\3\2\2\2\u0084\u0085"+
+ "\7U\2\2\u0085\u0086\7g\2\2\u0086\u0087\7t\2\2\u0087\u0088\7x\2\2\u0088"+
+ "\u0089\7k\2\2\u0089\u008a\7e\2\2\u008a\u008b\7g\2\2\u008b\u008c\7K\2\2"+
+ "\u008c\u008d\7p\2\2\u008d\u008e\7u\2\2\u008e\u008f\7v\2\2\u008f\u0090"+
+ "\7c\2\2\u0090\u0091\7p\2\2\u0091\u0092\7e\2\2\u0092\u0093\7g\2\2\u0093"+
+ "\u0094\7T\2\2\u0094\u0095\7g\2\2\u0095\u0096\7n\2\2\u0096\u0097\7c\2\2"+
+ "\u0097\u0098\7v\2\2\u0098\u0099\7k\2\2\u0099\u009a\7q\2\2\u009a\u009b"+
+ "\7p\2\2\u009b\22\3\2\2\2\u009c\u009d\7G\2\2\u009d\u009e\7p\2\2\u009e\u009f"+
+ "\7f\2\2\u009f\u00a0\7r\2\2\u00a0\u00a1\7q\2\2\u00a1\u00a2\7k\2\2\u00a2"+
+ "\u00a3\7p\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5\7T\2\2\u00a5\u00a6\7g\2\2"+
+ "\u00a6\u00a7\7n\2\2\u00a7\u00a8\7c\2\2\u00a8\u00a9\7v\2\2\u00a9\u00aa"+
+ "\7k\2\2\u00aa\u00ab\7q\2\2\u00ab\u00ac\7p\2\2\u00ac\24\3\2\2\2\u00ad\u00ae"+
+ "\7U\2\2\u00ae\u00af\7g\2\2\u00af\u00b0\7t\2\2\u00b0\u00b1\7x\2\2\u00b1"+
+ "\u00b2\7k\2\2\u00b2\u00b3\7e\2\2\u00b3\u00b4\7g\2\2\u00b4\u00b5\7K\2\2"+
+ "\u00b5\u00b6\7p\2\2\u00b6\u00b7\7u\2\2\u00b7\u00b8\7v\2\2\u00b8\u00b9"+
+ "\7c\2\2\u00b9\u00ba\7p\2\2\u00ba\u00bb\7e\2\2\u00bb\u00bc\7g\2\2\u00bc"+
+ "\u00bd\7a\2\2\u00bd\u00be\7L\2\2\u00be\u00bf\7X\2\2\u00bf\u00c0\7O\2\2"+
+ "\u00c0\u00c1\7a\2\2\u00c1\u00c2\7E\2\2\u00c2\u00c3\7R\2\2\u00c3\u00c4"+
+ "\7W\2\2\u00c4\26\3\2\2\2\u00c5\u00c6\7U\2\2\u00c6\u00c7\7g\2\2\u00c7\u00c8"+
+ "\7t\2\2\u00c8\u00c9\7x\2\2\u00c9\u00ca\7k\2\2\u00ca\u00cb\7e\2\2\u00cb"+
+ "\u00cc\7g\2\2\u00cc\u00cd\7K\2\2\u00cd\u00ce\7p\2\2\u00ce\u00cf\7u\2\2"+
+ "\u00cf\u00d0\7v\2\2\u00d0\u00d1\7c\2\2\u00d1\u00d2\7p\2\2\u00d2\u00d3"+
+ "\7e\2\2\u00d3\u00d4\7g\2\2\u00d4\u00d5\7a\2\2\u00d5\u00d6\7L\2\2\u00d6"+
+ "\u00d7\7X\2\2\u00d7\u00d8\7O\2\2\u00d8\u00d9\7a\2\2\u00d9\u00da\7E\2\2"+
+ "\u00da\u00db\7R\2\2\u00db\u00dc\7W\2\2\u00dc\30\3\2\2\2\u00dd\u00de\7"+
+ "U\2\2\u00de\u00df\7g\2\2\u00df\u00e0\7t\2\2\u00e0\u00e1\7x\2\2\u00e1\u00e2"+
+ "\7k\2\2\u00e2\u00e3\7e\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7K\2\2\u00e5"+
+ "\u00e6\7p\2\2\u00e6\u00e7\7u\2\2\u00e7\u00e8\7v\2\2\u00e8\u00e9\7c\2\2"+
+ "\u00e9\u00ea\7p\2\2\u00ea\u00eb\7e\2\2\u00eb\u00ec\7g\2\2\u00ec\u00ed"+
+ "\7a\2\2\u00ed\u00ee\7L\2\2\u00ee\u00ef\7X\2\2\u00ef\u00f0\7O\2\2\u00f0"+
+ "\u00f1\7a\2\2\u00f1\u00f2\7O\2\2\u00f2\u00f3\7g\2\2\u00f3\u00f4\7o\2\2"+
+ "\u00f4\u00f5\7q\2\2\u00f5\u00f6\7t\2\2\u00f6\u00f7\7{\2\2\u00f7\u00f8"+
+ "\7a\2\2\u00f8\u00f9\7R\2\2\u00f9\u00fa\7q\2\2\u00fa\u00fb\7q\2\2\u00fb"+
+ "\u00fc\7n\2\2\u00fc\32\3\2\2\2\u00fd\u010b\7\62\2\2\u00fe\u0108\t\2\2"+
+ "\2\u00ff\u0101\5\61\31\2\u0100\u00ff\3\2\2\2\u0100\u0101\3\2\2\2\u0101"+
+ "\u0109\3\2\2\2\u0102\u0104\7a\2\2\u0103\u0102\3\2\2\2\u0104\u0105\3\2"+
+ "\2\2\u0105\u0103\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0107\3\2\2\2\u0107"+
+ "\u0109\5\61\31\2\u0108\u0100\3\2\2\2\u0108\u0103\3\2\2\2\u0109\u010b\3"+
+ "\2\2\2\u010a\u00fd\3\2\2\2\u010a\u00fe\3\2\2\2\u010b\u010d\3\2\2\2\u010c"+
+ "\u010e\t\3\2\2\u010d\u010c\3\2\2\2\u010d\u010e\3\2\2\2\u010e\34\3\2\2"+
+ "\2\u010f\u0110\7v\2\2\u0110\u0111\7t\2\2\u0111\u0112\7w\2\2\u0112\u0119"+
+ "\7g\2\2\u0113\u0114\7h\2\2\u0114\u0115\7c\2\2\u0115\u0116\7n\2\2\u0116"+
+ "\u0117\7u\2\2\u0117\u0119\7g\2\2\u0118\u010f\3\2\2\2\u0118\u0113\3\2\2"+
+ "\2\u0119\36\3\2\2\2\u011a\u011d\7)\2\2\u011b\u011e\n\4\2\2\u011c\u011e"+
+ "\5+\26\2\u011d\u011b\3\2\2\2\u011d\u011c\3\2\2\2\u011e\u011f\3\2\2\2\u011f"+
+ "\u0120\7)\2\2\u0120 \3\2\2\2\u0121\u0126\7$\2\2\u0122\u0125\n\5\2\2\u0123"+
+ "\u0125\5+\26\2\u0124\u0122\3\2\2\2\u0124\u0123\3\2\2\2\u0125\u0128\3\2"+
+ "\2\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2\u0127\u0129\3\2\2\2\u0128"+
+ "\u0126\3\2\2\2\u0129\u012a\7$\2\2\u012a\"\3\2\2\2\u012b\u012c\7\61\2\2"+
+ "\u012c\u012d\7,\2\2\u012d\u0132\3\2\2\2\u012e\u0131\5#\22\2\u012f\u0131"+
+ "\13\2\2\2\u0130\u012e\3\2\2\2\u0130\u012f\3\2\2\2\u0131\u0134\3\2\2\2"+
+ "\u0132\u0133\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0135\3\2\2\2\u0134\u0132"+
+ "\3\2\2\2\u0135\u0136\7,\2\2\u0136\u0137\7\61\2\2\u0137\u0138\3\2\2\2\u0138"+
+ "\u0139\b\22\2\2\u0139$\3\2\2\2\u013a\u013b\7\61\2\2\u013b\u013c\7\61\2"+
+ "\2\u013c\u0140\3\2\2\2\u013d\u013f\n\6\2\2\u013e\u013d\3\2\2\2\u013f\u0142"+
+ "\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0143\3\2\2\2\u0142"+
+ "\u0140\3\2\2\2\u0143\u0144\b\23\2\2\u0144&\3\2\2\2\u0145\u0147\t\7\2\2"+
+ "\u0146\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0149"+
+ "\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u014b\b\24\2\2\u014b(\3\2\2\2\u014c"+
+ "\u0150\5\65\33\2\u014d\u014f\5\63\32\2\u014e\u014d\3\2\2\2\u014f\u0152"+
+ "\3\2\2\2\u0150\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151*\3\2\2\2\u0152"+
+ "\u0150\3\2\2\2\u0153\u0154\7^\2\2\u0154\u0169\t\b\2\2\u0155\u015a\7^\2"+
+ "\2\u0156\u0158\t\t\2\2\u0157\u0156\3\2\2\2\u0157\u0158\3\2\2\2\u0158\u0159"+
+ "\3\2\2\2\u0159\u015b\t\n\2\2\u015a\u0157\3\2\2\2\u015a\u015b\3\2\2\2\u015b"+
+ "\u015c\3\2\2\2\u015c\u0169\t\n\2\2\u015d\u015f\7^\2\2\u015e\u0160\7w\2"+
+ "\2\u015f\u015e\3\2\2\2\u0160\u0161\3\2\2\2\u0161\u015f\3\2\2\2\u0161\u0162"+
+ "\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u0164\5/\30\2\u0164\u0165\5/\30\2\u0165"+
+ "\u0166\5/\30\2\u0166\u0167\5/\30\2\u0167\u0169\3\2\2\2\u0168\u0153\3\2"+
+ "\2\2\u0168\u0155\3\2\2\2\u0168\u015d\3\2\2\2\u0169,\3\2\2\2\u016a\u0173"+
+ "\5/\30\2\u016b\u016e\5/\30\2\u016c\u016e\7a\2\2\u016d\u016b\3\2\2\2\u016d"+
+ "\u016c\3\2\2\2\u016e\u0171\3\2\2\2\u016f\u016d\3\2\2\2\u016f\u0170\3\2"+
+ "\2\2\u0170\u0172\3\2\2\2\u0171\u016f\3\2\2\2\u0172\u0174\5/\30\2\u0173"+
+ "\u016f\3\2\2\2\u0173\u0174\3\2\2\2\u0174.\3\2\2\2\u0175\u0176\t\13\2\2"+
+ "\u0176\60\3\2\2\2\u0177\u017f\t\f\2\2\u0178\u017a\t\r\2\2\u0179\u0178"+
+ "\3\2\2\2\u017a\u017d\3\2\2\2\u017b\u0179\3\2\2\2\u017b\u017c\3\2\2\2\u017c"+
+ "\u017e\3\2\2\2\u017d\u017b\3\2\2\2\u017e\u0180\t\f\2\2\u017f\u017b\3\2"+
+ "\2\2\u017f\u0180\3\2\2\2\u0180\62\3\2\2\2\u0181\u0184\5\65\33\2\u0182"+
+ "\u0184\t\f\2\2\u0183\u0181\3\2\2\2\u0183\u0182\3\2\2\2\u0184\64\3\2\2"+
+ "\2\u0185\u018a\t\16\2\2\u0186\u018a\n\17\2\2\u0187\u0188\t\20\2\2\u0188"+
+ "\u018a\t\21\2\2\u0189\u0185\3\2\2\2\u0189\u0186\3\2\2\2\u0189\u0187\3"+
+ "\2\2\2\u018a\66\3\2\2\2\u018b\u018c\7\60\2\2\u018c8\3\2\2\2\u018d\u018e"+
+ "\7*\2\2\u018e:\3\2\2\2\u018f\u0190\7+\2\2\u0190<\3\2\2\2\u0191\u0192\7"+
+ ".\2\2\u0192>\3\2\2\2\u0193\u0194\7=\2\2\u0194@\3\2\2\2\u0195\u0196\7?"+
+ "\2\2\u0196B\3\2\2\2\34\2\u0100\u0105\u0108\u010a\u010d\u0118\u011d\u0124"+
+ "\u0126\u0130\u0132\u0140\u0148\u0150\u0157\u015a\u0161\u0168\u016d\u016f"+
+ "\u0173\u017b\u017f\u0183\u0189\3\2\3\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.interp b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.interp
new file mode 100644
index 0000000..cf82033
--- /dev/null
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.interp
@@ -0,0 +1,71 @@
+token literal names:
+null
+'from'
+'filter'
+'All'
+'Service'
+'ServiceInstance'
+'Endpoint'
+'ServiceRelation'
+'ServiceInstanceRelation'
+'EndpointRelation'
+null
+null
+'ServiceInstance_JVM_Memory_Pool'
+null
+null
+null
+null
+null
+null
+null
+null
+'.'
+'('
+')'
+','
+';'
+'='
+
+token symbolic names:
+null
+FROM
+FILTER
+SRC_ALL
+SRC_SERVICE
+SRC_SERVICE_INSTANCE
+SRC_ENDPOINT
+SRC_SERVICE_RELATION
+SRC_SERVICE_INSTANCE_RELATION
+SRC_ENDPOINT_RELATION
+SRC_SERVICE_INSTANCE_JVM_CPU
+SRC_SERVICE_INSTANCE_JVM_MEMORY
+SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL
+DECIMAL_LITERAL
+BOOL_LITERAL
+CHAR_LITERAL
+STRING_LITERAL
+DelimitedComment
+LineComment
+SPACE
+IDENTIFIER
+DOT
+LR_BRACKET
+RR_BRACKET
+COMMA
+SEMI
+EQUAL
+
+rule names:
+root
+aggregationStatement
+metricStatement
+source
+variable
+aggregateFunction
+functionName
+filterExpression
+
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 28, 66, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 3, 2, 7, 2, 20, 10, 2, 12, 2, 14, 2, 23, 11, 2, 3, 3, 3, 3, 5, 3, 27, 10, 3, 3, 3, 3, 3, 5, 3, 31, 10, 3, 3, 3, 3, 3, 5, 3, 35, 10, 3, 3, 3, 5, 3, 38, 10, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 5, 7, 58, 10, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 2, 2, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 4, 3, 3, 27, 27, 3, 2, 5, 14, 2, 63, 2, 21, 3, 2, 2, 2, 4, 24, 3, 2, 2, 2, 6, 41, 3, 2, 2, 2, 8, 50, 3, 2, 2, 2, 10, 52, 3, 2, 2, 2, 12, 54, 3, 2, 2, 2, 14, 61, 3, 2, 2, 2, 16, 63, 3, 2, 2, 2, 18, 20, 5, 4, 3, 2, 19, 18, 3, 2, 2, 2, 20, 23, 3, 2, 2, 2, 21, 19, 3, 2, 2, 2, 21, 22, 3, 2, 2, 2, 22, 3, 3, 2, 2, 2, 23, 21, 3, 2, 2, 2, 24, 26, 5, 10, 6, 2, 25, 27, 7, 21, 2, 2, 26, 25, 3, 2, 2, 2, 26, 27, 3, 2, 2, 2, 27, 28, 3, 2, 2, 2, 28, 30, 7, 28, 2, 2, 29, 31, 7, 21, 2, 2, 30, 29, 3, 2, 2, 2, 30, 31, 3, 2, 2, 2, 31, 32, 3, 2, 2, 2, 32, 34, 5, 6, 4, 2, 33, 35, 7, 19, 2, 2, 34, 33, 3, 2, 2, 2, 34, 35, 3, 2, 2, 2, 35, 37, 3, 2, 2, 2, 36, 38, 7, 20, 2, 2, 37, 36, 3, 2, 2, 2, 37, 38, 3, 2, 2, 2, 38, 39, 3, 2, 2, 2, 39, 40, 9, 2, 2, 2, 40, 5, 3, 2, 2, 2, 41, 42, 7, 3, 2, 2, 42, 43, 7, 24, 2, 2, 43, 44, 5, 8, 5, 2, 44, 45, 7, 23, 2, 2, 45, 46, 7, 22, 2, 2, 46, 47, 7, 25, 2, 2, 47, 48, 7, 23, 2, 2, 48, 49, 5, 12, 7, 2, 49, 7, 3, 2, 2, 2, 50, 51, 9, 3, 2, 2, 51, 9, 3, 2, 2, 2, 52, 53, 7, 22, 2, 2, 53, 11, 3, 2, 2, 2, 54, 55, 5, 14, 8, 2, 55, 57, 7, 24, 2, 2, 56, 58, 5, 16, 9, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 60, 7, 25, 2, 2, 60, 13, 3, 2, 2, 2, 61, 62, 7, 22, 2, 2, 62, 15, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 17, 3, 2, 2, 2, 8, 21, 26, 30, 34, 37, 57]
\ No newline at end of file
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.java b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.java
index e237ef9..4fe5c7a 100644
--- a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.java
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.java
@@ -1,4 +1,4 @@
-// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.3
+// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.7.1
package org.apache.skywalking.oal.tool.grammar;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
@@ -11,38 +11,78 @@
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class OALParser extends Parser {
- static { RuntimeMetaData.checkVersion("4.3", RuntimeMetaData.VERSION); }
+ static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
- COMMA=23, FILTER=2, SRC_ALL=3, DOT=20, SEMI=24, SRC_SERVICE_INSTANCE=5,
- SRC_SERVICE_INSTANCE_JVM_MEMORY=11, LineComment=18, LR_BRACKET=21, FROM=1,
- SRC_SERVICE_INSTANCE_JVM_CPU=10, DelimitedComment=17, SRC_SERVICE=4, SRC_SERVICE_RELATION=7,
- BOOL_LITERAL=14, SRC_ENDPOINT_RELATION=9, SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12,
- SRC_ENDPOINT=6, RR_BRACKET=22, SRC_SERVICE_INSTANCE_RELATION=8, STRING_LITERAL=16,
- CHAR_LITERAL=15, IDENTIFIER=19, DECIMAL_LITERAL=13;
- public static final String[] tokenNames = {
- "<INVALID>", "'from'", "'filter'", "'All'", "'Service'", "'ServiceInstance'",
- "'Endpoint'", "'ServiceRelation'", "'ServiceInstanceRelation'", "'EndpointRelation'",
- "SRC_SERVICE_INSTANCE_JVM_CPU", "SRC_SERVICE_INSTANCE_JVM_MEMORY", "'ServiceInstance_JVM_Memory_Pool'",
- "DECIMAL_LITERAL", "BOOL_LITERAL", "CHAR_LITERAL", "STRING_LITERAL", "DelimitedComment",
- "LineComment", "IDENTIFIER", "'.'", "'('", "')'", "','", "';'"
- };
+ FROM=1, FILTER=2, SRC_ALL=3, SRC_SERVICE=4, SRC_SERVICE_INSTANCE=5, SRC_ENDPOINT=6,
+ SRC_SERVICE_RELATION=7, SRC_SERVICE_INSTANCE_RELATION=8, SRC_ENDPOINT_RELATION=9,
+ SRC_SERVICE_INSTANCE_JVM_CPU=10, SRC_SERVICE_INSTANCE_JVM_MEMORY=11, SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL=12,
+ DECIMAL_LITERAL=13, BOOL_LITERAL=14, CHAR_LITERAL=15, STRING_LITERAL=16,
+ DelimitedComment=17, LineComment=18, SPACE=19, IDENTIFIER=20, DOT=21,
+ LR_BRACKET=22, RR_BRACKET=23, COMMA=24, SEMI=25, EQUAL=26;
public static final int
- RULE_root = 0, RULE_metricStatements = 1, RULE_metricStatement = 2, RULE_source = 3;
+ RULE_root = 0, RULE_aggregationStatement = 1, RULE_metricStatement = 2,
+ RULE_source = 3, RULE_variable = 4, RULE_aggregateFunction = 5, RULE_functionName = 6,
+ RULE_filterExpression = 7;
public static final String[] ruleNames = {
- "root", "metricStatements", "metricStatement", "source"
+ "root", "aggregationStatement", "metricStatement", "source", "variable",
+ "aggregateFunction", "functionName", "filterExpression"
};
+ private static final String[] _LITERAL_NAMES = {
+ null, "'from'", "'filter'", "'All'", "'Service'", "'ServiceInstance'",
+ "'Endpoint'", "'ServiceRelation'", "'ServiceInstanceRelation'", "'EndpointRelation'",
+ null, null, "'ServiceInstance_JVM_Memory_Pool'", null, null, null, null,
+ null, null, null, null, "'.'", "'('", "')'", "','", "';'", "'='"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, "FROM", "FILTER", "SRC_ALL", "SRC_SERVICE", "SRC_SERVICE_INSTANCE",
+ "SRC_ENDPOINT", "SRC_SERVICE_RELATION", "SRC_SERVICE_INSTANCE_RELATION",
+ "SRC_ENDPOINT_RELATION", "SRC_SERVICE_INSTANCE_JVM_CPU", "SRC_SERVICE_INSTANCE_JVM_MEMORY",
+ "SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL", "DECIMAL_LITERAL", "BOOL_LITERAL",
+ "CHAR_LITERAL", "STRING_LITERAL", "DelimitedComment", "LineComment", "SPACE",
+ "IDENTIFIER", "DOT", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMI", "EQUAL"
+ };
+ public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+ /**
+ * @deprecated Use {@link #VOCABULARY} instead.
+ */
+ @Deprecated
+ public static final String[] tokenNames;
+ static {
+ tokenNames = new String[_SYMBOLIC_NAMES.length];
+ for (int i = 0; i < tokenNames.length; i++) {
+ tokenNames[i] = VOCABULARY.getLiteralName(i);
+ if (tokenNames[i] == null) {
+ tokenNames[i] = VOCABULARY.getSymbolicName(i);
+ }
+
+ if (tokenNames[i] == null) {
+ tokenNames[i] = "<INVALID>";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
@Override
public String getGrammarFileName() { return "OALParser.g4"; }
@Override
- public String[] getTokenNames() { return tokenNames; }
-
- @Override
public String[] getRuleNames() { return ruleNames; }
@Override
@@ -56,12 +96,12 @@
_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
public static class RootContext extends ParserRuleContext {
- public TerminalNode EOF() { return getToken(OALParser.EOF, 0); }
- public MetricStatementsContext metricStatements() {
- return getRuleContext(MetricStatementsContext.class,0);
+ public List<AggregationStatementContext> aggregationStatement() {
+ return getRuleContexts(AggregationStatementContext.class);
}
- public TerminalNode DelimitedComment() { return getToken(OALParser.DelimitedComment, 0); }
- public TerminalNode LineComment() { return getToken(OALParser.LineComment, 0); }
+ public AggregationStatementContext aggregationStatement(int i) {
+ return getRuleContext(AggregationStatementContext.class,i);
+ }
public RootContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -83,82 +123,17 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(9);
- switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) {
- case 1:
- {
- setState(8); metricStatements();
- }
- break;
- }
- setState(12);
- _la = _input.LA(1);
- if (_la==DelimitedComment) {
- {
- setState(11); match(DelimitedComment);
- }
- }
-
- setState(15);
- _la = _input.LA(1);
- if (_la==LineComment) {
- {
- setState(14); match(LineComment);
- }
- }
-
- setState(17); match(EOF);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class MetricStatementsContext extends ParserRuleContext {
- public List<MetricStatementContext> metricStatement() {
- return getRuleContexts(MetricStatementContext.class);
- }
- public MetricStatementContext metricStatement(int i) {
- return getRuleContext(MetricStatementContext.class,i);
- }
- public MetricStatementsContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_metricStatements; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterMetricStatements(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitMetricStatements(this);
- }
- }
-
- public final MetricStatementsContext metricStatements() throws RecognitionException {
- MetricStatementsContext _localctx = new MetricStatementsContext(_ctx, getState());
- enterRule(_localctx, 2, RULE_metricStatements);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(22);
+ setState(19);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==FROM) {
+ while (_la==IDENTIFIER) {
{
{
- setState(19); metricStatement();
+ setState(16);
+ aggregationStatement();
}
}
- setState(24);
+ setState(21);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -175,12 +150,127 @@
return _localctx;
}
+ public static class AggregationStatementContext extends ParserRuleContext {
+ public VariableContext variable() {
+ return getRuleContext(VariableContext.class,0);
+ }
+ public TerminalNode EQUAL() { return getToken(OALParser.EQUAL, 0); }
+ public MetricStatementContext metricStatement() {
+ return getRuleContext(MetricStatementContext.class,0);
+ }
+ public TerminalNode SEMI() { return getToken(OALParser.SEMI, 0); }
+ public TerminalNode EOF() { return getToken(OALParser.EOF, 0); }
+ public List<TerminalNode> SPACE() { return getTokens(OALParser.SPACE); }
+ public TerminalNode SPACE(int i) {
+ return getToken(OALParser.SPACE, i);
+ }
+ public TerminalNode DelimitedComment() { return getToken(OALParser.DelimitedComment, 0); }
+ public TerminalNode LineComment() { return getToken(OALParser.LineComment, 0); }
+ public AggregationStatementContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_aggregationStatement; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterAggregationStatement(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitAggregationStatement(this);
+ }
+ }
+
+ public final AggregationStatementContext aggregationStatement() throws RecognitionException {
+ AggregationStatementContext _localctx = new AggregationStatementContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_aggregationStatement);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(22);
+ variable();
+ setState(24);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==SPACE) {
+ {
+ setState(23);
+ match(SPACE);
+ }
+ }
+
+ setState(26);
+ match(EQUAL);
+ setState(28);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==SPACE) {
+ {
+ setState(27);
+ match(SPACE);
+ }
+ }
+
+ setState(30);
+ metricStatement();
+ setState(32);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==DelimitedComment) {
+ {
+ setState(31);
+ match(DelimitedComment);
+ }
+ }
+
+ setState(35);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==LineComment) {
+ {
+ setState(34);
+ match(LineComment);
+ }
+ }
+
+ setState(37);
+ _la = _input.LA(1);
+ if ( !(_la==EOF || _la==SEMI) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class MetricStatementContext extends ParserRuleContext {
+ public TerminalNode FROM() { return getToken(OALParser.FROM, 0); }
+ public TerminalNode LR_BRACKET() { return getToken(OALParser.LR_BRACKET, 0); }
public SourceContext source() {
return getRuleContext(SourceContext.class,0);
}
- public TerminalNode FROM() { return getToken(OALParser.FROM, 0); }
+ public List<TerminalNode> DOT() { return getTokens(OALParser.DOT); }
+ public TerminalNode DOT(int i) {
+ return getToken(OALParser.DOT, i);
+ }
public TerminalNode IDENTIFIER() { return getToken(OALParser.IDENTIFIER, 0); }
+ public TerminalNode RR_BRACKET() { return getToken(OALParser.RR_BRACKET, 0); }
+ public AggregateFunctionContext aggregateFunction() {
+ return getRuleContext(AggregateFunctionContext.class,0);
+ }
public MetricStatementContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -201,12 +291,22 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(25); match(FROM);
- setState(26); match(LR_BRACKET);
- setState(27); source();
- setState(28); match(DOT);
- setState(29); match(IDENTIFIER);
- setState(30); match(RR_BRACKET);
+ setState(39);
+ match(FROM);
+ setState(40);
+ match(LR_BRACKET);
+ setState(41);
+ source();
+ setState(42);
+ match(DOT);
+ setState(43);
+ match(IDENTIFIER);
+ setState(44);
+ match(RR_BRACKET);
+ setState(45);
+ match(DOT);
+ setState(46);
+ aggregateFunction();
}
}
catch (RecognitionException re) {
@@ -221,16 +321,16 @@
}
public static class SourceContext extends ParserRuleContext {
+ public TerminalNode SRC_ALL() { return getToken(OALParser.SRC_ALL, 0); }
+ public TerminalNode SRC_SERVICE() { return getToken(OALParser.SRC_SERVICE, 0); }
+ public TerminalNode SRC_SERVICE_INSTANCE() { return getToken(OALParser.SRC_SERVICE_INSTANCE, 0); }
public TerminalNode SRC_ENDPOINT() { return getToken(OALParser.SRC_ENDPOINT, 0); }
- public TerminalNode SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL() { return getToken(OALParser.SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL, 0); }
- public TerminalNode SRC_SERVICE_INSTANCE_JVM_CPU() { return getToken(OALParser.SRC_SERVICE_INSTANCE_JVM_CPU, 0); }
public TerminalNode SRC_SERVICE_RELATION() { return getToken(OALParser.SRC_SERVICE_RELATION, 0); }
public TerminalNode SRC_SERVICE_INSTANCE_RELATION() { return getToken(OALParser.SRC_SERVICE_INSTANCE_RELATION, 0); }
public TerminalNode SRC_ENDPOINT_RELATION() { return getToken(OALParser.SRC_ENDPOINT_RELATION, 0); }
+ public TerminalNode SRC_SERVICE_INSTANCE_JVM_CPU() { return getToken(OALParser.SRC_SERVICE_INSTANCE_JVM_CPU, 0); }
public TerminalNode SRC_SERVICE_INSTANCE_JVM_MEMORY() { return getToken(OALParser.SRC_SERVICE_INSTANCE_JVM_MEMORY, 0); }
- public TerminalNode SRC_SERVICE_INSTANCE() { return getToken(OALParser.SRC_SERVICE_INSTANCE, 0); }
- public TerminalNode SRC_ALL() { return getToken(OALParser.SRC_ALL, 0); }
- public TerminalNode SRC_SERVICE() { return getToken(OALParser.SRC_SERVICE, 0); }
+ public TerminalNode SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL() { return getToken(OALParser.SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL, 0); }
public SourceContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -252,12 +352,182 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(32);
+ setState(48);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SRC_ALL) | (1L << SRC_SERVICE) | (1L << SRC_SERVICE_INSTANCE) | (1L << SRC_ENDPOINT) | (1L << SRC_SERVICE_RELATION) | (1L << SRC_SERVICE_INSTANCE_RELATION) | (1L << SRC_ENDPOINT_RELATION) | (1L << SRC_SERVICE_INSTANCE_JVM_CPU) | (1L << SRC_SERVICE_INSTANCE_JVM_MEMORY) | (1L << SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL))) != 0)) ) {
_errHandler.recoverInline(this);
}
- consume();
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(OALParser.IDENTIFIER, 0); }
+ public VariableContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variable; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterVariable(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitVariable(this);
+ }
+ }
+
+ public final VariableContext variable() throws RecognitionException {
+ VariableContext _localctx = new VariableContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_variable);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(50);
+ match(IDENTIFIER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AggregateFunctionContext extends ParserRuleContext {
+ public FunctionNameContext functionName() {
+ return getRuleContext(FunctionNameContext.class,0);
+ }
+ public TerminalNode LR_BRACKET() { return getToken(OALParser.LR_BRACKET, 0); }
+ public TerminalNode RR_BRACKET() { return getToken(OALParser.RR_BRACKET, 0); }
+ public FilterExpressionContext filterExpression() {
+ return getRuleContext(FilterExpressionContext.class,0);
+ }
+ public AggregateFunctionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_aggregateFunction; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterAggregateFunction(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitAggregateFunction(this);
+ }
+ }
+
+ public final AggregateFunctionContext aggregateFunction() throws RecognitionException {
+ AggregateFunctionContext _localctx = new AggregateFunctionContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_aggregateFunction);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(52);
+ functionName();
+ setState(53);
+ match(LR_BRACKET);
+ setState(55);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
+ case 1:
+ {
+ setState(54);
+ filterExpression();
+ }
+ break;
+ }
+ setState(57);
+ match(RR_BRACKET);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FunctionNameContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(OALParser.IDENTIFIER, 0); }
+ public FunctionNameContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_functionName; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterFunctionName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitFunctionName(this);
+ }
+ }
+
+ public final FunctionNameContext functionName() throws RecognitionException {
+ FunctionNameContext _localctx = new FunctionNameContext(_ctx, getState());
+ enterRule(_localctx, 12, RULE_functionName);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(59);
+ match(IDENTIFIER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FilterExpressionContext extends ParserRuleContext {
+ public FilterExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_filterExpression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).enterFilterExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof OALParserListener ) ((OALParserListener)listener).exitFilterExpression(this);
+ }
+ }
+
+ public final FilterExpressionContext filterExpression() throws RecognitionException {
+ FilterExpressionContext _localctx = new FilterExpressionContext(_ctx, getState());
+ enterRule(_localctx, 14, RULE_filterExpression);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
}
}
catch (RecognitionException re) {
@@ -272,17 +542,23 @@
}
public static final String _serializedATN =
- "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\32%\4\2\t\2\4\3\t"+
- "\3\4\4\t\4\4\5\t\5\3\2\5\2\f\n\2\3\2\5\2\17\n\2\3\2\5\2\22\n\2\3\2\3\2"+
- "\3\3\7\3\27\n\3\f\3\16\3\32\13\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3"+
- "\5\2\2\6\2\4\6\b\2\3\3\2\5\16$\2\13\3\2\2\2\4\30\3\2\2\2\6\33\3\2\2\2"+
- "\b\"\3\2\2\2\n\f\5\4\3\2\13\n\3\2\2\2\13\f\3\2\2\2\f\16\3\2\2\2\r\17\7"+
- "\23\2\2\16\r\3\2\2\2\16\17\3\2\2\2\17\21\3\2\2\2\20\22\7\24\2\2\21\20"+
- "\3\2\2\2\21\22\3\2\2\2\22\23\3\2\2\2\23\24\7\2\2\3\24\3\3\2\2\2\25\27"+
- "\5\6\4\2\26\25\3\2\2\2\27\32\3\2\2\2\30\26\3\2\2\2\30\31\3\2\2\2\31\5"+
- "\3\2\2\2\32\30\3\2\2\2\33\34\7\3\2\2\34\35\7\27\2\2\35\36\5\b\5\2\36\37"+
- "\7\26\2\2\37 \7\25\2\2 !\7\30\2\2!\7\3\2\2\2\"#\t\2\2\2#\t\3\2\2\2\6\13"+
- "\16\21\30";
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\34B\4\2\t\2\4\3\t"+
+ "\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\3\2\7\2\24\n\2\f\2"+
+ "\16\2\27\13\2\3\3\3\3\5\3\33\n\3\3\3\3\3\5\3\37\n\3\3\3\3\3\5\3#\n\3\3"+
+ "\3\5\3&\n\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3"+
+ "\6\3\7\3\7\3\7\5\7:\n\7\3\7\3\7\3\b\3\b\3\t\3\t\3\t\2\2\n\2\4\6\b\n\f"+
+ "\16\20\2\4\3\3\33\33\3\2\5\16\2?\2\25\3\2\2\2\4\30\3\2\2\2\6)\3\2\2\2"+
+ "\b\62\3\2\2\2\n\64\3\2\2\2\f\66\3\2\2\2\16=\3\2\2\2\20?\3\2\2\2\22\24"+
+ "\5\4\3\2\23\22\3\2\2\2\24\27\3\2\2\2\25\23\3\2\2\2\25\26\3\2\2\2\26\3"+
+ "\3\2\2\2\27\25\3\2\2\2\30\32\5\n\6\2\31\33\7\25\2\2\32\31\3\2\2\2\32\33"+
+ "\3\2\2\2\33\34\3\2\2\2\34\36\7\34\2\2\35\37\7\25\2\2\36\35\3\2\2\2\36"+
+ "\37\3\2\2\2\37 \3\2\2\2 \"\5\6\4\2!#\7\23\2\2\"!\3\2\2\2\"#\3\2\2\2#%"+
+ "\3\2\2\2$&\7\24\2\2%$\3\2\2\2%&\3\2\2\2&\'\3\2\2\2\'(\t\2\2\2(\5\3\2\2"+
+ "\2)*\7\3\2\2*+\7\30\2\2+,\5\b\5\2,-\7\27\2\2-.\7\26\2\2./\7\31\2\2/\60"+
+ "\7\27\2\2\60\61\5\f\7\2\61\7\3\2\2\2\62\63\t\3\2\2\63\t\3\2\2\2\64\65"+
+ "\7\26\2\2\65\13\3\2\2\2\66\67\5\16\b\2\679\7\30\2\28:\5\20\t\298\3\2\2"+
+ "\29:\3\2\2\2:;\3\2\2\2;<\7\31\2\2<\r\3\2\2\2=>\7\26\2\2>\17\3\2\2\2?@"+
+ "\3\2\2\2@\21\3\2\2\2\b\25\32\36\"%9";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.java b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.java
index 9a3aabe..d93d65f 100644
--- a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.java
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.java
@@ -1,8 +1,7 @@
-// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.3
+// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.7.1
package org.apache.skywalking.oal.tool.grammar;
import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
@@ -17,75 +16,120 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterMetricStatements(@NotNull OALParser.MetricStatementsContext ctx) { }
+ @Override public void enterRoot(OALParser.RootContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitMetricStatements(@NotNull OALParser.MetricStatementsContext ctx) { }
+ @Override public void exitRoot(OALParser.RootContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterAggregationStatement(OALParser.AggregationStatementContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitAggregationStatement(OALParser.AggregationStatementContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterMetricStatement(OALParser.MetricStatementContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitMetricStatement(OALParser.MetricStatementContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterSource(OALParser.SourceContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitSource(OALParser.SourceContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterVariable(OALParser.VariableContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitVariable(OALParser.VariableContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterAggregateFunction(OALParser.AggregateFunctionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitAggregateFunction(OALParser.AggregateFunctionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterFunctionName(OALParser.FunctionNameContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitFunctionName(OALParser.FunctionNameContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterFilterExpression(OALParser.FilterExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitFilterExpression(OALParser.FilterExpressionContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterRoot(@NotNull OALParser.RootContext ctx) { }
+ @Override public void enterEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitRoot(@NotNull OALParser.RootContext ctx) { }
-
+ @Override public void exitEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterMetricStatement(@NotNull OALParser.MetricStatementContext ctx) { }
+ @Override public void visitTerminal(TerminalNode node) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitMetricStatement(@NotNull OALParser.MetricStatementContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void enterSource(@NotNull OALParser.SourceContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitSource(@NotNull OALParser.SourceContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void enterEveryRule(@NotNull ParserRuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitEveryRule(@NotNull ParserRuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void visitTerminal(@NotNull TerminalNode node) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void visitErrorNode(@NotNull ErrorNode node) { }
+ @Override public void visitErrorNode(ErrorNode node) { }
}
\ No newline at end of file
diff --git a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserListener.java b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserListener.java
index 451ddc7..2287337 100644
--- a/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserListener.java
+++ b/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserListener.java
@@ -1,6 +1,5 @@
-// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.3
+// Generated from org/apache/skywalking/oal/tool/grammar/OALParser.g4 by ANTLR 4.7.1
package org.apache.skywalking.oal.tool.grammar;
-import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTreeListener;
/**
@@ -9,46 +8,83 @@
*/
public interface OALParserListener extends ParseTreeListener {
/**
- * Enter a parse tree produced by {@link OALParser#metricStatements}.
- * @param ctx the parse tree
- */
- void enterMetricStatements(@NotNull OALParser.MetricStatementsContext ctx);
- /**
- * Exit a parse tree produced by {@link OALParser#metricStatements}.
- * @param ctx the parse tree
- */
- void exitMetricStatements(@NotNull OALParser.MetricStatementsContext ctx);
-
- /**
* Enter a parse tree produced by {@link OALParser#root}.
* @param ctx the parse tree
*/
- void enterRoot(@NotNull OALParser.RootContext ctx);
+ void enterRoot(OALParser.RootContext ctx);
/**
* Exit a parse tree produced by {@link OALParser#root}.
* @param ctx the parse tree
*/
- void exitRoot(@NotNull OALParser.RootContext ctx);
-
+ void exitRoot(OALParser.RootContext ctx);
+ /**
+ * Enter a parse tree produced by {@link OALParser#aggregationStatement}.
+ * @param ctx the parse tree
+ */
+ void enterAggregationStatement(OALParser.AggregationStatementContext ctx);
+ /**
+ * Exit a parse tree produced by {@link OALParser#aggregationStatement}.
+ * @param ctx the parse tree
+ */
+ void exitAggregationStatement(OALParser.AggregationStatementContext ctx);
/**
* Enter a parse tree produced by {@link OALParser#metricStatement}.
* @param ctx the parse tree
*/
- void enterMetricStatement(@NotNull OALParser.MetricStatementContext ctx);
+ void enterMetricStatement(OALParser.MetricStatementContext ctx);
/**
* Exit a parse tree produced by {@link OALParser#metricStatement}.
* @param ctx the parse tree
*/
- void exitMetricStatement(@NotNull OALParser.MetricStatementContext ctx);
-
+ void exitMetricStatement(OALParser.MetricStatementContext ctx);
/**
* Enter a parse tree produced by {@link OALParser#source}.
* @param ctx the parse tree
*/
- void enterSource(@NotNull OALParser.SourceContext ctx);
+ void enterSource(OALParser.SourceContext ctx);
/**
* Exit a parse tree produced by {@link OALParser#source}.
* @param ctx the parse tree
*/
- void exitSource(@NotNull OALParser.SourceContext ctx);
+ void exitSource(OALParser.SourceContext ctx);
+ /**
+ * Enter a parse tree produced by {@link OALParser#variable}.
+ * @param ctx the parse tree
+ */
+ void enterVariable(OALParser.VariableContext ctx);
+ /**
+ * Exit a parse tree produced by {@link OALParser#variable}.
+ * @param ctx the parse tree
+ */
+ void exitVariable(OALParser.VariableContext ctx);
+ /**
+ * Enter a parse tree produced by {@link OALParser#aggregateFunction}.
+ * @param ctx the parse tree
+ */
+ void enterAggregateFunction(OALParser.AggregateFunctionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link OALParser#aggregateFunction}.
+ * @param ctx the parse tree
+ */
+ void exitAggregateFunction(OALParser.AggregateFunctionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link OALParser#functionName}.
+ * @param ctx the parse tree
+ */
+ void enterFunctionName(OALParser.FunctionNameContext ctx);
+ /**
+ * Exit a parse tree produced by {@link OALParser#functionName}.
+ * @param ctx the parse tree
+ */
+ void exitFunctionName(OALParser.FunctionNameContext ctx);
+ /**
+ * Enter a parse tree produced by {@link OALParser#filterExpression}.
+ * @param ctx the parse tree
+ */
+ void enterFilterExpression(OALParser.FilterExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link OALParser#filterExpression}.
+ * @param ctx the parse tree
+ */
+ void exitFilterExpression(OALParser.FilterExpressionContext ctx);
}
\ No newline at end of file
diff --git a/oal-syntax/target/maven-archiver/pom.properties b/oal-syntax/target/maven-archiver/pom.properties
deleted file mode 100644
index c7b0c7a..0000000
--- a/oal-syntax/target/maven-archiver/pom.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-#Created by Apache Maven 3.3.9
-version=1.0-SNAPSHOT
-groupId=org.apache.skywalking
-artifactId=oal-syntax
diff --git a/oal-syntax/target/maven-shared-archive-resources/META-INF/DEPENDENCIES b/oal-syntax/target/maven-shared-archive-resources/META-INF/DEPENDENCIES
index d7e502c..2764812 100644
--- a/oal-syntax/target/maven-shared-archive-resources/META-INF/DEPENDENCIES
+++ b/oal-syntax/target/maven-shared-archive-resources/META-INF/DEPENDENCIES
@@ -28,10 +28,6 @@
- JSR 353 (JSON Processing) Default Provider (http://jsonp.java.net) org.glassfish:javax.json:bundle:1.0.4
License: Dual license consisting of the CDDL v1.1 and GPL v2 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
-From: 'The Apache Software Foundation' (https://www.apache.org/)
- - Apache Commons CLI (http://commons.apache.org/proper/commons-cli/) commons-cli:commons-cli:jar:1.4
- License: Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt)
-
diff --git a/oal-syntax/target/maven-status/antlr4/dependencies.ser b/oal-syntax/target/maven-status/antlr4/dependencies.ser
new file mode 100644
index 0000000..4b68ebf
--- /dev/null
+++ b/oal-syntax/target/maven-status/antlr4/dependencies.ser
Binary files differ
diff --git a/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index 32fa965..eef357d 100644
--- a/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,9 +1,12 @@
org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementContext.class
-org/apache/skywalking/oal/tool/grammar/OALParserListener.class
-org/apache/skywalking/oal/tool/grammar/OALParser$MetricStatementsContext.class
+org/apache/skywalking/oal/tool/grammar/OALParser$AggregateFunctionContext.class
+org/apache/skywalking/oal/tool/grammar/OALParser$VariableContext.class
org/apache/skywalking/oal/tool/grammar/OALLexer.class
-org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class
-org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class
-org/apache/skywalking/oal/tool/Main.class
+org/apache/skywalking/oal/tool/grammar/OALParser$AggregationStatementContext.class
org/apache/skywalking/oal/tool/grammar/OALParser$SourceContext.class
org/apache/skywalking/oal/tool/grammar/OALParser.class
+org/apache/skywalking/oal/tool/grammar/OALParserListener.class
+org/apache/skywalking/oal/tool/grammar/OALParser$FilterExpressionContext.class
+org/apache/skywalking/oal/tool/grammar/OALParser$FunctionNameContext.class
+org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.class
+org/apache/skywalking/oal/tool/grammar/OALParser$RootContext.class
diff --git a/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index d51dcd0..0273d5e 100644
--- a/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/oal-syntax/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -1,5 +1,4 @@
/Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserBaseListener.java
-/Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/main/java/org/apache/skywalking/oal/tool/Main.java
/Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.java
/Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.java
/Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/target/generated-sources/antlr4/org/apache/skywalking/oal/tool/grammar/OALParserListener.java
diff --git a/oal-syntax/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/oal-syntax/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
deleted file mode 100644
index e69de29..0000000
--- a/oal-syntax/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
+++ /dev/null
diff --git a/oal-syntax/target/oal-syntax-1.0-SNAPSHOT.jar b/oal-syntax/target/oal-syntax-1.0-SNAPSHOT.jar
deleted file mode 100644
index 9dd4b56..0000000
--- a/oal-syntax/target/oal-syntax-1.0-SNAPSHOT.jar
+++ /dev/null
Binary files differ
diff --git a/oal-syntax/target/rat.txt b/oal-syntax/target/rat.txt
deleted file mode 100644
index 1c3a757..0000000
--- a/oal-syntax/target/rat.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-
-*****************************************************
-Summary
--------
-Generated at: 2018-08-01T22:31:10+08:00
-
-Notes: 0
-Binaries: 0
-Archives: 0
-Standards: 6
-
-Apache Licensed: 6
-Generated Documents: 0
-
-JavaDocs are generated, thus a license header is optional.
-Generated files do not require license headers.
-
-0 Unknown Licenses
-
-*****************************************************
- Files with Apache License headers will be marked AL
- Binary files (which do not require any license headers) will be marked B
- Compressed archives will be marked A
- Notices, licenses etc. will be marked N
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/pom.xml
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/test/resources/oal_test.oal
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/main/java/org/apache/skywalking/oal/tool/Main.java
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.tokens
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALLexer.g4
- AL /Users/wusheng/Documents/GitHub/incubator-skywalking-oal-tool/oal-syntax/src/main/antlr4/org/apache/skywalking/oal/tool/grammar/OALParser.g4
-
-*****************************************************
diff --git a/oal-syntax/target/test-classes/META-INF/DEPENDENCIES b/oal-syntax/target/test-classes/META-INF/DEPENDENCIES
deleted file mode 100644
index d7e502c..0000000
--- a/oal-syntax/target/test-classes/META-INF/DEPENDENCIES
+++ /dev/null
@@ -1,37 +0,0 @@
-// ------------------------------------------------------------------
-// Transitive dependencies of this project determined from the
-// maven pom organized by organization.
-// ------------------------------------------------------------------
-
-oal-syntax
-
-
-From: 'abego Software GmbH, Germany' (http://abego-software.de)
- - abego TreeLayout Core (http://treelayout.sourceforge.net) org.abego.treelayout:org.abego.treelayout.core:bundle:1.0.3
- License: BSD 3-Clause "New" or "Revised" License (BSD-3-Clause) (http://www.abego-software.de/legal/apl-v10.html)
-
-From: 'an unknown organization'
- - ICU4J (http://icu-project.org/) com.ibm.icu:icu4j:jar:58.2
- License: Unicode/ICU License (http://source.icu-project.org/repos/icu/trunk/icu4j/main/shared/licenses/LICENSE)
- - StringTemplate 4 (http://www.stringtemplate.org) org.antlr:ST4:jar:4.0.8
- License: BSD licence (http://antlr.org/license.html)
-
-From: 'ANTLR' (http://www.antlr.org)
- - ANTLR 3 Runtime (http://www.antlr.org) org.antlr:antlr-runtime:jar:3.5.2
- License: BSD licence (http://antlr.org/license.html)
- - ANTLR 4 Tool (http://www.antlr.org) org.antlr:antlr4:jar:4.7.1
- License: The BSD License (http://www.antlr.org/license.html)
- - ANTLR 4 Runtime (http://www.antlr.org/antlr4-runtime) org.antlr:antlr4-runtime:jar:4.7.1
- License: The BSD License (http://www.antlr.org/license.html)
-
-From: 'Oracle' (http://www.oracle.com)
- - JSR 353 (JSON Processing) Default Provider (http://jsonp.java.net) org.glassfish:javax.json:bundle:1.0.4
- License: Dual license consisting of the CDDL v1.1 and GPL v2 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
-
-From: 'The Apache Software Foundation' (https://www.apache.org/)
- - Apache Commons CLI (http://commons.apache.org/proper/commons-cli/) commons-cli:commons-cli:jar:1.4
- License: Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0.txt)
-
-
-
-
diff --git a/oal-syntax/target/test-classes/META-INF/LICENSE b/oal-syntax/target/test-classes/META-INF/LICENSE
deleted file mode 100644
index d645695..0000000
--- a/oal-syntax/target/test-classes/META-INF/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/oal-syntax/target/test-classes/META-INF/NOTICE b/oal-syntax/target/test-classes/META-INF/NOTICE
deleted file mode 100644
index 82d5ff9..0000000
--- a/oal-syntax/target/test-classes/META-INF/NOTICE
+++ /dev/null
@@ -1,8 +0,0 @@
-
-oal-syntax
-Copyright 2018 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
diff --git a/pom.xml b/pom.xml
index 14c47de..367b3f2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,6 +10,7 @@
<version>1.0-SNAPSHOT</version>
<modules>
<module>oal-syntax</module>
+ <module>oal-parser</module>
</modules>
<parent>
diff --git a/target/rat.txt b/target/rat.txt
deleted file mode 100644
index 6fc5444..0000000
--- a/target/rat.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-*****************************************************
-Summary
--------
-Generated at: 2018-08-01T22:31:09+08:00
-
-Notes: 2
-Binaries: 0
-Archives: 0
-Standards: 2
-
-Apache Licensed: 2
-Generated Documents: 0
-
-JavaDocs are generated, thus a license header is optional.
-Generated files do not require license headers.
-
-0 Unknown Licenses
-
-*****************************************************
- Files with Apache License headers will be marked AL
- Binary files (which do not require any license headers) will be marked B
- Compressed archives will be marked A
- Notices, licenses etc. will be marked N
- N LICENSE
- AL pom.xml
- N NOTICE
- AL HEADER
-
-*****************************************************