diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.interp b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.interp
new file mode 100644
index 000000000..695ada8d1
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.interp
@@ -0,0 +1,66 @@
+token literal names:
+null
+';'
+'('
+','
+')'
+'$'
+';;'
+null
+null
+null
+null
+null
+'compose'
+'->'
+'='
+null
+null
+null
+null
+null
+
+token symbolic names:
+null
+null
+null
+null
+null
+null
+null
+LONG
+DOUBLE
+INTEGER
+FLOAT
+NEWLINE
+COMPOSE
+TYPEARROW
+ASSIGN
+SSTRING_LITERAL
+DSTRING_LITERAL
+ID
+IDPART
+WS
+
+rule names:
+virtdataRecipe
+virtdataFlow
+expression
+virtdataCall
+lvalue
+inputType
+className
+outputType
+arg
+ref
+value
+stringValue
+longValue
+doubleValue
+integerValue
+floatValue
+specend
+
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 21, 139, 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, 3, 2, 3, 2, 3, 2, 5, 2, 40, 10, 2, 7, 2, 42, 10, 2, 12, 2, 14, 2, 45, 11, 2, 3, 2, 3, 2, 3, 3, 5, 3, 50, 10, 3, 3, 3, 3, 3, 3, 3, 5, 3, 55, 10, 3, 7, 3, 57, 10, 3, 12, 3, 14, 3, 60, 11, 3, 3, 4, 3, 4, 3, 4, 5, 4, 65, 10, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 5, 5, 72, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 79, 10, 5, 12, 5, 14, 5, 82, 11, 5, 5, 5, 84, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 90, 10, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 5, 10, 103, 10, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 113, 10, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 6, 18, 127, 10, 18, 13, 18, 14, 18, 128, 3, 18, 3, 18, 6, 18, 133, 10, 18, 13, 18, 14, 18, 134, 5, 18, 137, 10, 18, 3, 18, 2, 2, 19, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 2, 3, 3, 2, 17, 18, 2, 141, 2, 36, 3, 2, 2, 2, 4, 49, 3, 2, 2, 2, 6, 64, 3, 2, 2, 2, 8, 71, 3, 2, 2, 2, 10, 91, 3, 2, 2, 2, 12, 93, 3, 2, 2, 2, 14, 95, 3, 2, 2, 2, 16, 97, 3, 2, 2, 2, 18, 102, 3, 2, 2, 2, 20, 104, 3, 2, 2, 2, 22, 112, 3, 2, 2, 2, 24, 114, 3, 2, 2, 2, 26, 116, 3, 2, 2, 2, 28, 118, 3, 2, 2, 2, 30, 120, 3, 2, 2, 2, 32, 122, 3, 2, 2, 2, 34, 136, 3, 2, 2, 2, 36, 43, 5, 4, 3, 2, 37, 39, 5, 34, 18, 2, 38, 40, 5, 4, 3, 2, 39, 38, 3, 2, 2, 2, 39, 40, 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 37, 3, 2, 2, 2, 42, 45, 3, 2, 2, 2, 43, 41, 3, 2, 2, 2, 43, 44, 3, 2, 2, 2, 44, 46, 3, 2, 2, 2, 45, 43, 3, 2, 2, 2, 46, 47, 7, 2, 2, 3, 47, 3, 3, 2, 2, 2, 48, 50, 7, 14, 2, 2, 49, 48, 3, 2, 2, 2, 49, 50, 3, 2, 2, 2, 50, 51, 3, 2, 2, 2, 51, 58, 5, 6, 4, 2, 52, 54, 7, 3, 2, 2, 53, 55, 5, 6, 4, 2, 54, 53, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 57, 3, 2, 2, 2, 56, 52, 3, 2, 2, 2, 57, 60, 3, 2, 2, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 5, 3, 2, 2, 2, 60, 58, 3, 2, 2, 2, 61, 62, 5, 10, 6, 2, 62, 63, 7, 16, 2, 2, 63, 65, 3, 2, 2, 2, 64, 61, 3, 2, 2, 2, 64, 65, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 5, 8, 5, 2, 67, 7, 3, 2, 2, 2, 68, 69, 5, 12, 7, 2, 69, 70, 7, 15, 2, 2, 70, 72, 3, 2, 2, 2, 71, 68, 3, 2, 2, 2, 71, 72, 3, 2, 2, 2, 72, 73, 3, 2, 2, 2, 73, 74, 5, 14, 8, 2, 74, 83, 7, 4, 2, 2, 75, 80, 5, 18, 10, 2, 76, 77, 7, 5, 2, 2, 77, 79, 5, 18, 10, 2, 78, 76, 3, 2, 2, 2, 79, 82, 3, 2, 2, 2, 80, 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2, 2, 83, 75, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 7, 6, 2, 2, 86, 89, 3, 2, 2, 2, 87, 88, 7, 15, 2, 2, 88, 90, 5, 16, 9, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 9, 3, 2, 2, 2, 91, 92, 7, 19, 2, 2, 92, 11, 3, 2, 2, 2, 93, 94, 7, 19, 2, 2, 94, 13, 3, 2, 2, 2, 95, 96, 7, 19, 2, 2, 96, 15, 3, 2, 2, 2, 97, 98, 7, 19, 2, 2, 98, 17, 3, 2, 2, 2, 99, 103, 5, 22, 12, 2, 100, 103, 5, 8, 5, 2, 101, 103, 5, 20, 11, 2, 102, 99, 3, 2, 2, 2, 102, 100, 3, 2, 2, 2, 102, 101, 3, 2, 2, 2, 103, 19, 3, 2, 2, 2, 104, 105, 7, 7, 2, 2, 105, 106, 7, 19, 2, 2, 106, 21, 3, 2, 2, 2, 107, 113, 5, 32, 17, 2, 108, 113, 5, 28, 15, 2, 109, 113, 5, 30, 16, 2, 110, 113, 5, 26, 14, 2, 111, 113, 5, 24, 13, 2, 112, 107, 3, 2, 2, 2, 112, 108, 3, 2, 2, 2, 112, 109, 3, 2, 2, 2, 112, 110, 3, 2, 2, 2, 112, 111, 3, 2, 2, 2, 113, 23, 3, 2, 2, 2, 114, 115, 9, 2, 2, 2, 115, 25, 3, 2, 2, 2, 116, 117, 7, 9, 2, 2, 117, 27, 3, 2, 2, 2, 118, 119, 7, 10, 2, 2, 119, 29, 3, 2, 2, 2, 120, 121, 7, 11, 2, 2, 121, 31, 3, 2, 2, 2, 122, 123, 7, 12, 2, 2, 123, 33, 3, 2, 2, 2, 124, 126, 7, 8, 2, 2, 125, 127, 7, 13, 2, 2, 126, 125, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 126, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 137, 3, 2, 2, 2, 130, 137, 7, 8, 2, 2, 131, 133, 7, 13, 2, 2, 132, 131, 3, 2, 2, 2, 133, 134, 3, 2, 2, 2, 134, 132, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 137, 3, 2, 2, 2, 136, 124, 3, 2, 2, 2, 136, 130, 3, 2, 2, 2, 136, 132, 3, 2, 2, 2, 137, 35, 3, 2, 2, 2, 17, 39, 43, 49, 54, 58, 64, 71, 80, 83, 89, 102, 112, 128, 134, 136]
\ No newline at end of file
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.tokens b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.tokens
new file mode 100644
index 000000000..5dbe33081
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtData.tokens
@@ -0,0 +1,28 @@
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+LONG=7
+DOUBLE=8
+INTEGER=9
+FLOAT=10
+NEWLINE=11
+COMPOSE=12
+TYPEARROW=13
+ASSIGN=14
+SSTRING_LITERAL=15
+DSTRING_LITERAL=16
+ID=17
+IDPART=18
+WS=19
+';'=1
+'('=2
+','=3
+')'=4
+'$'=5
+';;'=6
+'compose'=12
+'->'=13
+'='=14
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataBaseListener.java b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataBaseListener.java
new file mode 100644
index 000000000..66b7cf07f
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataBaseListener.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2022 nosqlbench
+ *
+ * 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.
+ */
+
+// Generated from VirtData.g4 by ANTLR 4.7.1
+package io.nosqlbench.virtdata.lang.lang.generated;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * This class provides an empty implementation of {@link VirtDataListener},
+ * which can be extended to create a listener which only needs to handle a subset
+ * of the available methods.
+ */
+public class VirtDataBaseListener implements VirtDataListener {
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterVirtdataRecipe(VirtDataParser.VirtdataRecipeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitVirtdataRecipe(VirtDataParser.VirtdataRecipeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterVirtdataFlow(VirtDataParser.VirtdataFlowContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitVirtdataFlow(VirtDataParser.VirtdataFlowContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterExpression(VirtDataParser.ExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitExpression(VirtDataParser.ExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterVirtdataCall(VirtDataParser.VirtdataCallContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitVirtdataCall(VirtDataParser.VirtdataCallContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLvalue(VirtDataParser.LvalueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLvalue(VirtDataParser.LvalueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterInputType(VirtDataParser.InputTypeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitInputType(VirtDataParser.InputTypeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterFuncName(VirtDataParser.FuncNameContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitFuncName(VirtDataParser.FuncNameContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterOutputType(VirtDataParser.OutputTypeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitOutputType(VirtDataParser.OutputTypeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterArg(VirtDataParser.ArgContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitArg(VirtDataParser.ArgContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterRef(VirtDataParser.RefContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitRef(VirtDataParser.RefContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterValue(VirtDataParser.ValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitValue(VirtDataParser.ValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterStringValue(VirtDataParser.StringValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitStringValue(VirtDataParser.StringValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLongValue(VirtDataParser.LongValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLongValue(VirtDataParser.LongValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterDoubleValue(VirtDataParser.DoubleValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitDoubleValue(VirtDataParser.DoubleValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterIntegerValue(VirtDataParser.IntegerValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitIntegerValue(VirtDataParser.IntegerValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterFloatValue(VirtDataParser.FloatValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitFloatValue(VirtDataParser.FloatValueContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterSpecend(VirtDataParser.SpecendContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitSpecend(VirtDataParser.SpecendContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterEveryRule(ParserRuleContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitEveryRule(ParserRuleContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void visitTerminal(TerminalNode node) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void visitErrorNode(ErrorNode node) { }
+}
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.interp b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.interp
new file mode 100644
index 000000000..e4050a732
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.interp
@@ -0,0 +1,76 @@
+token literal names:
+null
+';'
+'('
+','
+')'
+'$'
+';;'
+null
+null
+null
+null
+null
+'compose'
+'->'
+'='
+null
+null
+null
+null
+null
+
+token symbolic names:
+null
+null
+null
+null
+null
+null
+null
+LONG
+DOUBLE
+INTEGER
+FLOAT
+NEWLINE
+COMPOSE
+TYPEARROW
+ASSIGN
+SSTRING_LITERAL
+DSTRING_LITERAL
+ID
+IDPART
+WS
+
+rule names:
+T__0
+T__1
+T__2
+T__3
+T__4
+T__5
+LONG
+DOUBLE
+INTEGER
+FLOAT
+INT
+EXP
+NEWLINE
+COMPOSE
+TYPEARROW
+ASSIGN
+SSTRING_LITERAL
+DSTRING_LITERAL
+ID
+IDPART
+WS
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 21, 202, 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, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 5, 8, 60, 10, 8, 3, 8, 3, 8, 3, 8, 3, 9, 5, 9, 66, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 72, 10, 9, 3, 9, 5, 9, 75, 10, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 81, 10, 9, 3, 9, 5, 9, 84, 10, 9, 3, 9, 3, 9, 3, 10, 5, 10, 89, 10, 10, 3, 10, 3, 10, 3, 11, 5, 11, 94, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 100, 10, 11, 3, 11, 5, 11, 103, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 109, 10, 11, 3, 11, 5, 11, 112, 10, 11, 3, 12, 3, 12, 3, 12, 7, 12, 117, 10, 12, 12, 12, 14, 12, 120, 11, 12, 5, 12, 122, 10, 12, 3, 13, 3, 13, 5, 13, 126, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 133, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 152, 10, 18, 12, 18, 14, 18, 155, 11, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 7, 19, 163, 10, 19, 12, 19, 14, 19, 166, 11, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 7, 20, 173, 10, 20, 12, 20, 14, 20, 176, 11, 20, 3, 21, 3, 21, 7, 21, 180, 10, 21, 12, 21, 14, 21, 183, 11, 21, 3, 21, 3, 21, 7, 21, 187, 10, 21, 12, 21, 14, 21, 190, 11, 21, 3, 21, 3, 21, 5, 21, 194, 10, 21, 3, 22, 6, 22, 197, 10, 22, 13, 22, 14, 22, 198, 3, 22, 3, 22, 2, 2, 23, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 2, 25, 2, 27, 13, 29, 14, 31, 15, 33, 16, 35, 17, 37, 18, 39, 19, 41, 20, 43, 21, 3, 2, 16, 4, 2, 78, 78, 110, 110, 4, 2, 70, 70, 102, 102, 3, 2, 51, 59, 3, 2, 50, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 12, 12, 15, 15, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 4, 2, 41, 41, 94, 94, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 4, 2, 36, 36, 94, 94, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 11, 14, 14, 34, 34, 2, 226, 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, 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, 43, 3, 2, 2, 2, 3, 45, 3, 2, 2, 2, 5, 47, 3, 2, 2, 2, 7, 49, 3, 2, 2, 2, 9, 51, 3, 2, 2, 2, 11, 53, 3, 2, 2, 2, 13, 55, 3, 2, 2, 2, 15, 59, 3, 2, 2, 2, 17, 83, 3, 2, 2, 2, 19, 88, 3, 2, 2, 2, 21, 111, 3, 2, 2, 2, 23, 121, 3, 2, 2, 2, 25, 123, 3, 2, 2, 2, 27, 132, 3, 2, 2, 2, 29, 134, 3, 2, 2, 2, 31, 142, 3, 2, 2, 2, 33, 145, 3, 2, 2, 2, 35, 147, 3, 2, 2, 2, 37, 158, 3, 2, 2, 2, 39, 169, 3, 2, 2, 2, 41, 193, 3, 2, 2, 2, 43, 196, 3, 2, 2, 2, 45, 46, 7, 61, 2, 2, 46, 4, 3, 2, 2, 2, 47, 48, 7, 42, 2, 2, 48, 6, 3, 2, 2, 2, 49, 50, 7, 46, 2, 2, 50, 8, 3, 2, 2, 2, 51, 52, 7, 43, 2, 2, 52, 10, 3, 2, 2, 2, 53, 54, 7, 38, 2, 2, 54, 12, 3, 2, 2, 2, 55, 56, 7, 61, 2, 2, 56, 57, 7, 61, 2, 2, 57, 14, 3, 2, 2, 2, 58, 60, 7, 47, 2, 2, 59, 58, 3, 2, 2, 2, 59, 60, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 62, 5, 23, 12, 2, 62, 63, 9, 2, 2, 2, 63, 16, 3, 2, 2, 2, 64, 66, 7, 47, 2, 2, 65, 64, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 67, 3, 2, 2, 2, 67, 68, 5, 23, 12, 2, 68, 69, 7, 48, 2, 2, 69, 71, 5, 23, 12, 2, 70, 72, 5, 25, 13, 2, 71, 70, 3, 2, 2, 2, 71, 72, 3, 2, 2, 2, 72, 84, 3, 2, 2, 2, 73, 75, 7, 47, 2, 2, 74, 73, 3, 2, 2, 2, 74, 75, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 77, 5, 23, 12, 2, 77, 78, 5, 25, 13, 2, 78, 84, 3, 2, 2, 2, 79, 81, 7, 47, 2, 2, 80, 79, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 84, 5, 23, 12, 2, 83, 65, 3, 2, 2, 2, 83, 74, 3, 2, 2, 2, 83, 80, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 9, 3, 2, 2, 86, 18, 3, 2, 2, 2, 87, 89, 7, 47, 2, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 91, 5, 23, 12, 2, 91, 20, 3, 2, 2, 2, 92, 94, 7, 47, 2, 2, 93, 92, 3, 2, 2, 2, 93, 94, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 96, 5, 23, 12, 2, 96, 97, 7, 48, 2, 2, 97, 99, 5, 23, 12, 2, 98, 100, 5, 25, 13, 2, 99, 98, 3, 2, 2, 2, 99, 100, 3, 2, 2, 2, 100, 112, 3, 2, 2, 2, 101, 103, 7, 47, 2, 2, 102, 101, 3, 2, 2, 2, 102, 103, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 105, 5, 23, 12, 2, 105, 106, 5, 25, 13, 2, 106, 112, 3, 2, 2, 2, 107, 109, 7, 47, 2, 2, 108, 107, 3, 2, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 112, 5, 23, 12, 2, 111, 93, 3, 2, 2, 2, 111, 102, 3, 2, 2, 2, 111, 108, 3, 2, 2, 2, 112, 22, 3, 2, 2, 2, 113, 122, 7, 50, 2, 2, 114, 118, 9, 4, 2, 2, 115, 117, 9, 5, 2, 2, 116, 115, 3, 2, 2, 2, 117, 120, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 118, 119, 3, 2, 2, 2, 119, 122, 3, 2, 2, 2, 120, 118, 3, 2, 2, 2, 121, 113, 3, 2, 2, 2, 121, 114, 3, 2, 2, 2, 122, 24, 3, 2, 2, 2, 123, 125, 9, 6, 2, 2, 124, 126, 9, 7, 2, 2, 125, 124, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 5, 23, 12, 2, 128, 26, 3, 2, 2, 2, 129, 130, 7, 15, 2, 2, 130, 133, 7, 12, 2, 2, 131, 133, 9, 8, 2, 2, 132, 129, 3, 2, 2, 2, 132, 131, 3, 2, 2, 2, 133, 28, 3, 2, 2, 2, 134, 135, 7, 101, 2, 2, 135, 136, 7, 113, 2, 2, 136, 137, 7, 111, 2, 2, 137, 138, 7, 114, 2, 2, 138, 139, 7, 113, 2, 2, 139, 140, 7, 117, 2, 2, 140, 141, 7, 103, 2, 2, 141, 30, 3, 2, 2, 2, 142, 143, 7, 47, 2, 2, 143, 144, 7, 64, 2, 2, 144, 32, 3, 2, 2, 2, 145, 146, 7, 63, 2, 2, 146, 34, 3, 2, 2, 2, 147, 153, 7, 41, 2, 2, 148, 152, 10, 9, 2, 2, 149, 150, 7, 94, 2, 2, 150, 152, 9, 10, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 155, 3, 2, 2, 2, 153, 151, 3, 2, 2, 2, 153, 154, 3, 2, 2, 2, 154, 156, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2, 156, 157, 7, 41, 2, 2, 157, 36, 3, 2, 2, 2, 158, 164, 7, 36, 2, 2, 159, 163, 10, 11, 2, 2, 160, 161, 7, 94, 2, 2, 161, 163, 9, 12, 2, 2, 162, 159, 3, 2, 2, 2, 162, 160, 3, 2, 2, 2, 163, 166, 3, 2, 2, 2, 164, 162, 3, 2, 2, 2, 164, 165, 3, 2, 2, 2, 165, 167, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 167, 168, 7, 36, 2, 2, 168, 38, 3, 2, 2, 2, 169, 174, 5, 41, 21, 2, 170, 171, 7, 48, 2, 2, 171, 173, 5, 41, 21, 2, 172, 170, 3, 2, 2, 2, 173, 176, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 40, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 181, 9, 13, 2, 2, 178, 180, 9, 14, 2, 2, 179, 178, 3, 2, 2, 2, 180, 183, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 194, 3, 2, 2, 2, 183, 181, 3, 2, 2, 2, 184, 188, 9, 13, 2, 2, 185, 187, 9, 14, 2, 2, 186, 185, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 191, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 192, 7, 47, 2, 2, 192, 194, 9, 14, 2, 2, 193, 177, 3, 2, 2, 2, 193, 184, 3, 2, 2, 2, 194, 42, 3, 2, 2, 2, 195, 197, 9, 15, 2, 2, 196, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 201, 8, 22, 2, 2, 201, 44, 3, 2, 2, 2, 28, 2, 59, 65, 71, 74, 80, 83, 88, 93, 99, 102, 108, 111, 118, 121, 125, 132, 151, 153, 162, 164, 174, 181, 188, 193, 198, 3, 2, 3, 2]
\ No newline at end of file
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.java b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.java
new file mode 100644
index 000000000..07b15feb0
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2022 nosqlbench
+ *
+ * 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.
+ */
+
+// Generated from VirtData.g4 by ANTLR 4.7.1
+package io.nosqlbench.virtdata.lang.lang.generated;
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class VirtDataLexer extends Lexer {
+ static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, LONG=7, DOUBLE=8, INTEGER=9,
+ FLOAT=10, NEWLINE=11, COMPOSE=12, TYPEARROW=13, ASSIGN=14, SSTRING_LITERAL=15,
+ DSTRING_LITERAL=16, ID=17, IDPART=18, WS=19;
+ public static String[] channelNames = {
+ "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+ };
+
+ public static String[] modeNames = {
+ "DEFAULT_MODE"
+ };
+
+ public static final String[] ruleNames = {
+ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "LONG", "DOUBLE", "INTEGER",
+ "FLOAT", "INT", "EXP", "NEWLINE", "COMPOSE", "TYPEARROW", "ASSIGN", "SSTRING_LITERAL",
+ "DSTRING_LITERAL", "ID", "IDPART", "WS"
+ };
+
+ private static final String[] _LITERAL_NAMES = {
+ null, "';'", "'('", "','", "')'", "'$'", "';;'", null, null, null, null,
+ null, "'compose'", "'->'", "'='"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, null, null, null, null, null, null, "LONG", "DOUBLE", "INTEGER",
+ "FLOAT", "NEWLINE", "COMPOSE", "TYPEARROW", "ASSIGN", "SSTRING_LITERAL",
+ "DSTRING_LITERAL", "ID", "IDPART", "WS"
+ };
+ 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] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+
+ public VirtDataLexer(CharStream input) {
+ super(input);
+ _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+
+ @Override
+ public String getGrammarFileName() { return "VirtData.g4"; }
+
+ @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\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\25\u00ca\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\3\2\3\2\3\3\3\3\3\4\3\4"+
+ "\3\5\3\5\3\6\3\6\3\7\3\7\3\7\3\b\5\b<\n\b\3\b\3\b\3\b\3\t\5\tB\n\t\3\t"+
+ "\3\t\3\t\3\t\5\tH\n\t\3\t\5\tK\n\t\3\t\3\t\3\t\3\t\5\tQ\n\t\3\t\5\tT\n"+
+ "\t\3\t\3\t\3\n\5\nY\n\n\3\n\3\n\3\13\5\13^\n\13\3\13\3\13\3\13\3\13\5"+
+ "\13d\n\13\3\13\5\13g\n\13\3\13\3\13\3\13\3\13\5\13m\n\13\3\13\5\13p\n"+
+ "\13\3\f\3\f\3\f\7\fu\n\f\f\f\16\fx\13\f\5\fz\n\f\3\r\3\r\5\r~\n\r\3\r"+
+ "\3\r\3\16\3\16\3\16\5\16\u0085\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+
+ "\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\22\7\22\u0098\n\22\f\22"+
+ "\16\22\u009b\13\22\3\22\3\22\3\23\3\23\3\23\3\23\7\23\u00a3\n\23\f\23"+
+ "\16\23\u00a6\13\23\3\23\3\23\3\24\3\24\3\24\7\24\u00ad\n\24\f\24\16\24"+
+ "\u00b0\13\24\3\25\3\25\7\25\u00b4\n\25\f\25\16\25\u00b7\13\25\3\25\3\25"+
+ "\7\25\u00bb\n\25\f\25\16\25\u00be\13\25\3\25\3\25\5\25\u00c2\n\25\3\26"+
+ "\6\26\u00c5\n\26\r\26\16\26\u00c6\3\26\3\26\2\2\27\3\3\5\4\7\5\t\6\13"+
+ "\7\r\b\17\t\21\n\23\13\25\f\27\2\31\2\33\r\35\16\37\17!\20#\21%\22\'\23"+
+ ")\24+\25\3\2\20\4\2NNnn\4\2FFff\3\2\63;\3\2\62;\4\2GGgg\4\2--//\4\2\f"+
+ "\f\17\17\6\2\f\f\17\17))^^\4\2))^^\6\2\f\f\17\17$$^^\4\2$$^^\4\2C\\c|"+
+ "\6\2\62;C\\aac|\5\2\13\13\16\16\"\"\2\u00e2\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\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+\3\2\2\2\3"+
+ "-\3\2\2\2\5/\3\2\2\2\7\61\3\2\2\2\t\63\3\2\2\2\13\65\3\2\2\2\r\67\3\2"+
+ "\2\2\17;\3\2\2\2\21S\3\2\2\2\23X\3\2\2\2\25o\3\2\2\2\27y\3\2\2\2\31{\3"+
+ "\2\2\2\33\u0084\3\2\2\2\35\u0086\3\2\2\2\37\u008e\3\2\2\2!\u0091\3\2\2"+
+ "\2#\u0093\3\2\2\2%\u009e\3\2\2\2\'\u00a9\3\2\2\2)\u00c1\3\2\2\2+\u00c4"+
+ "\3\2\2\2-.\7=\2\2.\4\3\2\2\2/\60\7*\2\2\60\6\3\2\2\2\61\62\7.\2\2\62\b"+
+ "\3\2\2\2\63\64\7+\2\2\64\n\3\2\2\2\65\66\7&\2\2\66\f\3\2\2\2\678\7=\2"+
+ "\289\7=\2\29\16\3\2\2\2:<\7/\2\2;:\3\2\2\2;<\3\2\2\2<=\3\2\2\2=>\5\27"+
+ "\f\2>?\t\2\2\2?\20\3\2\2\2@B\7/\2\2A@\3\2\2\2AB\3\2\2\2BC\3\2\2\2CD\5"+
+ "\27\f\2DE\7\60\2\2EG\5\27\f\2FH\5\31\r\2GF\3\2\2\2GH\3\2\2\2HT\3\2\2\2"+
+ "IK\7/\2\2JI\3\2\2\2JK\3\2\2\2KL\3\2\2\2LM\5\27\f\2MN\5\31\r\2NT\3\2\2"+
+ "\2OQ\7/\2\2PO\3\2\2\2PQ\3\2\2\2QR\3\2\2\2RT\5\27\f\2SA\3\2\2\2SJ\3\2\2"+
+ "\2SP\3\2\2\2TU\3\2\2\2UV\t\3\2\2V\22\3\2\2\2WY\7/\2\2XW\3\2\2\2XY\3\2"+
+ "\2\2YZ\3\2\2\2Z[\5\27\f\2[\24\3\2\2\2\\^\7/\2\2]\\\3\2\2\2]^\3\2\2\2^"+
+ "_\3\2\2\2_`\5\27\f\2`a\7\60\2\2ac\5\27\f\2bd\5\31\r\2cb\3\2\2\2cd\3\2"+
+ "\2\2dp\3\2\2\2eg\7/\2\2fe\3\2\2\2fg\3\2\2\2gh\3\2\2\2hi\5\27\f\2ij\5\31"+
+ "\r\2jp\3\2\2\2km\7/\2\2lk\3\2\2\2lm\3\2\2\2mn\3\2\2\2np\5\27\f\2o]\3\2"+
+ "\2\2of\3\2\2\2ol\3\2\2\2p\26\3\2\2\2qz\7\62\2\2rv\t\4\2\2su\t\5\2\2ts"+
+ "\3\2\2\2ux\3\2\2\2vt\3\2\2\2vw\3\2\2\2wz\3\2\2\2xv\3\2\2\2yq\3\2\2\2y"+
+ "r\3\2\2\2z\30\3\2\2\2{}\t\6\2\2|~\t\7\2\2}|\3\2\2\2}~\3\2\2\2~\177\3\2"+
+ "\2\2\177\u0080\5\27\f\2\u0080\32\3\2\2\2\u0081\u0082\7\17\2\2\u0082\u0085"+
+ "\7\f\2\2\u0083\u0085\t\b\2\2\u0084\u0081\3\2\2\2\u0084\u0083\3\2\2\2\u0085"+
+ "\34\3\2\2\2\u0086\u0087\7e\2\2\u0087\u0088\7q\2\2\u0088\u0089\7o\2\2\u0089"+
+ "\u008a\7r\2\2\u008a\u008b\7q\2\2\u008b\u008c\7u\2\2\u008c\u008d\7g\2\2"+
+ "\u008d\36\3\2\2\2\u008e\u008f\7/\2\2\u008f\u0090\7@\2\2\u0090 \3\2\2\2"+
+ "\u0091\u0092\7?\2\2\u0092\"\3\2\2\2\u0093\u0099\7)\2\2\u0094\u0098\n\t"+
+ "\2\2\u0095\u0096\7^\2\2\u0096\u0098\t\n\2\2\u0097\u0094\3\2\2\2\u0097"+
+ "\u0095\3\2\2\2\u0098\u009b\3\2\2\2\u0099\u0097\3\2\2\2\u0099\u009a\3\2"+
+ "\2\2\u009a\u009c\3\2\2\2\u009b\u0099\3\2\2\2\u009c\u009d\7)\2\2\u009d"+
+ "$\3\2\2\2\u009e\u00a4\7$\2\2\u009f\u00a3\n\13\2\2\u00a0\u00a1\7^\2\2\u00a1"+
+ "\u00a3\t\f\2\2\u00a2\u009f\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a3\u00a6\3\2"+
+ "\2\2\u00a4\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a7\3\2\2\2\u00a6"+
+ "\u00a4\3\2\2\2\u00a7\u00a8\7$\2\2\u00a8&\3\2\2\2\u00a9\u00ae\5)\25\2\u00aa"+
+ "\u00ab\7\60\2\2\u00ab\u00ad\5)\25\2\u00ac\u00aa\3\2\2\2\u00ad\u00b0\3"+
+ "\2\2\2\u00ae\u00ac\3\2\2\2\u00ae\u00af\3\2\2\2\u00af(\3\2\2\2\u00b0\u00ae"+
+ "\3\2\2\2\u00b1\u00b5\t\r\2\2\u00b2\u00b4\t\16\2\2\u00b3\u00b2\3\2\2\2"+
+ "\u00b4\u00b7\3\2\2\2\u00b5\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00c2"+
+ "\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b8\u00bc\t\r\2\2\u00b9\u00bb\t\16\2\2"+
+ "\u00ba\u00b9\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc\u00bd"+
+ "\3\2\2\2\u00bd\u00bf\3\2\2\2\u00be\u00bc\3\2\2\2\u00bf\u00c0\7/\2\2\u00c0"+
+ "\u00c2\t\16\2\2\u00c1\u00b1\3\2\2\2\u00c1\u00b8\3\2\2\2\u00c2*\3\2\2\2"+
+ "\u00c3\u00c5\t\17\2\2\u00c4\u00c3\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00c4"+
+ "\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00c9\b\26\2\2"+
+ "\u00c9,\3\2\2\2\34\2;AGJPSX]cflovy}\u0084\u0097\u0099\u00a2\u00a4\u00ae"+
+ "\u00b5\u00bc\u00c1\u00c6\3\2\3\2";
+ public static final ATN _ATN =
+ new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+ static {
+ _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+ for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+ _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+ }
+ }
+}
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.tokens b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.tokens
new file mode 100644
index 000000000..5dbe33081
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataLexer.tokens
@@ -0,0 +1,28 @@
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+LONG=7
+DOUBLE=8
+INTEGER=9
+FLOAT=10
+NEWLINE=11
+COMPOSE=12
+TYPEARROW=13
+ASSIGN=14
+SSTRING_LITERAL=15
+DSTRING_LITERAL=16
+ID=17
+IDPART=18
+WS=19
+';'=1
+'('=2
+','=3
+')'=4
+'$'=5
+';;'=6
+'compose'=12
+'->'=13
+'='=14
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataListener.java b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataListener.java
new file mode 100644
index 000000000..cd1415d69
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataListener.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2022 nosqlbench
+ *
+ * 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.
+ */
+
+// Generated from VirtData.g4 by ANTLR 4.7.1
+package io.nosqlbench.virtdata.lang.lang.generated;
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link VirtDataParser}.
+ */
+public interface VirtDataListener extends ParseTreeListener {
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#virtdataRecipe}.
+ * @param ctx the parse tree
+ */
+ void enterVirtdataRecipe(VirtDataParser.VirtdataRecipeContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#virtdataRecipe}.
+ * @param ctx the parse tree
+ */
+ void exitVirtdataRecipe(VirtDataParser.VirtdataRecipeContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#virtdataFlow}.
+ * @param ctx the parse tree
+ */
+ void enterVirtdataFlow(VirtDataParser.VirtdataFlowContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#virtdataFlow}.
+ * @param ctx the parse tree
+ */
+ void exitVirtdataFlow(VirtDataParser.VirtdataFlowContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterExpression(VirtDataParser.ExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitExpression(VirtDataParser.ExpressionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#virtdataCall}.
+ * @param ctx the parse tree
+ */
+ void enterVirtdataCall(VirtDataParser.VirtdataCallContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#virtdataCall}.
+ * @param ctx the parse tree
+ */
+ void exitVirtdataCall(VirtDataParser.VirtdataCallContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#lvalue}.
+ * @param ctx the parse tree
+ */
+ void enterLvalue(VirtDataParser.LvalueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#lvalue}.
+ * @param ctx the parse tree
+ */
+ void exitLvalue(VirtDataParser.LvalueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#inputType}.
+ * @param ctx the parse tree
+ */
+ void enterInputType(VirtDataParser.InputTypeContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#inputType}.
+ * @param ctx the parse tree
+ */
+ void exitInputType(VirtDataParser.InputTypeContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#funcName}.
+ * @param ctx the parse tree
+ */
+ void enterFuncName(VirtDataParser.FuncNameContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#funcName}.
+ * @param ctx the parse tree
+ */
+ void exitFuncName(VirtDataParser.FuncNameContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#outputType}.
+ * @param ctx the parse tree
+ */
+ void enterOutputType(VirtDataParser.OutputTypeContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#outputType}.
+ * @param ctx the parse tree
+ */
+ void exitOutputType(VirtDataParser.OutputTypeContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#arg}.
+ * @param ctx the parse tree
+ */
+ void enterArg(VirtDataParser.ArgContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#arg}.
+ * @param ctx the parse tree
+ */
+ void exitArg(VirtDataParser.ArgContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#ref}.
+ * @param ctx the parse tree
+ */
+ void enterRef(VirtDataParser.RefContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#ref}.
+ * @param ctx the parse tree
+ */
+ void exitRef(VirtDataParser.RefContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#value}.
+ * @param ctx the parse tree
+ */
+ void enterValue(VirtDataParser.ValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#value}.
+ * @param ctx the parse tree
+ */
+ void exitValue(VirtDataParser.ValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#stringValue}.
+ * @param ctx the parse tree
+ */
+ void enterStringValue(VirtDataParser.StringValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#stringValue}.
+ * @param ctx the parse tree
+ */
+ void exitStringValue(VirtDataParser.StringValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#longValue}.
+ * @param ctx the parse tree
+ */
+ void enterLongValue(VirtDataParser.LongValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#longValue}.
+ * @param ctx the parse tree
+ */
+ void exitLongValue(VirtDataParser.LongValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#doubleValue}.
+ * @param ctx the parse tree
+ */
+ void enterDoubleValue(VirtDataParser.DoubleValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#doubleValue}.
+ * @param ctx the parse tree
+ */
+ void exitDoubleValue(VirtDataParser.DoubleValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#integerValue}.
+ * @param ctx the parse tree
+ */
+ void enterIntegerValue(VirtDataParser.IntegerValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#integerValue}.
+ * @param ctx the parse tree
+ */
+ void exitIntegerValue(VirtDataParser.IntegerValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#floatValue}.
+ * @param ctx the parse tree
+ */
+ void enterFloatValue(VirtDataParser.FloatValueContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#floatValue}.
+ * @param ctx the parse tree
+ */
+ void exitFloatValue(VirtDataParser.FloatValueContext ctx);
+ /**
+ * Enter a parse tree produced by {@link VirtDataParser#specend}.
+ * @param ctx the parse tree
+ */
+ void enterSpecend(VirtDataParser.SpecendContext ctx);
+ /**
+ * Exit a parse tree produced by {@link VirtDataParser#specend}.
+ * @param ctx the parse tree
+ */
+ void exitSpecend(VirtDataParser.SpecendContext ctx);
+}
diff --git a/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataParser.java b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataParser.java
new file mode 100644
index 000000000..be38f0fa4
--- /dev/null
+++ b/virtdata-lang/src/main/java/io/nosqlbench/virtdata/lang/lang/generated/VirtDataParser.java
@@ -0,0 +1,1114 @@
+/*
+ * Copyright (c) 2022 nosqlbench
+ *
+ * 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.
+ */
+
+// Generated from VirtData.g4 by ANTLR 4.7.1
+package io.nosqlbench.virtdata.lang.lang.generated;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class VirtDataParser extends Parser {
+ static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, LONG=7, DOUBLE=8, INTEGER=9,
+ FLOAT=10, NEWLINE=11, COMPOSE=12, TYPEARROW=13, ASSIGN=14, SSTRING_LITERAL=15,
+ DSTRING_LITERAL=16, ID=17, IDPART=18, WS=19;
+ public static final int
+ RULE_virtdataRecipe = 0, RULE_virtdataFlow = 1, RULE_expression = 2, RULE_virtdataCall = 3,
+ RULE_lvalue = 4, RULE_inputType = 5, RULE_funcName = 6, RULE_outputType = 7,
+ RULE_arg = 8, RULE_ref = 9, RULE_value = 10, RULE_stringValue = 11, RULE_longValue = 12,
+ RULE_doubleValue = 13, RULE_integerValue = 14, RULE_floatValue = 15, RULE_specend = 16;
+ public static final String[] ruleNames = {
+ "virtdataRecipe", "virtdataFlow", "expression", "virtdataCall", "lvalue",
+ "inputType", "funcName", "outputType", "arg", "ref", "value", "stringValue",
+ "longValue", "doubleValue", "integerValue", "floatValue", "specend"
+ };
+
+ private static final String[] _LITERAL_NAMES = {
+ null, "';'", "'('", "','", "')'", "'$'", "';;'", null, null, null, null,
+ null, "'compose'", "'->'", "'='"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, null, null, null, null, null, null, "LONG", "DOUBLE", "INTEGER",
+ "FLOAT", "NEWLINE", "COMPOSE", "TYPEARROW", "ASSIGN", "SSTRING_LITERAL",
+ "DSTRING_LITERAL", "ID", "IDPART", "WS"
+ };
+ 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] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+ @Override
+ public String getGrammarFileName() { return "VirtData.g4"; }
+
+ @Override
+ public String[] getRuleNames() { return ruleNames; }
+
+ @Override
+ public String getSerializedATN() { return _serializedATN; }
+
+ @Override
+ public ATN getATN() { return _ATN; }
+
+ public VirtDataParser(TokenStream input) {
+ super(input);
+ _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+ public static class VirtdataRecipeContext extends ParserRuleContext {
+ public List virtdataFlow() {
+ return getRuleContexts(VirtdataFlowContext.class);
+ }
+ public VirtdataFlowContext virtdataFlow(int i) {
+ return getRuleContext(VirtdataFlowContext.class,i);
+ }
+ public TerminalNode EOF() { return getToken(VirtDataParser.EOF, 0); }
+ public List specend() {
+ return getRuleContexts(SpecendContext.class);
+ }
+ public SpecendContext specend(int i) {
+ return getRuleContext(SpecendContext.class,i);
+ }
+ public VirtdataRecipeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_virtdataRecipe; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterVirtdataRecipe(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitVirtdataRecipe(this);
+ }
+ }
+
+ public final VirtdataRecipeContext virtdataRecipe() throws RecognitionException {
+ VirtdataRecipeContext _localctx = new VirtdataRecipeContext(_ctx, getState());
+ enterRule(_localctx, 0, RULE_virtdataRecipe);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(34);
+ virtdataFlow();
+ setState(41);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__5 || _la==NEWLINE) {
+ {
+ {
+ setState(35);
+ specend();
+ setState(37);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMPOSE || _la==ID) {
+ {
+ setState(36);
+ virtdataFlow();
+ }
+ }
+
+ }
+ }
+ setState(43);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(44);
+ match(EOF);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VirtdataFlowContext extends ParserRuleContext {
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public TerminalNode COMPOSE() { return getToken(VirtDataParser.COMPOSE, 0); }
+ public VirtdataFlowContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_virtdataFlow; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterVirtdataFlow(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitVirtdataFlow(this);
+ }
+ }
+
+ public final VirtdataFlowContext virtdataFlow() throws RecognitionException {
+ VirtdataFlowContext _localctx = new VirtdataFlowContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_virtdataFlow);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(47);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==COMPOSE) {
+ {
+ setState(46);
+ match(COMPOSE);
+ }
+ }
+
+ setState(49);
+ expression();
+ setState(56);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__0) {
+ {
+ {
+ setState(50);
+ match(T__0);
+ setState(52);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==ID) {
+ {
+ setState(51);
+ expression();
+ }
+ }
+
+ }
+ }
+ setState(58);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ExpressionContext extends ParserRuleContext {
+ public VirtdataCallContext virtdataCall() {
+ return getRuleContext(VirtdataCallContext.class,0);
+ }
+ public LvalueContext lvalue() {
+ return getRuleContext(LvalueContext.class,0);
+ }
+ public TerminalNode ASSIGN() { return getToken(VirtDataParser.ASSIGN, 0); }
+ public ExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_expression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitExpression(this);
+ }
+ }
+
+ public final ExpressionContext expression() throws RecognitionException {
+ ExpressionContext _localctx = new ExpressionContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_expression);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(62);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
+ case 1:
+ {
+ setState(59);
+ lvalue();
+ setState(60);
+ match(ASSIGN);
+ }
+ break;
+ }
+ setState(64);
+ virtdataCall();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VirtdataCallContext extends ParserRuleContext {
+ public FuncNameContext funcName() {
+ return getRuleContext(FuncNameContext.class,0);
+ }
+ public InputTypeContext inputType() {
+ return getRuleContext(InputTypeContext.class,0);
+ }
+ public List TYPEARROW() { return getTokens(VirtDataParser.TYPEARROW); }
+ public TerminalNode TYPEARROW(int i) {
+ return getToken(VirtDataParser.TYPEARROW, i);
+ }
+ public OutputTypeContext outputType() {
+ return getRuleContext(OutputTypeContext.class,0);
+ }
+ public List arg() {
+ return getRuleContexts(ArgContext.class);
+ }
+ public ArgContext arg(int i) {
+ return getRuleContext(ArgContext.class,i);
+ }
+ public VirtdataCallContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_virtdataCall; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterVirtdataCall(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitVirtdataCall(this);
+ }
+ }
+
+ public final VirtdataCallContext virtdataCall() throws RecognitionException {
+ VirtdataCallContext _localctx = new VirtdataCallContext(_ctx, getState());
+ enterRule(_localctx, 6, RULE_virtdataCall);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(69);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
+ case 1:
+ {
+ setState(66);
+ inputType();
+ setState(67);
+ match(TYPEARROW);
+ }
+ break;
+ }
+ {
+ setState(71);
+ funcName();
+ setState(72);
+ match(T__1);
+ setState(81);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << LONG) | (1L << DOUBLE) | (1L << INTEGER) | (1L << FLOAT) | (1L << SSTRING_LITERAL) | (1L << DSTRING_LITERAL) | (1L << ID))) != 0)) {
+ {
+ setState(73);
+ arg();
+ setState(78);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__2) {
+ {
+ {
+ setState(74);
+ match(T__2);
+ setState(75);
+ arg();
+ }
+ }
+ setState(80);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+
+ setState(83);
+ match(T__3);
+ }
+ setState(87);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==TYPEARROW) {
+ {
+ setState(85);
+ match(TYPEARROW);
+ setState(86);
+ outputType();
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LvalueContext extends ParserRuleContext {
+ public TerminalNode ID() { return getToken(VirtDataParser.ID, 0); }
+ public LvalueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_lvalue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterLvalue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitLvalue(this);
+ }
+ }
+
+ public final LvalueContext lvalue() throws RecognitionException {
+ LvalueContext _localctx = new LvalueContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_lvalue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(89);
+ match(ID);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InputTypeContext extends ParserRuleContext {
+ public TerminalNode ID() { return getToken(VirtDataParser.ID, 0); }
+ public InputTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_inputType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterInputType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitInputType(this);
+ }
+ }
+
+ public final InputTypeContext inputType() throws RecognitionException {
+ InputTypeContext _localctx = new InputTypeContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_inputType);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(91);
+ match(ID);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FuncNameContext extends ParserRuleContext {
+ public TerminalNode ID() { return getToken(VirtDataParser.ID, 0); }
+ public FuncNameContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_funcName; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterFuncName(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitFuncName(this);
+ }
+ }
+
+ public final FuncNameContext funcName() throws RecognitionException {
+ FuncNameContext _localctx = new FuncNameContext(_ctx, getState());
+ enterRule(_localctx, 12, RULE_funcName);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(93);
+ match(ID);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class OutputTypeContext extends ParserRuleContext {
+ public TerminalNode ID() { return getToken(VirtDataParser.ID, 0); }
+ public OutputTypeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_outputType; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterOutputType(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitOutputType(this);
+ }
+ }
+
+ public final OutputTypeContext outputType() throws RecognitionException {
+ OutputTypeContext _localctx = new OutputTypeContext(_ctx, getState());
+ enterRule(_localctx, 14, RULE_outputType);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(95);
+ match(ID);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ArgContext extends ParserRuleContext {
+ public ValueContext value() {
+ return getRuleContext(ValueContext.class,0);
+ }
+ public VirtdataCallContext virtdataCall() {
+ return getRuleContext(VirtdataCallContext.class,0);
+ }
+ public RefContext ref() {
+ return getRuleContext(RefContext.class,0);
+ }
+ public ArgContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_arg; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterArg(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitArg(this);
+ }
+ }
+
+ public final ArgContext arg() throws RecognitionException {
+ ArgContext _localctx = new ArgContext(_ctx, getState());
+ enterRule(_localctx, 16, RULE_arg);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(100);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case LONG:
+ case DOUBLE:
+ case INTEGER:
+ case FLOAT:
+ case SSTRING_LITERAL:
+ case DSTRING_LITERAL:
+ {
+ setState(97);
+ value();
+ }
+ break;
+ case ID:
+ {
+ setState(98);
+ virtdataCall();
+ }
+ break;
+ case T__4:
+ {
+ setState(99);
+ ref();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class RefContext extends ParserRuleContext {
+ public TerminalNode ID() { return getToken(VirtDataParser.ID, 0); }
+ public RefContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_ref; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterRef(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitRef(this);
+ }
+ }
+
+ public final RefContext ref() throws RecognitionException {
+ RefContext _localctx = new RefContext(_ctx, getState());
+ enterRule(_localctx, 18, RULE_ref);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ {
+ setState(102);
+ match(T__4);
+ setState(103);
+ match(ID);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ValueContext extends ParserRuleContext {
+ public FloatValueContext floatValue() {
+ return getRuleContext(FloatValueContext.class,0);
+ }
+ public DoubleValueContext doubleValue() {
+ return getRuleContext(DoubleValueContext.class,0);
+ }
+ public IntegerValueContext integerValue() {
+ return getRuleContext(IntegerValueContext.class,0);
+ }
+ public LongValueContext longValue() {
+ return getRuleContext(LongValueContext.class,0);
+ }
+ public StringValueContext stringValue() {
+ return getRuleContext(StringValueContext.class,0);
+ }
+ public ValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_value; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitValue(this);
+ }
+ }
+
+ public final ValueContext value() throws RecognitionException {
+ ValueContext _localctx = new ValueContext(_ctx, getState());
+ enterRule(_localctx, 20, RULE_value);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(110);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case FLOAT:
+ {
+ setState(105);
+ floatValue();
+ }
+ break;
+ case DOUBLE:
+ {
+ setState(106);
+ doubleValue();
+ }
+ break;
+ case INTEGER:
+ {
+ setState(107);
+ integerValue();
+ }
+ break;
+ case LONG:
+ {
+ setState(108);
+ longValue();
+ }
+ break;
+ case SSTRING_LITERAL:
+ case DSTRING_LITERAL:
+ {
+ setState(109);
+ stringValue();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class StringValueContext extends ParserRuleContext {
+ public TerminalNode SSTRING_LITERAL() { return getToken(VirtDataParser.SSTRING_LITERAL, 0); }
+ public TerminalNode DSTRING_LITERAL() { return getToken(VirtDataParser.DSTRING_LITERAL, 0); }
+ public StringValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_stringValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterStringValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitStringValue(this);
+ }
+ }
+
+ public final StringValueContext stringValue() throws RecognitionException {
+ StringValueContext _localctx = new StringValueContext(_ctx, getState());
+ enterRule(_localctx, 22, RULE_stringValue);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(112);
+ _la = _input.LA(1);
+ if ( !(_la==SSTRING_LITERAL || _la==DSTRING_LITERAL) ) {
+ _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 LongValueContext extends ParserRuleContext {
+ public TerminalNode LONG() { return getToken(VirtDataParser.LONG, 0); }
+ public LongValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_longValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterLongValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitLongValue(this);
+ }
+ }
+
+ public final LongValueContext longValue() throws RecognitionException {
+ LongValueContext _localctx = new LongValueContext(_ctx, getState());
+ enterRule(_localctx, 24, RULE_longValue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(114);
+ match(LONG);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class DoubleValueContext extends ParserRuleContext {
+ public TerminalNode DOUBLE() { return getToken(VirtDataParser.DOUBLE, 0); }
+ public DoubleValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_doubleValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterDoubleValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitDoubleValue(this);
+ }
+ }
+
+ public final DoubleValueContext doubleValue() throws RecognitionException {
+ DoubleValueContext _localctx = new DoubleValueContext(_ctx, getState());
+ enterRule(_localctx, 26, RULE_doubleValue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(116);
+ match(DOUBLE);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class IntegerValueContext extends ParserRuleContext {
+ public TerminalNode INTEGER() { return getToken(VirtDataParser.INTEGER, 0); }
+ public IntegerValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_integerValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterIntegerValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitIntegerValue(this);
+ }
+ }
+
+ public final IntegerValueContext integerValue() throws RecognitionException {
+ IntegerValueContext _localctx = new IntegerValueContext(_ctx, getState());
+ enterRule(_localctx, 28, RULE_integerValue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(118);
+ match(INTEGER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FloatValueContext extends ParserRuleContext {
+ public TerminalNode FLOAT() { return getToken(VirtDataParser.FLOAT, 0); }
+ public FloatValueContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_floatValue; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterFloatValue(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitFloatValue(this);
+ }
+ }
+
+ public final FloatValueContext floatValue() throws RecognitionException {
+ FloatValueContext _localctx = new FloatValueContext(_ctx, getState());
+ enterRule(_localctx, 30, RULE_floatValue);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(120);
+ match(FLOAT);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SpecendContext extends ParserRuleContext {
+ public List NEWLINE() { return getTokens(VirtDataParser.NEWLINE); }
+ public TerminalNode NEWLINE(int i) {
+ return getToken(VirtDataParser.NEWLINE, i);
+ }
+ public SpecendContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_specend; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).enterSpecend(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof VirtDataListener ) ((VirtDataListener)listener).exitSpecend(this);
+ }
+ }
+
+ public final SpecendContext specend() throws RecognitionException {
+ SpecendContext _localctx = new SpecendContext(_ctx, getState());
+ enterRule(_localctx, 32, RULE_specend);
+ try {
+ int _alt;
+ setState(134);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ {
+ setState(122);
+ match(T__5);
+ setState(124);
+ _errHandler.sync(this);
+ _alt = 1;
+ do {
+ switch (_alt) {
+ case 1:
+ {
+ {
+ setState(123);
+ match(NEWLINE);
+ }
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(126);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
+ }
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(128);
+ match(T__5);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(130);
+ _errHandler.sync(this);
+ _alt = 1;
+ do {
+ switch (_alt) {
+ case 1:
+ {
+ {
+ setState(129);
+ match(NEWLINE);
+ }
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(132);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
+ } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
+ }
+ break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static final String _serializedATN =
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\25\u008b\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"+
+ "\3\2\3\2\3\2\5\2(\n\2\7\2*\n\2\f\2\16\2-\13\2\3\2\3\2\3\3\5\3\62\n\3\3"+
+ "\3\3\3\3\3\5\3\67\n\3\7\39\n\3\f\3\16\3<\13\3\3\4\3\4\3\4\5\4A\n\4\3\4"+
+ "\3\4\3\5\3\5\3\5\5\5H\n\5\3\5\3\5\3\5\3\5\3\5\7\5O\n\5\f\5\16\5R\13\5"+
+ "\5\5T\n\5\3\5\3\5\3\5\3\5\5\5Z\n\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n"+
+ "\3\n\3\n\5\ng\n\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\5\fq\n\f\3\r\3\r"+
+ "\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\6\22\177\n\22\r\22"+
+ "\16\22\u0080\3\22\3\22\6\22\u0085\n\22\r\22\16\22\u0086\5\22\u0089\n\22"+
+ "\3\22\2\2\23\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"\2\3\3\2\21\22\2"+
+ "\u008d\2$\3\2\2\2\4\61\3\2\2\2\6@\3\2\2\2\bG\3\2\2\2\n[\3\2\2\2\f]\3\2"+
+ "\2\2\16_\3\2\2\2\20a\3\2\2\2\22f\3\2\2\2\24h\3\2\2\2\26p\3\2\2\2\30r\3"+
+ "\2\2\2\32t\3\2\2\2\34v\3\2\2\2\36x\3\2\2\2 z\3\2\2\2\"\u0088\3\2\2\2$"+
+ "+\5\4\3\2%\'\5\"\22\2&(\5\4\3\2\'&\3\2\2\2\'(\3\2\2\2(*\3\2\2\2)%\3\2"+
+ "\2\2*-\3\2\2\2+)\3\2\2\2+,\3\2\2\2,.\3\2\2\2-+\3\2\2\2./\7\2\2\3/\3\3"+
+ "\2\2\2\60\62\7\16\2\2\61\60\3\2\2\2\61\62\3\2\2\2\62\63\3\2\2\2\63:\5"+
+ "\6\4\2\64\66\7\3\2\2\65\67\5\6\4\2\66\65\3\2\2\2\66\67\3\2\2\2\679\3\2"+
+ "\2\28\64\3\2\2\29<\3\2\2\2:8\3\2\2\2:;\3\2\2\2;\5\3\2\2\2<:\3\2\2\2=>"+
+ "\5\n\6\2>?\7\20\2\2?A\3\2\2\2@=\3\2\2\2@A\3\2\2\2AB\3\2\2\2BC\5\b\5\2"+
+ "C\7\3\2\2\2DE\5\f\7\2EF\7\17\2\2FH\3\2\2\2GD\3\2\2\2GH\3\2\2\2HI\3\2\2"+
+ "\2IJ\5\16\b\2JS\7\4\2\2KP\5\22\n\2LM\7\5\2\2MO\5\22\n\2NL\3\2\2\2OR\3"+
+ "\2\2\2PN\3\2\2\2PQ\3\2\2\2QT\3\2\2\2RP\3\2\2\2SK\3\2\2\2ST\3\2\2\2TU\3"+
+ "\2\2\2UV\7\6\2\2VY\3\2\2\2WX\7\17\2\2XZ\5\20\t\2YW\3\2\2\2YZ\3\2\2\2Z"+
+ "\t\3\2\2\2[\\\7\23\2\2\\\13\3\2\2\2]^\7\23\2\2^\r\3\2\2\2_`\7\23\2\2`"+
+ "\17\3\2\2\2ab\7\23\2\2b\21\3\2\2\2cg\5\26\f\2dg\5\b\5\2eg\5\24\13\2fc"+
+ "\3\2\2\2fd\3\2\2\2fe\3\2\2\2g\23\3\2\2\2hi\7\7\2\2ij\7\23\2\2j\25\3\2"+
+ "\2\2kq\5 \21\2lq\5\34\17\2mq\5\36\20\2nq\5\32\16\2oq\5\30\r\2pk\3\2\2"+
+ "\2pl\3\2\2\2pm\3\2\2\2pn\3\2\2\2po\3\2\2\2q\27\3\2\2\2rs\t\2\2\2s\31\3"+
+ "\2\2\2tu\7\t\2\2u\33\3\2\2\2vw\7\n\2\2w\35\3\2\2\2xy\7\13\2\2y\37\3\2"+
+ "\2\2z{\7\f\2\2{!\3\2\2\2|~\7\b\2\2}\177\7\r\2\2~}\3\2\2\2\177\u0080\3"+
+ "\2\2\2\u0080~\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0089\3\2\2\2\u0082\u0089"+
+ "\7\b\2\2\u0083\u0085\7\r\2\2\u0084\u0083\3\2\2\2\u0085\u0086\3\2\2\2\u0086"+
+ "\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0089\3\2\2\2\u0088|\3\2\2\2"+
+ "\u0088\u0082\3\2\2\2\u0088\u0084\3\2\2\2\u0089#\3\2\2\2\21\'+\61\66:@"+
+ "GPSYfp\u0080\u0086\u0088";
+ public static final ATN _ATN =
+ new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+ static {
+ _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+ for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+ _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+ }
+ }
+}