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
- 
-*****************************************************