diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4
index 52bfe1174..4f69a3961 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4
+++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4
@@ -1,12 +1,20 @@
// KickC grammar
grammar KickC;
-file :
- declSeq EOF
+file
+ : importSeq declSeq EOF
;
-asmFile :
- asmLines EOF
+asmFile
+ : asmLines EOF
+ ;
+
+importSeq
+ : importDecl+
+ ;
+
+importDecl
+ : 'import' STRING
;
declSeq
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens
index 8f685bbbe..7205ec01e 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens
+++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens
@@ -44,68 +44,70 @@ T__42=43
T__43=44
T__44=45
T__45=46
-MNEMONIC=47
-SIMPLETYPE=48
-STRING=49
-CHAR=50
-BOOLEAN=51
-NUMBER=52
-NUMFLOAT=53
-BINFLOAT=54
-DECFLOAT=55
-HEXFLOAT=56
-NUMINT=57
-BININTEGER=58
-DECINTEGER=59
-HEXINTEGER=60
-NAME=61
-ASMREL=62
-WS=63
-COMMENT_LINE=64
-COMMENT_BLOCK=65
-'('=1
-')'=2
-'{'=3
-'}'=4
-'const'=5
-'='=6
-';'=7
-'if'=8
-'else'=9
-'while'=10
-'do'=11
-'for'=12
-'return'=13
-'asm'=14
-':'=15
-'..'=16
-','=17
-'signed'=18
-'*'=19
-'['=20
-']'=21
-'<'=22
-'>'=23
-'--'=24
-'++'=25
-'+'=26
-'-'=27
-'!'=28
-'&'=29
-'~'=30
-'>>'=31
-'<<'=32
-'/'=33
-'%'=34
-'=='=35
-'!='=36
-'<>'=37
-'<='=38
-'=<'=39
-'>='=40
-'=>'=41
-'^'=42
-'|'=43
-'&&'=44
-'||'=45
-'#'=46
+T__46=47
+MNEMONIC=48
+SIMPLETYPE=49
+STRING=50
+CHAR=51
+BOOLEAN=52
+NUMBER=53
+NUMFLOAT=54
+BINFLOAT=55
+DECFLOAT=56
+HEXFLOAT=57
+NUMINT=58
+BININTEGER=59
+DECINTEGER=60
+HEXINTEGER=61
+NAME=62
+ASMREL=63
+WS=64
+COMMENT_LINE=65
+COMMENT_BLOCK=66
+'import'=1
+'('=2
+')'=3
+'{'=4
+'}'=5
+','=6
+'const'=7
+'='=8
+';'=9
+'if'=10
+'else'=11
+'while'=12
+'do'=13
+'for'=14
+'return'=15
+'asm'=16
+':'=17
+'..'=18
+'signed'=19
+'*'=20
+'['=21
+']'=22
+'<'=23
+'>'=24
+'--'=25
+'++'=26
+'+'=27
+'-'=28
+'!'=29
+'&'=30
+'~'=31
+'>>'=32
+'<<'=33
+'/'=34
+'%'=35
+'=='=36
+'!='=37
+'<>'=38
+'<='=39
+'=<'=40
+'>='=41
+'=>'=42
+'^'=43
+'|'=44
+'&&'=45
+'||'=46
+'#'=47
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
index e3ce45107..30b48f2e5 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java
@@ -35,6 +35,30 @@ public class KickCBaseListener implements KickCListener {
*
The default implementation does nothing.
*/
@Override public void exitAsmFile(KickCParser.AsmFileContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterImportSeq(KickCParser.ImportSeqContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitImportSeq(KickCParser.ImportSeqContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterImportDecl(KickCParser.ImportDeclContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitImportDecl(KickCParser.ImportDeclContext ctx) { }
/**
* {@inheritDoc}
*
@@ -71,6 +95,30 @@ public class KickCBaseListener implements KickCListener {
* The default implementation does nothing.
*/
@Override public void exitDeclVariable(KickCParser.DeclVariableContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterParameterListDecl(KickCParser.ParameterListDeclContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitParameterListDecl(KickCParser.ParameterListDeclContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterParameterDecl(KickCParser.ParameterDeclContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitParameterDecl(KickCParser.ParameterDeclContext ctx) { }
/**
* {@inheritDoc}
*
@@ -251,30 +299,6 @@ public class KickCBaseListener implements KickCListener {
* The default implementation does nothing.
*/
@Override public void exitForRange(KickCParser.ForRangeContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterParameterListDecl(KickCParser.ParameterListDeclContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitParameterListDecl(KickCParser.ParameterListDeclContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterParameterDecl(KickCParser.ParameterDeclContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitParameterDecl(KickCParser.ParameterDeclContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
index 83f5734ce..ec95a5fbe 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java
@@ -25,6 +25,20 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitAsmFile(KickCParser.AsmFileContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitImportSeq(KickCParser.ImportSeqContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitImportDecl(KickCParser.ImportDeclContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -46,6 +60,20 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitDeclVariable(KickCParser.DeclVariableContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitParameterListDecl(KickCParser.ParameterListDeclContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitParameterDecl(KickCParser.ParameterDeclContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -151,20 +179,6 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitForRange(KickCParser.ForRangeContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitParameterListDecl(KickCParser.ParameterListDeclContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitParameterDecl(KickCParser.ParameterDeclContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
index 9c9caa891..42d59254f 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java
@@ -23,10 +23,10 @@ public class KickCLexer extends Lexer {
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
- T__45=46, MNEMONIC=47, SIMPLETYPE=48, STRING=49, CHAR=50, BOOLEAN=51,
- NUMBER=52, NUMFLOAT=53, BINFLOAT=54, DECFLOAT=55, HEXFLOAT=56, NUMINT=57,
- BININTEGER=58, DECINTEGER=59, HEXINTEGER=60, NAME=61, ASMREL=62, WS=63,
- COMMENT_LINE=64, COMMENT_BLOCK=65;
+ T__45=46, T__46=47, MNEMONIC=48, SIMPLETYPE=49, STRING=50, CHAR=51, BOOLEAN=52,
+ NUMBER=53, NUMFLOAT=54, BINFLOAT=55, DECFLOAT=56, HEXFLOAT=57, NUMINT=58,
+ BININTEGER=59, DECINTEGER=60, HEXINTEGER=61, NAME=62, ASMREL=63, WS=64,
+ COMMENT_LINE=65, COMMENT_BLOCK=66;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -41,7 +41,7 @@ public class KickCLexer extends Lexer {
"T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
"T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
"T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
- "T__41", "T__42", "T__43", "T__44", "T__45", "MNEMONIC", "SIMPLETYPE",
+ "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "MNEMONIC", "SIMPLETYPE",
"STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT",
"HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "BINDIGIT",
"DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", "ASMREL", "WS",
@@ -49,21 +49,21 @@ public class KickCLexer extends Lexer {
};
private static final String[] _LITERAL_NAMES = {
- null, "'('", "')'", "'{'", "'}'", "'const'", "'='", "';'", "'if'", "'else'",
- "'while'", "'do'", "'for'", "'return'", "'asm'", "':'", "'..'", "','",
- "'signed'", "'*'", "'['", "']'", "'<'", "'>'", "'--'", "'++'", "'+'",
- "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'=='", "'!='",
- "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'", "'&&'", "'||'",
- "'#'"
+ null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'='",
+ "';'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'",
+ "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'<'", "'>'", "'--'",
+ "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'",
+ "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'",
+ "'&&'", "'||'", "'#'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, "MNEMONIC",
- "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT",
- "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER",
- "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT",
+ "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER",
+ "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
@@ -123,7 +123,7 @@ public class KickCLexer extends Lexer {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2C\u02bc\b\1\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2D\u02c5\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"+
@@ -131,262 +131,264 @@ public class KickCLexer extends Lexer {
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
- "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\3\2\3\2\3"+
- "\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t"+
- "\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r"+
- "\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3"+
- "\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3"+
- "\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\32\3"+
- "\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3 \3 \3 \3"+
- "!\3!\3!\3\"\3\"\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3("+
- "\3)\3)\3)\3*\3*\3*\3+\3+\3,\3,\3-\3-\3-\3.\3.\3.\3/\3/\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
- "\3\60\3\60\3\60\3\60\3\60\3\60\5\60\u01f0\n\60\3\61\3\61\3\61\3\61\3\61"+
- "\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61"+
- "\5\61\u0205\n\61\3\62\3\62\3\62\3\62\7\62\u020b\n\62\f\62\16\62\u020e"+
- "\13\62\3\62\3\62\3\63\3\63\3\63\3\63\5\63\u0216\n\63\3\63\3\63\3\64\3"+
- "\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\5\64\u0223\n\64\3\65\3\65\5\65"+
- "\u0227\n\65\3\66\3\66\3\66\5\66\u022c\n\66\3\67\3\67\3\67\3\67\3\67\5"+
- "\67\u0233\n\67\3\67\7\67\u0236\n\67\f\67\16\67\u0239\13\67\3\67\3\67\6"+
- "\67\u023d\n\67\r\67\16\67\u023e\38\78\u0242\n8\f8\168\u0245\138\38\38"+
- "\68\u0249\n8\r8\168\u024a\39\39\39\39\39\59\u0252\n9\39\79\u0255\n9\f"+
- "9\169\u0258\139\39\39\69\u025c\n9\r9\169\u025d\3:\3:\3:\5:\u0263\n:\3"+
- ";\3;\3;\6;\u0268\n;\r;\16;\u0269\3;\3;\6;\u026e\n;\r;\16;\u026f\5;\u0272"+
- "\n;\3<\6<\u0275\n<\r<\16<\u0276\3=\3=\3=\3=\3=\5=\u027e\n=\3=\6=\u0281"+
- "\n=\r=\16=\u0282\3>\3>\3?\3?\3@\3@\3A\3A\7A\u028d\nA\fA\16A\u0290\13A"+
- "\3B\3B\3C\3C\3D\3D\7D\u0298\nD\fD\16D\u029b\13D\3E\6E\u029e\nE\rE\16E"+
- "\u029f\3E\3E\3F\3F\3F\3F\7F\u02a8\nF\fF\16F\u02ab\13F\3F\3F\3G\3G\3G\3"+
- "G\7G\u02b3\nG\fG\16G\u02b6\13G\3G\3G\3G\3G\3G\3\u02b4\2H\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+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
- "%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{"+
- "\2}\2\177\2\u0081?\u0083\2\u0085\2\u0087@\u0089A\u008bB\u008dC\3\2\r\3"+
- "\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\"+
- "aac|\4\2--//\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2\u0320\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+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+
- "\63\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"+
- "\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K"+
- "\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2"+
- "\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2"+
- "\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q"+
- "\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2\u0081\3\2\2\2\2"+
- "\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\3\u008f"+
- "\3\2\2\2\5\u0091\3\2\2\2\7\u0093\3\2\2\2\t\u0095\3\2\2\2\13\u0097\3\2"+
- "\2\2\r\u009d\3\2\2\2\17\u009f\3\2\2\2\21\u00a1\3\2\2\2\23\u00a4\3\2\2"+
- "\2\25\u00a9\3\2\2\2\27\u00af\3\2\2\2\31\u00b2\3\2\2\2\33\u00b6\3\2\2\2"+
- "\35\u00bd\3\2\2\2\37\u00c1\3\2\2\2!\u00c3\3\2\2\2#\u00c6\3\2\2\2%\u00c8"+
- "\3\2\2\2\'\u00cf\3\2\2\2)\u00d1\3\2\2\2+\u00d3\3\2\2\2-\u00d5\3\2\2\2"+
- "/\u00d7\3\2\2\2\61\u00d9\3\2\2\2\63\u00dc\3\2\2\2\65\u00df\3\2\2\2\67"+
- "\u00e1\3\2\2\29\u00e3\3\2\2\2;\u00e5\3\2\2\2=\u00e7\3\2\2\2?\u00e9\3\2"+
- "\2\2A\u00ec\3\2\2\2C\u00ef\3\2\2\2E\u00f1\3\2\2\2G\u00f3\3\2\2\2I\u00f6"+
- "\3\2\2\2K\u00f9\3\2\2\2M\u00fc\3\2\2\2O\u00ff\3\2\2\2Q\u0102\3\2\2\2S"+
- "\u0105\3\2\2\2U\u0108\3\2\2\2W\u010a\3\2\2\2Y\u010c\3\2\2\2[\u010f\3\2"+
- "\2\2]\u0112\3\2\2\2_\u01ef\3\2\2\2a\u0204\3\2\2\2c\u0206\3\2\2\2e\u0211"+
- "\3\2\2\2g\u0222\3\2\2\2i\u0226\3\2\2\2k\u022b\3\2\2\2m\u0232\3\2\2\2o"+
- "\u0243\3\2\2\2q\u0251\3\2\2\2s\u0262\3\2\2\2u\u0271\3\2\2\2w\u0274\3\2"+
- "\2\2y\u027d\3\2\2\2{\u0284\3\2\2\2}\u0286\3\2\2\2\177\u0288\3\2\2\2\u0081"+
- "\u028a\3\2\2\2\u0083\u0291\3\2\2\2\u0085\u0293\3\2\2\2\u0087\u0295\3\2"+
- "\2\2\u0089\u029d\3\2\2\2\u008b\u02a3\3\2\2\2\u008d\u02ae\3\2\2\2\u008f"+
- "\u0090\7*\2\2\u0090\4\3\2\2\2\u0091\u0092\7+\2\2\u0092\6\3\2\2\2\u0093"+
- "\u0094\7}\2\2\u0094\b\3\2\2\2\u0095\u0096\7\177\2\2\u0096\n\3\2\2\2\u0097"+
- "\u0098\7e\2\2\u0098\u0099\7q\2\2\u0099\u009a\7p\2\2\u009a\u009b\7u\2\2"+
- "\u009b\u009c\7v\2\2\u009c\f\3\2\2\2\u009d\u009e\7?\2\2\u009e\16\3\2\2"+
- "\2\u009f\u00a0\7=\2\2\u00a0\20\3\2\2\2\u00a1\u00a2\7k\2\2\u00a2\u00a3"+
- "\7h\2\2\u00a3\22\3\2\2\2\u00a4\u00a5\7g\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7"+
- "\7u\2\2\u00a7\u00a8\7g\2\2\u00a8\24\3\2\2\2\u00a9\u00aa\7y\2\2\u00aa\u00ab"+
- "\7j\2\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7n\2\2\u00ad\u00ae\7g\2\2\u00ae"+
- "\26\3\2\2\2\u00af\u00b0\7f\2\2\u00b0\u00b1\7q\2\2\u00b1\30\3\2\2\2\u00b2"+
- "\u00b3\7h\2\2\u00b3\u00b4\7q\2\2\u00b4\u00b5\7t\2\2\u00b5\32\3\2\2\2\u00b6"+
- "\u00b7\7t\2\2\u00b7\u00b8\7g\2\2\u00b8\u00b9\7v\2\2\u00b9\u00ba\7w\2\2"+
- "\u00ba\u00bb\7t\2\2\u00bb\u00bc\7p\2\2\u00bc\34\3\2\2\2\u00bd\u00be\7"+
- "c\2\2\u00be\u00bf\7u\2\2\u00bf\u00c0\7o\2\2\u00c0\36\3\2\2\2\u00c1\u00c2"+
- "\7<\2\2\u00c2 \3\2\2\2\u00c3\u00c4\7\60\2\2\u00c4\u00c5\7\60\2\2\u00c5"+
- "\"\3\2\2\2\u00c6\u00c7\7.\2\2\u00c7$\3\2\2\2\u00c8\u00c9\7u\2\2\u00c9"+
- "\u00ca\7k\2\2\u00ca\u00cb\7i\2\2\u00cb\u00cc\7p\2\2\u00cc\u00cd\7g\2\2"+
- "\u00cd\u00ce\7f\2\2\u00ce&\3\2\2\2\u00cf\u00d0\7,\2\2\u00d0(\3\2\2\2\u00d1"+
- "\u00d2\7]\2\2\u00d2*\3\2\2\2\u00d3\u00d4\7_\2\2\u00d4,\3\2\2\2\u00d5\u00d6"+
- "\7>\2\2\u00d6.\3\2\2\2\u00d7\u00d8\7@\2\2\u00d8\60\3\2\2\2\u00d9\u00da"+
- "\7/\2\2\u00da\u00db\7/\2\2\u00db\62\3\2\2\2\u00dc\u00dd\7-\2\2\u00dd\u00de"+
- "\7-\2\2\u00de\64\3\2\2\2\u00df\u00e0\7-\2\2\u00e0\66\3\2\2\2\u00e1\u00e2"+
- "\7/\2\2\u00e28\3\2\2\2\u00e3\u00e4\7#\2\2\u00e4:\3\2\2\2\u00e5\u00e6\7"+
- "(\2\2\u00e6<\3\2\2\2\u00e7\u00e8\7\u0080\2\2\u00e8>\3\2\2\2\u00e9\u00ea"+
- "\7@\2\2\u00ea\u00eb\7@\2\2\u00eb@\3\2\2\2\u00ec\u00ed\7>\2\2\u00ed\u00ee"+
- "\7>\2\2\u00eeB\3\2\2\2\u00ef\u00f0\7\61\2\2\u00f0D\3\2\2\2\u00f1\u00f2"+
- "\7\'\2\2\u00f2F\3\2\2\2\u00f3\u00f4\7?\2\2\u00f4\u00f5\7?\2\2\u00f5H\3"+
- "\2\2\2\u00f6\u00f7\7#\2\2\u00f7\u00f8\7?\2\2\u00f8J\3\2\2\2\u00f9\u00fa"+
- "\7>\2\2\u00fa\u00fb\7@\2\2\u00fbL\3\2\2\2\u00fc\u00fd\7>\2\2\u00fd\u00fe"+
- "\7?\2\2\u00feN\3\2\2\2\u00ff\u0100\7?\2\2\u0100\u0101\7>\2\2\u0101P\3"+
- "\2\2\2\u0102\u0103\7@\2\2\u0103\u0104\7?\2\2\u0104R\3\2\2\2\u0105\u0106"+
- "\7?\2\2\u0106\u0107\7@\2\2\u0107T\3\2\2\2\u0108\u0109\7`\2\2\u0109V\3"+
- "\2\2\2\u010a\u010b\7~\2\2\u010bX\3\2\2\2\u010c\u010d\7(\2\2\u010d\u010e"+
- "\7(\2\2\u010eZ\3\2\2\2\u010f\u0110\7~\2\2\u0110\u0111\7~\2\2\u0111\\\3"+
- "\2\2\2\u0112\u0113\7%\2\2\u0113^\3\2\2\2\u0114\u0115\7d\2\2\u0115\u0116"+
- "\7t\2\2\u0116\u01f0\7m\2\2\u0117\u0118\7q\2\2\u0118\u0119\7t\2\2\u0119"+
- "\u01f0\7c\2\2\u011a\u011b\7m\2\2\u011b\u011c\7k\2\2\u011c\u01f0\7n\2\2"+
- "\u011d\u011e\7u\2\2\u011e\u011f\7n\2\2\u011f\u01f0\7q\2\2\u0120\u0121"+
- "\7p\2\2\u0121\u0122\7q\2\2\u0122\u01f0\7r\2\2\u0123\u0124\7c\2\2\u0124"+
- "\u0125\7u\2\2\u0125\u01f0\7n\2\2\u0126\u0127\7r\2\2\u0127\u0128\7j\2\2"+
- "\u0128\u01f0\7r\2\2\u0129\u012a\7c\2\2\u012a\u012b\7p\2\2\u012b\u01f0"+
- "\7e\2\2\u012c\u012d\7d\2\2\u012d\u012e\7r\2\2\u012e\u01f0\7n\2\2\u012f"+
- "\u0130\7e\2\2\u0130\u0131\7n\2\2\u0131\u01f0\7e\2\2\u0132\u0133\7l\2\2"+
- "\u0133\u0134\7u\2\2\u0134\u01f0\7t\2\2\u0135\u0136\7c\2\2\u0136\u0137"+
- "\7p\2\2\u0137\u01f0\7f\2\2\u0138\u0139\7t\2\2\u0139\u013a\7n\2\2\u013a"+
- "\u01f0\7c\2\2\u013b\u013c\7d\2\2\u013c\u013d\7k\2\2\u013d\u01f0\7v\2\2"+
- "\u013e\u013f\7t\2\2\u013f\u0140\7q\2\2\u0140\u01f0\7n\2\2\u0141\u0142"+
- "\7r\2\2\u0142\u0143\7n\2\2\u0143\u01f0\7c\2\2\u0144\u0145\7r\2\2\u0145"+
- "\u0146\7n\2\2\u0146\u01f0\7r\2\2\u0147\u0148\7d\2\2\u0148\u0149\7o\2\2"+
- "\u0149\u01f0\7k\2\2\u014a\u014b\7u\2\2\u014b\u014c\7g\2\2\u014c\u01f0"+
- "\7e\2\2\u014d\u014e\7t\2\2\u014e\u014f\7v\2\2\u014f\u01f0\7k\2\2\u0150"+
- "\u0151\7g\2\2\u0151\u0152\7q\2\2\u0152\u01f0\7t\2\2\u0153\u0154\7u\2\2"+
- "\u0154\u0155\7t\2\2\u0155\u01f0\7g\2\2\u0156\u0157\7n\2\2\u0157\u0158"+
- "\7u\2\2\u0158\u01f0\7t\2\2\u0159\u015a\7r\2\2\u015a\u015b\7j\2\2\u015b"+
- "\u01f0\7c\2\2\u015c\u015d\7c\2\2\u015d\u015e\7n\2\2\u015e\u01f0\7t\2\2"+
- "\u015f\u0160\7l\2\2\u0160\u0161\7o\2\2\u0161\u01f0\7r\2\2\u0162\u0163"+
- "\7d\2\2\u0163\u0164\7x\2\2\u0164\u01f0\7e\2\2\u0165\u0166\7e\2\2\u0166"+
- "\u0167\7n\2\2\u0167\u01f0\7k\2\2\u0168\u0169\7t\2\2\u0169\u016a\7v\2\2"+
- "\u016a\u01f0\7u\2\2\u016b\u016c\7c\2\2\u016c\u016d\7f\2\2\u016d\u01f0"+
- "\7e\2\2\u016e\u016f\7t\2\2\u016f\u0170\7t\2\2\u0170\u01f0\7c\2\2\u0171"+
- "\u0172\7d\2\2\u0172\u0173\7x\2\2\u0173\u01f0\7u\2\2\u0174\u0175\7u\2\2"+
- "\u0175\u0176\7g\2\2\u0176\u01f0\7k\2\2\u0177\u0178\7u\2\2\u0178\u0179"+
- "\7c\2\2\u0179\u01f0\7z\2\2\u017a\u017b\7u\2\2\u017b\u017c\7v\2\2\u017c"+
- "\u01f0\7{\2\2\u017d\u017e\7u\2\2\u017e\u017f\7v\2\2\u017f\u01f0\7c\2\2"+
- "\u0180\u0181\7u\2\2\u0181\u0182\7v\2\2\u0182\u01f0\7z\2\2\u0183\u0184"+
- "\7f\2\2\u0184\u0185\7g\2\2\u0185\u01f0\7{\2\2\u0186\u0187\7v\2\2\u0187"+
- "\u0188\7z\2\2\u0188\u01f0\7c\2\2\u0189\u018a\7z\2\2\u018a\u018b\7c\2\2"+
- "\u018b\u01f0\7c\2\2\u018c\u018d\7d\2\2\u018d\u018e\7e\2\2\u018e\u01f0"+
- "\7e\2\2\u018f\u0190\7c\2\2\u0190\u0191\7j\2\2\u0191\u01f0\7z\2\2\u0192"+
- "\u0193\7v\2\2\u0193\u0194\7{\2\2\u0194\u01f0\7c\2\2\u0195\u0196\7v\2\2"+
- "\u0196\u0197\7z\2\2\u0197\u01f0\7u\2\2\u0198\u0199\7v\2\2\u0199\u019a"+
- "\7c\2\2\u019a\u01f0\7u\2\2\u019b\u019c\7u\2\2\u019c\u019d\7j\2\2\u019d"+
- "\u01f0\7{\2\2\u019e\u019f\7u\2\2\u019f\u01a0\7j\2\2\u01a0\u01f0\7z\2\2"+
- "\u01a1\u01a2\7n\2\2\u01a2\u01a3\7f\2\2\u01a3\u01f0\7{\2\2\u01a4\u01a5"+
- "\7n\2\2\u01a5\u01a6\7f\2\2\u01a6\u01f0\7c\2\2\u01a7\u01a8\7n\2\2\u01a8"+
- "\u01a9\7f\2\2\u01a9\u01f0\7z\2\2\u01aa\u01ab\7n\2\2\u01ab\u01ac\7c\2\2"+
- "\u01ac\u01f0\7z\2\2\u01ad\u01ae\7v\2\2\u01ae\u01af\7c\2\2\u01af\u01f0"+
- "\7{\2\2\u01b0\u01b1\7v\2\2\u01b1\u01b2\7c\2\2\u01b2\u01f0\7z\2\2\u01b3"+
- "\u01b4\7d\2\2\u01b4\u01b5\7e\2\2\u01b5\u01f0\7u\2\2\u01b6\u01b7\7e\2\2"+
- "\u01b7\u01b8\7n\2\2\u01b8\u01f0\7x\2\2\u01b9\u01ba\7v\2\2\u01ba\u01bb"+
- "\7u\2\2\u01bb\u01f0\7z\2\2\u01bc\u01bd\7n\2\2\u01bd\u01be\7c\2\2\u01be"+
- "\u01f0\7u\2\2\u01bf\u01c0\7e\2\2\u01c0\u01c1\7r\2\2\u01c1\u01f0\7{\2\2"+
- "\u01c2\u01c3\7e\2\2\u01c3\u01c4\7o\2\2\u01c4\u01f0\7r\2\2\u01c5\u01c6"+
- "\7e\2\2\u01c6\u01c7\7r\2\2\u01c7\u01f0\7z\2\2\u01c8\u01c9\7f\2\2\u01c9"+
- "\u01ca\7e\2\2\u01ca\u01f0\7r\2\2\u01cb\u01cc\7f\2\2\u01cc\u01cd\7g\2\2"+
- "\u01cd\u01f0\7e\2\2\u01ce\u01cf\7k\2\2\u01cf\u01d0\7p\2\2\u01d0\u01f0"+
- "\7e\2\2\u01d1\u01d2\7c\2\2\u01d2\u01d3\7z\2\2\u01d3\u01f0\7u\2\2\u01d4"+
- "\u01d5\7d\2\2\u01d5\u01d6\7p\2\2\u01d6\u01f0\7g\2\2\u01d7\u01d8\7e\2\2"+
- "\u01d8\u01d9\7n\2\2\u01d9\u01f0\7f\2\2\u01da\u01db\7u\2\2\u01db\u01dc"+
- "\7d\2\2\u01dc\u01f0\7e\2\2\u01dd\u01de\7k\2\2\u01de\u01df\7u\2\2\u01df"+
- "\u01f0\7e\2\2\u01e0\u01e1\7k\2\2\u01e1\u01e2\7p\2\2\u01e2\u01f0\7z\2\2"+
- "\u01e3\u01e4\7d\2\2\u01e4\u01e5\7g\2\2\u01e5\u01f0\7s\2\2\u01e6\u01e7"+
- "\7u\2\2\u01e7\u01e8\7g\2\2\u01e8\u01f0\7f\2\2\u01e9\u01ea\7f\2\2\u01ea"+
- "\u01eb\7g\2\2\u01eb\u01f0\7z\2\2\u01ec\u01ed\7k\2\2\u01ed\u01ee\7p\2\2"+
- "\u01ee\u01f0\7{\2\2\u01ef\u0114\3\2\2\2\u01ef\u0117\3\2\2\2\u01ef\u011a"+
- "\3\2\2\2\u01ef\u011d\3\2\2\2\u01ef\u0120\3\2\2\2\u01ef\u0123\3\2\2\2\u01ef"+
- "\u0126\3\2\2\2\u01ef\u0129\3\2\2\2\u01ef\u012c\3\2\2\2\u01ef\u012f\3\2"+
- "\2\2\u01ef\u0132\3\2\2\2\u01ef\u0135\3\2\2\2\u01ef\u0138\3\2\2\2\u01ef"+
- "\u013b\3\2\2\2\u01ef\u013e\3\2\2\2\u01ef\u0141\3\2\2\2\u01ef\u0144\3\2"+
- "\2\2\u01ef\u0147\3\2\2\2\u01ef\u014a\3\2\2\2\u01ef\u014d\3\2\2\2\u01ef"+
- "\u0150\3\2\2\2\u01ef\u0153\3\2\2\2\u01ef\u0156\3\2\2\2\u01ef\u0159\3\2"+
- "\2\2\u01ef\u015c\3\2\2\2\u01ef\u015f\3\2\2\2\u01ef\u0162\3\2\2\2\u01ef"+
- "\u0165\3\2\2\2\u01ef\u0168\3\2\2\2\u01ef\u016b\3\2\2\2\u01ef\u016e\3\2"+
- "\2\2\u01ef\u0171\3\2\2\2\u01ef\u0174\3\2\2\2\u01ef\u0177\3\2\2\2\u01ef"+
- "\u017a\3\2\2\2\u01ef\u017d\3\2\2\2\u01ef\u0180\3\2\2\2\u01ef\u0183\3\2"+
- "\2\2\u01ef\u0186\3\2\2\2\u01ef\u0189\3\2\2\2\u01ef\u018c\3\2\2\2\u01ef"+
- "\u018f\3\2\2\2\u01ef\u0192\3\2\2\2\u01ef\u0195\3\2\2\2\u01ef\u0198\3\2"+
- "\2\2\u01ef\u019b\3\2\2\2\u01ef\u019e\3\2\2\2\u01ef\u01a1\3\2\2\2\u01ef"+
- "\u01a4\3\2\2\2\u01ef\u01a7\3\2\2\2\u01ef\u01aa\3\2\2\2\u01ef\u01ad\3\2"+
- "\2\2\u01ef\u01b0\3\2\2\2\u01ef\u01b3\3\2\2\2\u01ef\u01b6\3\2\2\2\u01ef"+
- "\u01b9\3\2\2\2\u01ef\u01bc\3\2\2\2\u01ef\u01bf\3\2\2\2\u01ef\u01c2\3\2"+
- "\2\2\u01ef\u01c5\3\2\2\2\u01ef\u01c8\3\2\2\2\u01ef\u01cb\3\2\2\2\u01ef"+
- "\u01ce\3\2\2\2\u01ef\u01d1\3\2\2\2\u01ef\u01d4\3\2\2\2\u01ef\u01d7\3\2"+
- "\2\2\u01ef\u01da\3\2\2\2\u01ef\u01dd\3\2\2\2\u01ef\u01e0\3\2\2\2\u01ef"+
- "\u01e3\3\2\2\2\u01ef\u01e6\3\2\2\2\u01ef\u01e9\3\2\2\2\u01ef\u01ec\3\2"+
- "\2\2\u01f0`\3\2\2\2\u01f1\u01f2\7d\2\2\u01f2\u01f3\7{\2\2\u01f3\u01f4"+
- "\7v\2\2\u01f4\u0205\7g\2\2\u01f5\u01f6\7y\2\2\u01f6\u01f7\7q\2\2\u01f7"+
- "\u01f8\7t\2\2\u01f8\u0205\7f\2\2\u01f9\u01fa\7d\2\2\u01fa\u01fb\7q\2\2"+
- "\u01fb\u01fc\7q\2\2\u01fc\u01fd\7n\2\2\u01fd\u01fe\7g\2\2\u01fe\u01ff"+
- "\7c\2\2\u01ff\u0205\7p\2\2\u0200\u0201\7x\2\2\u0201\u0202\7q\2\2\u0202"+
- "\u0203\7k\2\2\u0203\u0205\7f\2\2\u0204\u01f1\3\2\2\2\u0204\u01f5\3\2\2"+
- "\2\u0204\u01f9\3\2\2\2\u0204\u0200\3\2\2\2\u0205b\3\2\2\2\u0206\u020c"+
- "\7$\2\2\u0207\u0208\7^\2\2\u0208\u020b\7$\2\2\u0209\u020b\n\2\2\2\u020a"+
- "\u0207\3\2\2\2\u020a\u0209\3\2\2\2\u020b\u020e\3\2\2\2\u020c\u020a\3\2"+
- "\2\2\u020c\u020d\3\2\2\2\u020d\u020f\3\2\2\2\u020e\u020c\3\2\2\2\u020f"+
- "\u0210\7$\2\2\u0210d\3\2\2\2\u0211\u0215\7)\2\2\u0212\u0213\7^\2\2\u0213"+
- "\u0216\7)\2\2\u0214\u0216\n\3\2\2\u0215\u0212\3\2\2\2\u0215\u0214\3\2"+
- "\2\2\u0216\u0217\3\2\2\2\u0217\u0218\7)\2\2\u0218f\3\2\2\2\u0219\u021a"+
- "\7v\2\2\u021a\u021b\7t\2\2\u021b\u021c\7w\2\2\u021c\u0223\7g\2\2\u021d"+
- "\u021e\7h\2\2\u021e\u021f\7c\2\2\u021f\u0220\7n\2\2\u0220\u0221\7u\2\2"+
- "\u0221\u0223\7g\2\2\u0222\u0219\3\2\2\2\u0222\u021d\3\2\2\2\u0223h\3\2"+
- "\2\2\u0224\u0227\5k\66\2\u0225\u0227\5s:\2\u0226\u0224\3\2\2\2\u0226\u0225"+
- "\3\2\2\2\u0227j\3\2\2\2\u0228\u022c\5m\67\2\u0229\u022c\5o8\2\u022a\u022c"+
- "\5q9\2\u022b\u0228\3\2\2\2\u022b\u0229\3\2\2\2\u022b\u022a\3\2\2\2\u022c"+
- "l\3\2\2\2\u022d\u0233\7\'\2\2\u022e\u022f\7\62\2\2\u022f\u0233\7d\2\2"+
- "\u0230\u0231\7\62\2\2\u0231\u0233\7D\2\2\u0232\u022d\3\2\2\2\u0232\u022e"+
- "\3\2\2\2\u0232\u0230\3\2\2\2\u0233\u0237\3\2\2\2\u0234\u0236\5{>\2\u0235"+
- "\u0234\3\2\2\2\u0236\u0239\3\2\2\2\u0237\u0235\3\2\2\2\u0237\u0238\3\2"+
- "\2\2\u0238\u023a\3\2\2\2\u0239\u0237\3\2\2\2\u023a\u023c\7\60\2\2\u023b"+
- "\u023d\5{>\2\u023c\u023b\3\2\2\2\u023d\u023e\3\2\2\2\u023e\u023c\3\2\2"+
- "\2\u023e\u023f\3\2\2\2\u023fn\3\2\2\2\u0240\u0242\5}?\2\u0241\u0240\3"+
- "\2\2\2\u0242\u0245\3\2\2\2\u0243\u0241\3\2\2\2\u0243\u0244\3\2\2\2\u0244"+
- "\u0246\3\2\2\2\u0245\u0243\3\2\2\2\u0246\u0248\7\60\2\2\u0247\u0249\5"+
- "}?\2\u0248\u0247\3\2\2\2\u0249\u024a\3\2\2\2\u024a\u0248\3\2\2\2\u024a"+
- "\u024b\3\2\2\2\u024bp\3\2\2\2\u024c\u0252\7&\2\2\u024d\u024e\7\62\2\2"+
- "\u024e\u0252\7z\2\2\u024f\u0250\7\62\2\2\u0250\u0252\7Z\2\2\u0251\u024c"+
- "\3\2\2\2\u0251\u024d\3\2\2\2\u0251\u024f\3\2\2\2\u0252\u0256\3\2\2\2\u0253"+
- "\u0255\5\177@\2\u0254\u0253\3\2\2\2\u0255\u0258\3\2\2\2\u0256\u0254\3"+
- "\2\2\2\u0256\u0257\3\2\2\2\u0257\u0259\3\2\2\2\u0258\u0256\3\2\2\2\u0259"+
- "\u025b\7\60\2\2\u025a\u025c\5\177@\2\u025b\u025a\3\2\2\2\u025c\u025d\3"+
- "\2\2\2\u025d\u025b\3\2\2\2\u025d\u025e\3\2\2\2\u025er\3\2\2\2\u025f\u0263"+
- "\5w<\2\u0260\u0263\5y=\2\u0261\u0263\5u;\2\u0262\u025f\3\2\2\2\u0262\u0260"+
- "\3\2\2\2\u0262\u0261\3\2\2\2\u0263t\3\2\2\2\u0264\u0265\7\62\2\2\u0265"+
- "\u0267\t\4\2\2\u0266\u0268\5{>\2\u0267\u0266\3\2\2\2\u0268\u0269\3\2\2"+
- "\2\u0269\u0267\3\2\2\2\u0269\u026a\3\2\2\2\u026a\u0272\3\2\2\2\u026b\u026d"+
- "\7\'\2\2\u026c\u026e\5{>\2\u026d\u026c\3\2\2\2\u026e\u026f\3\2\2\2\u026f"+
- "\u026d\3\2\2\2\u026f\u0270\3\2\2\2\u0270\u0272\3\2\2\2\u0271\u0264\3\2"+
- "\2\2\u0271\u026b\3\2\2\2\u0272v\3\2\2\2\u0273\u0275\5}?\2\u0274\u0273"+
- "\3\2\2\2\u0275\u0276\3\2\2\2\u0276\u0274\3\2\2\2\u0276\u0277\3\2\2\2\u0277"+
- "x\3\2\2\2\u0278\u027e\7&\2\2\u0279\u027a\7\62\2\2\u027a\u027e\7z\2\2\u027b"+
- "\u027c\7\62\2\2\u027c\u027e\7Z\2\2\u027d\u0278\3\2\2\2\u027d\u0279\3\2"+
- "\2\2\u027d\u027b\3\2\2\2\u027e\u0280\3\2\2\2\u027f\u0281\5\177@\2\u0280"+
- "\u027f\3\2\2\2\u0281\u0282\3\2\2\2\u0282\u0280\3\2\2\2\u0282\u0283\3\2"+
- "\2\2\u0283z\3\2\2\2\u0284\u0285\t\5\2\2\u0285|\3\2\2\2\u0286\u0287\t\6"+
- "\2\2\u0287~\3\2\2\2\u0288\u0289\t\7\2\2\u0289\u0080\3\2\2\2\u028a\u028e"+
- "\5\u0083B\2\u028b\u028d\5\u0085C\2\u028c\u028b\3\2\2\2\u028d\u0290\3\2"+
- "\2\2\u028e\u028c\3\2\2\2\u028e\u028f\3\2\2\2\u028f\u0082\3\2\2\2\u0290"+
- "\u028e\3\2\2\2\u0291\u0292\t\b\2\2\u0292\u0084\3\2\2\2\u0293\u0294\t\t"+
- "\2\2\u0294\u0086\3\2\2\2\u0295\u0299\7#\2\2\u0296\u0298\t\n\2\2\u0297"+
- "\u0296\3\2\2\2\u0298\u029b\3\2\2\2\u0299\u0297\3\2\2\2\u0299\u029a\3\2"+
- "\2\2\u029a\u0088\3\2\2\2\u029b\u0299\3\2\2\2\u029c\u029e\t\13\2\2\u029d"+
- "\u029c\3\2\2\2\u029e\u029f\3\2\2\2\u029f\u029d\3\2\2\2\u029f\u02a0\3\2"+
- "\2\2\u02a0\u02a1\3\2\2\2\u02a1\u02a2\bE\2\2\u02a2\u008a\3\2\2\2\u02a3"+
- "\u02a4\7\61\2\2\u02a4\u02a5\7\61\2\2\u02a5\u02a9\3\2\2\2\u02a6\u02a8\n"+
- "\f\2\2\u02a7\u02a6\3\2\2\2\u02a8\u02ab\3\2\2\2\u02a9\u02a7\3\2\2\2\u02a9"+
- "\u02aa\3\2\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02a9\3\2\2\2\u02ac\u02ad\bF"+
- "\2\2\u02ad\u008c\3\2\2\2\u02ae\u02af\7\61\2\2\u02af\u02b0\7,\2\2\u02b0"+
- "\u02b4\3\2\2\2\u02b1\u02b3\13\2\2\2\u02b2\u02b1\3\2\2\2\u02b3\u02b6\3"+
- "\2\2\2\u02b4\u02b5\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b5\u02b7\3\2\2\2\u02b6"+
- "\u02b4\3\2\2\2\u02b7\u02b8\7,\2\2\u02b8\u02b9\7\61\2\2\u02b9\u02ba\3\2"+
- "\2\2\u02ba\u02bb\bG\2\2\u02bb\u008e\3\2\2\2\37\2\u01ef\u0204\u020a\u020c"+
- "\u0215\u0222\u0226\u022b\u0232\u0237\u023e\u0243\u024a\u0251\u0256\u025d"+
- "\u0262\u0269\u026f\u0271\u0276\u027d\u0282\u028e\u0299\u029f\u02a9\u02b4"+
- "\3\b\2\2";
+ "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\3\2"+
+ "\3\2\3\2\3\2\3\2\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\b\3"+
+ "\b\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f"+
+ "\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20"+
+ "\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\23"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30"+
+ "\3\30\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\35\3\35\3\36"+
+ "\3\36\3\37\3\37\3 \3 \3!\3!\3!\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&"+
+ "\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3-\3-\3.\3."+
+ "\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3"+
+ "\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\5"+
+ "\61\u01f9\n\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62"+
+ "\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\5\62\u020e\n\62\3\63\3\63\3\63"+
+ "\3\63\7\63\u0214\n\63\f\63\16\63\u0217\13\63\3\63\3\63\3\64\3\64\3\64"+
+ "\3\64\5\64\u021f\n\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+
+ "\3\65\5\65\u022c\n\65\3\66\3\66\5\66\u0230\n\66\3\67\3\67\3\67\5\67\u0235"+
+ "\n\67\38\38\38\38\38\58\u023c\n8\38\78\u023f\n8\f8\168\u0242\138\38\3"+
+ "8\68\u0246\n8\r8\168\u0247\39\79\u024b\n9\f9\169\u024e\139\39\39\69\u0252"+
+ "\n9\r9\169\u0253\3:\3:\3:\3:\3:\5:\u025b\n:\3:\7:\u025e\n:\f:\16:\u0261"+
+ "\13:\3:\3:\6:\u0265\n:\r:\16:\u0266\3;\3;\3;\5;\u026c\n;\3<\3<\3<\6<\u0271"+
+ "\n<\r<\16<\u0272\3<\3<\6<\u0277\n<\r<\16<\u0278\5<\u027b\n<\3=\6=\u027e"+
+ "\n=\r=\16=\u027f\3>\3>\3>\3>\3>\5>\u0287\n>\3>\6>\u028a\n>\r>\16>\u028b"+
+ "\3?\3?\3@\3@\3A\3A\3B\3B\7B\u0296\nB\fB\16B\u0299\13B\3C\3C\3D\3D\3E\3"+
+ "E\7E\u02a1\nE\fE\16E\u02a4\13E\3F\6F\u02a7\nF\rF\16F\u02a8\3F\3F\3G\3"+
+ "G\3G\3G\7G\u02b1\nG\fG\16G\u02b4\13G\3G\3G\3H\3H\3H\3H\7H\u02bc\nH\fH"+
+ "\16H\u02bf\13H\3H\3H\3H\3H\3H\3\u02bd\2I\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+\27"+
+ "-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W"+
+ "-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}\2\177\2\u0081\2"+
+ "\u0083@\u0085\2\u0087\2\u0089A\u008bB\u008dC\u008fD\3\2\r\3\2$$\3\2))"+
+ "\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\4\2-"+
+ "-//\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2\u0329\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+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\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\2?\3\2\2"+
+ "\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2"+
+ "M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3"+
+ "\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2"+
+ "\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2"+
+ "s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2\u0083\3\2\2\2"+
+ "\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\3\u0091"+
+ "\3\2\2\2\5\u0098\3\2\2\2\7\u009a\3\2\2\2\t\u009c\3\2\2\2\13\u009e\3\2"+
+ "\2\2\r\u00a0\3\2\2\2\17\u00a2\3\2\2\2\21\u00a8\3\2\2\2\23\u00aa\3\2\2"+
+ "\2\25\u00ac\3\2\2\2\27\u00af\3\2\2\2\31\u00b4\3\2\2\2\33\u00ba\3\2\2\2"+
+ "\35\u00bd\3\2\2\2\37\u00c1\3\2\2\2!\u00c8\3\2\2\2#\u00cc\3\2\2\2%\u00ce"+
+ "\3\2\2\2\'\u00d1\3\2\2\2)\u00d8\3\2\2\2+\u00da\3\2\2\2-\u00dc\3\2\2\2"+
+ "/\u00de\3\2\2\2\61\u00e0\3\2\2\2\63\u00e2\3\2\2\2\65\u00e5\3\2\2\2\67"+
+ "\u00e8\3\2\2\29\u00ea\3\2\2\2;\u00ec\3\2\2\2=\u00ee\3\2\2\2?\u00f0\3\2"+
+ "\2\2A\u00f2\3\2\2\2C\u00f5\3\2\2\2E\u00f8\3\2\2\2G\u00fa\3\2\2\2I\u00fc"+
+ "\3\2\2\2K\u00ff\3\2\2\2M\u0102\3\2\2\2O\u0105\3\2\2\2Q\u0108\3\2\2\2S"+
+ "\u010b\3\2\2\2U\u010e\3\2\2\2W\u0111\3\2\2\2Y\u0113\3\2\2\2[\u0115\3\2"+
+ "\2\2]\u0118\3\2\2\2_\u011b\3\2\2\2a\u01f8\3\2\2\2c\u020d\3\2\2\2e\u020f"+
+ "\3\2\2\2g\u021a\3\2\2\2i\u022b\3\2\2\2k\u022f\3\2\2\2m\u0234\3\2\2\2o"+
+ "\u023b\3\2\2\2q\u024c\3\2\2\2s\u025a\3\2\2\2u\u026b\3\2\2\2w\u027a\3\2"+
+ "\2\2y\u027d\3\2\2\2{\u0286\3\2\2\2}\u028d\3\2\2\2\177\u028f\3\2\2\2\u0081"+
+ "\u0291\3\2\2\2\u0083\u0293\3\2\2\2\u0085\u029a\3\2\2\2\u0087\u029c\3\2"+
+ "\2\2\u0089\u029e\3\2\2\2\u008b\u02a6\3\2\2\2\u008d\u02ac\3\2\2\2\u008f"+
+ "\u02b7\3\2\2\2\u0091\u0092\7k\2\2\u0092\u0093\7o\2\2\u0093\u0094\7r\2"+
+ "\2\u0094\u0095\7q\2\2\u0095\u0096\7t\2\2\u0096\u0097\7v\2\2\u0097\4\3"+
+ "\2\2\2\u0098\u0099\7*\2\2\u0099\6\3\2\2\2\u009a\u009b\7+\2\2\u009b\b\3"+
+ "\2\2\2\u009c\u009d\7}\2\2\u009d\n\3\2\2\2\u009e\u009f\7\177\2\2\u009f"+
+ "\f\3\2\2\2\u00a0\u00a1\7.\2\2\u00a1\16\3\2\2\2\u00a2\u00a3\7e\2\2\u00a3"+
+ "\u00a4\7q\2\2\u00a4\u00a5\7p\2\2\u00a5\u00a6\7u\2\2\u00a6\u00a7\7v\2\2"+
+ "\u00a7\20\3\2\2\2\u00a8\u00a9\7?\2\2\u00a9\22\3\2\2\2\u00aa\u00ab\7=\2"+
+ "\2\u00ab\24\3\2\2\2\u00ac\u00ad\7k\2\2\u00ad\u00ae\7h\2\2\u00ae\26\3\2"+
+ "\2\2\u00af\u00b0\7g\2\2\u00b0\u00b1\7n\2\2\u00b1\u00b2\7u\2\2\u00b2\u00b3"+
+ "\7g\2\2\u00b3\30\3\2\2\2\u00b4\u00b5\7y\2\2\u00b5\u00b6\7j\2\2\u00b6\u00b7"+
+ "\7k\2\2\u00b7\u00b8\7n\2\2\u00b8\u00b9\7g\2\2\u00b9\32\3\2\2\2\u00ba\u00bb"+
+ "\7f\2\2\u00bb\u00bc\7q\2\2\u00bc\34\3\2\2\2\u00bd\u00be\7h\2\2\u00be\u00bf"+
+ "\7q\2\2\u00bf\u00c0\7t\2\2\u00c0\36\3\2\2\2\u00c1\u00c2\7t\2\2\u00c2\u00c3"+
+ "\7g\2\2\u00c3\u00c4\7v\2\2\u00c4\u00c5\7w\2\2\u00c5\u00c6\7t\2\2\u00c6"+
+ "\u00c7\7p\2\2\u00c7 \3\2\2\2\u00c8\u00c9\7c\2\2\u00c9\u00ca\7u\2\2\u00ca"+
+ "\u00cb\7o\2\2\u00cb\"\3\2\2\2\u00cc\u00cd\7<\2\2\u00cd$\3\2\2\2\u00ce"+
+ "\u00cf\7\60\2\2\u00cf\u00d0\7\60\2\2\u00d0&\3\2\2\2\u00d1\u00d2\7u\2\2"+
+ "\u00d2\u00d3\7k\2\2\u00d3\u00d4\7i\2\2\u00d4\u00d5\7p\2\2\u00d5\u00d6"+
+ "\7g\2\2\u00d6\u00d7\7f\2\2\u00d7(\3\2\2\2\u00d8\u00d9\7,\2\2\u00d9*\3"+
+ "\2\2\2\u00da\u00db\7]\2\2\u00db,\3\2\2\2\u00dc\u00dd\7_\2\2\u00dd.\3\2"+
+ "\2\2\u00de\u00df\7>\2\2\u00df\60\3\2\2\2\u00e0\u00e1\7@\2\2\u00e1\62\3"+
+ "\2\2\2\u00e2\u00e3\7/\2\2\u00e3\u00e4\7/\2\2\u00e4\64\3\2\2\2\u00e5\u00e6"+
+ "\7-\2\2\u00e6\u00e7\7-\2\2\u00e7\66\3\2\2\2\u00e8\u00e9\7-\2\2\u00e98"+
+ "\3\2\2\2\u00ea\u00eb\7/\2\2\u00eb:\3\2\2\2\u00ec\u00ed\7#\2\2\u00ed<\3"+
+ "\2\2\2\u00ee\u00ef\7(\2\2\u00ef>\3\2\2\2\u00f0\u00f1\7\u0080\2\2\u00f1"+
+ "@\3\2\2\2\u00f2\u00f3\7@\2\2\u00f3\u00f4\7@\2\2\u00f4B\3\2\2\2\u00f5\u00f6"+
+ "\7>\2\2\u00f6\u00f7\7>\2\2\u00f7D\3\2\2\2\u00f8\u00f9\7\61\2\2\u00f9F"+
+ "\3\2\2\2\u00fa\u00fb\7\'\2\2\u00fbH\3\2\2\2\u00fc\u00fd\7?\2\2\u00fd\u00fe"+
+ "\7?\2\2\u00feJ\3\2\2\2\u00ff\u0100\7#\2\2\u0100\u0101\7?\2\2\u0101L\3"+
+ "\2\2\2\u0102\u0103\7>\2\2\u0103\u0104\7@\2\2\u0104N\3\2\2\2\u0105\u0106"+
+ "\7>\2\2\u0106\u0107\7?\2\2\u0107P\3\2\2\2\u0108\u0109\7?\2\2\u0109\u010a"+
+ "\7>\2\2\u010aR\3\2\2\2\u010b\u010c\7@\2\2\u010c\u010d\7?\2\2\u010dT\3"+
+ "\2\2\2\u010e\u010f\7?\2\2\u010f\u0110\7@\2\2\u0110V\3\2\2\2\u0111\u0112"+
+ "\7`\2\2\u0112X\3\2\2\2\u0113\u0114\7~\2\2\u0114Z\3\2\2\2\u0115\u0116\7"+
+ "(\2\2\u0116\u0117\7(\2\2\u0117\\\3\2\2\2\u0118\u0119\7~\2\2\u0119\u011a"+
+ "\7~\2\2\u011a^\3\2\2\2\u011b\u011c\7%\2\2\u011c`\3\2\2\2\u011d\u011e\7"+
+ "d\2\2\u011e\u011f\7t\2\2\u011f\u01f9\7m\2\2\u0120\u0121\7q\2\2\u0121\u0122"+
+ "\7t\2\2\u0122\u01f9\7c\2\2\u0123\u0124\7m\2\2\u0124\u0125\7k\2\2\u0125"+
+ "\u01f9\7n\2\2\u0126\u0127\7u\2\2\u0127\u0128\7n\2\2\u0128\u01f9\7q\2\2"+
+ "\u0129\u012a\7p\2\2\u012a\u012b\7q\2\2\u012b\u01f9\7r\2\2\u012c\u012d"+
+ "\7c\2\2\u012d\u012e\7u\2\2\u012e\u01f9\7n\2\2\u012f\u0130\7r\2\2\u0130"+
+ "\u0131\7j\2\2\u0131\u01f9\7r\2\2\u0132\u0133\7c\2\2\u0133\u0134\7p\2\2"+
+ "\u0134\u01f9\7e\2\2\u0135\u0136\7d\2\2\u0136\u0137\7r\2\2\u0137\u01f9"+
+ "\7n\2\2\u0138\u0139\7e\2\2\u0139\u013a\7n\2\2\u013a\u01f9\7e\2\2\u013b"+
+ "\u013c\7l\2\2\u013c\u013d\7u\2\2\u013d\u01f9\7t\2\2\u013e\u013f\7c\2\2"+
+ "\u013f\u0140\7p\2\2\u0140\u01f9\7f\2\2\u0141\u0142\7t\2\2\u0142\u0143"+
+ "\7n\2\2\u0143\u01f9\7c\2\2\u0144\u0145\7d\2\2\u0145\u0146\7k\2\2\u0146"+
+ "\u01f9\7v\2\2\u0147\u0148\7t\2\2\u0148\u0149\7q\2\2\u0149\u01f9\7n\2\2"+
+ "\u014a\u014b\7r\2\2\u014b\u014c\7n\2\2\u014c\u01f9\7c\2\2\u014d\u014e"+
+ "\7r\2\2\u014e\u014f\7n\2\2\u014f\u01f9\7r\2\2\u0150\u0151\7d\2\2\u0151"+
+ "\u0152\7o\2\2\u0152\u01f9\7k\2\2\u0153\u0154\7u\2\2\u0154\u0155\7g\2\2"+
+ "\u0155\u01f9\7e\2\2\u0156\u0157\7t\2\2\u0157\u0158\7v\2\2\u0158\u01f9"+
+ "\7k\2\2\u0159\u015a\7g\2\2\u015a\u015b\7q\2\2\u015b\u01f9\7t\2\2\u015c"+
+ "\u015d\7u\2\2\u015d\u015e\7t\2\2\u015e\u01f9\7g\2\2\u015f\u0160\7n\2\2"+
+ "\u0160\u0161\7u\2\2\u0161\u01f9\7t\2\2\u0162\u0163\7r\2\2\u0163\u0164"+
+ "\7j\2\2\u0164\u01f9\7c\2\2\u0165\u0166\7c\2\2\u0166\u0167\7n\2\2\u0167"+
+ "\u01f9\7t\2\2\u0168\u0169\7l\2\2\u0169\u016a\7o\2\2\u016a\u01f9\7r\2\2"+
+ "\u016b\u016c\7d\2\2\u016c\u016d\7x\2\2\u016d\u01f9\7e\2\2\u016e\u016f"+
+ "\7e\2\2\u016f\u0170\7n\2\2\u0170\u01f9\7k\2\2\u0171\u0172\7t\2\2\u0172"+
+ "\u0173\7v\2\2\u0173\u01f9\7u\2\2\u0174\u0175\7c\2\2\u0175\u0176\7f\2\2"+
+ "\u0176\u01f9\7e\2\2\u0177\u0178\7t\2\2\u0178\u0179\7t\2\2\u0179\u01f9"+
+ "\7c\2\2\u017a\u017b\7d\2\2\u017b\u017c\7x\2\2\u017c\u01f9\7u\2\2\u017d"+
+ "\u017e\7u\2\2\u017e\u017f\7g\2\2\u017f\u01f9\7k\2\2\u0180\u0181\7u\2\2"+
+ "\u0181\u0182\7c\2\2\u0182\u01f9\7z\2\2\u0183\u0184\7u\2\2\u0184\u0185"+
+ "\7v\2\2\u0185\u01f9\7{\2\2\u0186\u0187\7u\2\2\u0187\u0188\7v\2\2\u0188"+
+ "\u01f9\7c\2\2\u0189\u018a\7u\2\2\u018a\u018b\7v\2\2\u018b\u01f9\7z\2\2"+
+ "\u018c\u018d\7f\2\2\u018d\u018e\7g\2\2\u018e\u01f9\7{\2\2\u018f\u0190"+
+ "\7v\2\2\u0190\u0191\7z\2\2\u0191\u01f9\7c\2\2\u0192\u0193\7z\2\2\u0193"+
+ "\u0194\7c\2\2\u0194\u01f9\7c\2\2\u0195\u0196\7d\2\2\u0196\u0197\7e\2\2"+
+ "\u0197\u01f9\7e\2\2\u0198\u0199\7c\2\2\u0199\u019a\7j\2\2\u019a\u01f9"+
+ "\7z\2\2\u019b\u019c\7v\2\2\u019c\u019d\7{\2\2\u019d\u01f9\7c\2\2\u019e"+
+ "\u019f\7v\2\2\u019f\u01a0\7z\2\2\u01a0\u01f9\7u\2\2\u01a1\u01a2\7v\2\2"+
+ "\u01a2\u01a3\7c\2\2\u01a3\u01f9\7u\2\2\u01a4\u01a5\7u\2\2\u01a5\u01a6"+
+ "\7j\2\2\u01a6\u01f9\7{\2\2\u01a7\u01a8\7u\2\2\u01a8\u01a9\7j\2\2\u01a9"+
+ "\u01f9\7z\2\2\u01aa\u01ab\7n\2\2\u01ab\u01ac\7f\2\2\u01ac\u01f9\7{\2\2"+
+ "\u01ad\u01ae\7n\2\2\u01ae\u01af\7f\2\2\u01af\u01f9\7c\2\2\u01b0\u01b1"+
+ "\7n\2\2\u01b1\u01b2\7f\2\2\u01b2\u01f9\7z\2\2\u01b3\u01b4\7n\2\2\u01b4"+
+ "\u01b5\7c\2\2\u01b5\u01f9\7z\2\2\u01b6\u01b7\7v\2\2\u01b7\u01b8\7c\2\2"+
+ "\u01b8\u01f9\7{\2\2\u01b9\u01ba\7v\2\2\u01ba\u01bb\7c\2\2\u01bb\u01f9"+
+ "\7z\2\2\u01bc\u01bd\7d\2\2\u01bd\u01be\7e\2\2\u01be\u01f9\7u\2\2\u01bf"+
+ "\u01c0\7e\2\2\u01c0\u01c1\7n\2\2\u01c1\u01f9\7x\2\2\u01c2\u01c3\7v\2\2"+
+ "\u01c3\u01c4\7u\2\2\u01c4\u01f9\7z\2\2\u01c5\u01c6\7n\2\2\u01c6\u01c7"+
+ "\7c\2\2\u01c7\u01f9\7u\2\2\u01c8\u01c9\7e\2\2\u01c9\u01ca\7r\2\2\u01ca"+
+ "\u01f9\7{\2\2\u01cb\u01cc\7e\2\2\u01cc\u01cd\7o\2\2\u01cd\u01f9\7r\2\2"+
+ "\u01ce\u01cf\7e\2\2\u01cf\u01d0\7r\2\2\u01d0\u01f9\7z\2\2\u01d1\u01d2"+
+ "\7f\2\2\u01d2\u01d3\7e\2\2\u01d3\u01f9\7r\2\2\u01d4\u01d5\7f\2\2\u01d5"+
+ "\u01d6\7g\2\2\u01d6\u01f9\7e\2\2\u01d7\u01d8\7k\2\2\u01d8\u01d9\7p\2\2"+
+ "\u01d9\u01f9\7e\2\2\u01da\u01db\7c\2\2\u01db\u01dc\7z\2\2\u01dc\u01f9"+
+ "\7u\2\2\u01dd\u01de\7d\2\2\u01de\u01df\7p\2\2\u01df\u01f9\7g\2\2\u01e0"+
+ "\u01e1\7e\2\2\u01e1\u01e2\7n\2\2\u01e2\u01f9\7f\2\2\u01e3\u01e4\7u\2\2"+
+ "\u01e4\u01e5\7d\2\2\u01e5\u01f9\7e\2\2\u01e6\u01e7\7k\2\2\u01e7\u01e8"+
+ "\7u\2\2\u01e8\u01f9\7e\2\2\u01e9\u01ea\7k\2\2\u01ea\u01eb\7p\2\2\u01eb"+
+ "\u01f9\7z\2\2\u01ec\u01ed\7d\2\2\u01ed\u01ee\7g\2\2\u01ee\u01f9\7s\2\2"+
+ "\u01ef\u01f0\7u\2\2\u01f0\u01f1\7g\2\2\u01f1\u01f9\7f\2\2\u01f2\u01f3"+
+ "\7f\2\2\u01f3\u01f4\7g\2\2\u01f4\u01f9\7z\2\2\u01f5\u01f6\7k\2\2\u01f6"+
+ "\u01f7\7p\2\2\u01f7\u01f9\7{\2\2\u01f8\u011d\3\2\2\2\u01f8\u0120\3\2\2"+
+ "\2\u01f8\u0123\3\2\2\2\u01f8\u0126\3\2\2\2\u01f8\u0129\3\2\2\2\u01f8\u012c"+
+ "\3\2\2\2\u01f8\u012f\3\2\2\2\u01f8\u0132\3\2\2\2\u01f8\u0135\3\2\2\2\u01f8"+
+ "\u0138\3\2\2\2\u01f8\u013b\3\2\2\2\u01f8\u013e\3\2\2\2\u01f8\u0141\3\2"+
+ "\2\2\u01f8\u0144\3\2\2\2\u01f8\u0147\3\2\2\2\u01f8\u014a\3\2\2\2\u01f8"+
+ "\u014d\3\2\2\2\u01f8\u0150\3\2\2\2\u01f8\u0153\3\2\2\2\u01f8\u0156\3\2"+
+ "\2\2\u01f8\u0159\3\2\2\2\u01f8\u015c\3\2\2\2\u01f8\u015f\3\2\2\2\u01f8"+
+ "\u0162\3\2\2\2\u01f8\u0165\3\2\2\2\u01f8\u0168\3\2\2\2\u01f8\u016b\3\2"+
+ "\2\2\u01f8\u016e\3\2\2\2\u01f8\u0171\3\2\2\2\u01f8\u0174\3\2\2\2\u01f8"+
+ "\u0177\3\2\2\2\u01f8\u017a\3\2\2\2\u01f8\u017d\3\2\2\2\u01f8\u0180\3\2"+
+ "\2\2\u01f8\u0183\3\2\2\2\u01f8\u0186\3\2\2\2\u01f8\u0189\3\2\2\2\u01f8"+
+ "\u018c\3\2\2\2\u01f8\u018f\3\2\2\2\u01f8\u0192\3\2\2\2\u01f8\u0195\3\2"+
+ "\2\2\u01f8\u0198\3\2\2\2\u01f8\u019b\3\2\2\2\u01f8\u019e\3\2\2\2\u01f8"+
+ "\u01a1\3\2\2\2\u01f8\u01a4\3\2\2\2\u01f8\u01a7\3\2\2\2\u01f8\u01aa\3\2"+
+ "\2\2\u01f8\u01ad\3\2\2\2\u01f8\u01b0\3\2\2\2\u01f8\u01b3\3\2\2\2\u01f8"+
+ "\u01b6\3\2\2\2\u01f8\u01b9\3\2\2\2\u01f8\u01bc\3\2\2\2\u01f8\u01bf\3\2"+
+ "\2\2\u01f8\u01c2\3\2\2\2\u01f8\u01c5\3\2\2\2\u01f8\u01c8\3\2\2\2\u01f8"+
+ "\u01cb\3\2\2\2\u01f8\u01ce\3\2\2\2\u01f8\u01d1\3\2\2\2\u01f8\u01d4\3\2"+
+ "\2\2\u01f8\u01d7\3\2\2\2\u01f8\u01da\3\2\2\2\u01f8\u01dd\3\2\2\2\u01f8"+
+ "\u01e0\3\2\2\2\u01f8\u01e3\3\2\2\2\u01f8\u01e6\3\2\2\2\u01f8\u01e9\3\2"+
+ "\2\2\u01f8\u01ec\3\2\2\2\u01f8\u01ef\3\2\2\2\u01f8\u01f2\3\2\2\2\u01f8"+
+ "\u01f5\3\2\2\2\u01f9b\3\2\2\2\u01fa\u01fb\7d\2\2\u01fb\u01fc\7{\2\2\u01fc"+
+ "\u01fd\7v\2\2\u01fd\u020e\7g\2\2\u01fe\u01ff\7y\2\2\u01ff\u0200\7q\2\2"+
+ "\u0200\u0201\7t\2\2\u0201\u020e\7f\2\2\u0202\u0203\7d\2\2\u0203\u0204"+
+ "\7q\2\2\u0204\u0205\7q\2\2\u0205\u0206\7n\2\2\u0206\u0207\7g\2\2\u0207"+
+ "\u0208\7c\2\2\u0208\u020e\7p\2\2\u0209\u020a\7x\2\2\u020a\u020b\7q\2\2"+
+ "\u020b\u020c\7k\2\2\u020c\u020e\7f\2\2\u020d\u01fa\3\2\2\2\u020d\u01fe"+
+ "\3\2\2\2\u020d\u0202\3\2\2\2\u020d\u0209\3\2\2\2\u020ed\3\2\2\2\u020f"+
+ "\u0215\7$\2\2\u0210\u0211\7^\2\2\u0211\u0214\7$\2\2\u0212\u0214\n\2\2"+
+ "\2\u0213\u0210\3\2\2\2\u0213\u0212\3\2\2\2\u0214\u0217\3\2\2\2\u0215\u0213"+
+ "\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0218\3\2\2\2\u0217\u0215\3\2\2\2\u0218"+
+ "\u0219\7$\2\2\u0219f\3\2\2\2\u021a\u021e\7)\2\2\u021b\u021c\7^\2\2\u021c"+
+ "\u021f\7)\2\2\u021d\u021f\n\3\2\2\u021e\u021b\3\2\2\2\u021e\u021d\3\2"+
+ "\2\2\u021f\u0220\3\2\2\2\u0220\u0221\7)\2\2\u0221h\3\2\2\2\u0222\u0223"+
+ "\7v\2\2\u0223\u0224\7t\2\2\u0224\u0225\7w\2\2\u0225\u022c\7g\2\2\u0226"+
+ "\u0227\7h\2\2\u0227\u0228\7c\2\2\u0228\u0229\7n\2\2\u0229\u022a\7u\2\2"+
+ "\u022a\u022c\7g\2\2\u022b\u0222\3\2\2\2\u022b\u0226\3\2\2\2\u022cj\3\2"+
+ "\2\2\u022d\u0230\5m\67\2\u022e\u0230\5u;\2\u022f\u022d\3\2\2\2\u022f\u022e"+
+ "\3\2\2\2\u0230l\3\2\2\2\u0231\u0235\5o8\2\u0232\u0235\5q9\2\u0233\u0235"+
+ "\5s:\2\u0234\u0231\3\2\2\2\u0234\u0232\3\2\2\2\u0234\u0233\3\2\2\2\u0235"+
+ "n\3\2\2\2\u0236\u023c\7\'\2\2\u0237\u0238\7\62\2\2\u0238\u023c\7d\2\2"+
+ "\u0239\u023a\7\62\2\2\u023a\u023c\7D\2\2\u023b\u0236\3\2\2\2\u023b\u0237"+
+ "\3\2\2\2\u023b\u0239\3\2\2\2\u023c\u0240\3\2\2\2\u023d\u023f\5}?\2\u023e"+
+ "\u023d\3\2\2\2\u023f\u0242\3\2\2\2\u0240\u023e\3\2\2\2\u0240\u0241\3\2"+
+ "\2\2\u0241\u0243\3\2\2\2\u0242\u0240\3\2\2\2\u0243\u0245\7\60\2\2\u0244"+
+ "\u0246\5}?\2\u0245\u0244\3\2\2\2\u0246\u0247\3\2\2\2\u0247\u0245\3\2\2"+
+ "\2\u0247\u0248\3\2\2\2\u0248p\3\2\2\2\u0249\u024b\5\177@\2\u024a\u0249"+
+ "\3\2\2\2\u024b\u024e\3\2\2\2\u024c\u024a\3\2\2\2\u024c\u024d\3\2\2\2\u024d"+
+ "\u024f\3\2\2\2\u024e\u024c\3\2\2\2\u024f\u0251\7\60\2\2\u0250\u0252\5"+
+ "\177@\2\u0251\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0251\3\2\2\2\u0253"+
+ "\u0254\3\2\2\2\u0254r\3\2\2\2\u0255\u025b\7&\2\2\u0256\u0257\7\62\2\2"+
+ "\u0257\u025b\7z\2\2\u0258\u0259\7\62\2\2\u0259\u025b\7Z\2\2\u025a\u0255"+
+ "\3\2\2\2\u025a\u0256\3\2\2\2\u025a\u0258\3\2\2\2\u025b\u025f\3\2\2\2\u025c"+
+ "\u025e\5\u0081A\2\u025d\u025c\3\2\2\2\u025e\u0261\3\2\2\2\u025f\u025d"+
+ "\3\2\2\2\u025f\u0260\3\2\2\2\u0260\u0262\3\2\2\2\u0261\u025f\3\2\2\2\u0262"+
+ "\u0264\7\60\2\2\u0263\u0265\5\u0081A\2\u0264\u0263\3\2\2\2\u0265\u0266"+
+ "\3\2\2\2\u0266\u0264\3\2\2\2\u0266\u0267\3\2\2\2\u0267t\3\2\2\2\u0268"+
+ "\u026c\5y=\2\u0269\u026c\5{>\2\u026a\u026c\5w<\2\u026b\u0268\3\2\2\2\u026b"+
+ "\u0269\3\2\2\2\u026b\u026a\3\2\2\2\u026cv\3\2\2\2\u026d\u026e\7\62\2\2"+
+ "\u026e\u0270\t\4\2\2\u026f\u0271\5}?\2\u0270\u026f\3\2\2\2\u0271\u0272"+
+ "\3\2\2\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2\2\2\u0273\u027b\3\2\2\2\u0274"+
+ "\u0276\7\'\2\2\u0275\u0277\5}?\2\u0276\u0275\3\2\2\2\u0277\u0278\3\2\2"+
+ "\2\u0278\u0276\3\2\2\2\u0278\u0279\3\2\2\2\u0279\u027b\3\2\2\2\u027a\u026d"+
+ "\3\2\2\2\u027a\u0274\3\2\2\2\u027bx\3\2\2\2\u027c\u027e\5\177@\2\u027d"+
+ "\u027c\3\2\2\2\u027e\u027f\3\2\2\2\u027f\u027d\3\2\2\2\u027f\u0280\3\2"+
+ "\2\2\u0280z\3\2\2\2\u0281\u0287\7&\2\2\u0282\u0283\7\62\2\2\u0283\u0287"+
+ "\7z\2\2\u0284\u0285\7\62\2\2\u0285\u0287\7Z\2\2\u0286\u0281\3\2\2\2\u0286"+
+ "\u0282\3\2\2\2\u0286\u0284\3\2\2\2\u0287\u0289\3\2\2\2\u0288\u028a\5\u0081"+
+ "A\2\u0289\u0288\3\2\2\2\u028a\u028b\3\2\2\2\u028b\u0289\3\2\2\2\u028b"+
+ "\u028c\3\2\2\2\u028c|\3\2\2\2\u028d\u028e\t\5\2\2\u028e~\3\2\2\2\u028f"+
+ "\u0290\t\6\2\2\u0290\u0080\3\2\2\2\u0291\u0292\t\7\2\2\u0292\u0082\3\2"+
+ "\2\2\u0293\u0297\5\u0085C\2\u0294\u0296\5\u0087D\2\u0295\u0294\3\2\2\2"+
+ "\u0296\u0299\3\2\2\2\u0297\u0295\3\2\2\2\u0297\u0298\3\2\2\2\u0298\u0084"+
+ "\3\2\2\2\u0299\u0297\3\2\2\2\u029a\u029b\t\b\2\2\u029b\u0086\3\2\2\2\u029c"+
+ "\u029d\t\t\2\2\u029d\u0088\3\2\2\2\u029e\u02a2\7#\2\2\u029f\u02a1\t\n"+
+ "\2\2\u02a0\u029f\3\2\2\2\u02a1\u02a4\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2"+
+ "\u02a3\3\2\2\2\u02a3\u008a\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a5\u02a7\t\13"+
+ "\2\2\u02a6\u02a5\3\2\2\2\u02a7\u02a8\3\2\2\2\u02a8\u02a6\3\2\2\2\u02a8"+
+ "\u02a9\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\bF\2\2\u02ab\u008c\3\2"+
+ "\2\2\u02ac\u02ad\7\61\2\2\u02ad\u02ae\7\61\2\2\u02ae\u02b2\3\2\2\2\u02af"+
+ "\u02b1\n\f\2\2\u02b0\u02af\3\2\2\2\u02b1\u02b4\3\2\2\2\u02b2\u02b0\3\2"+
+ "\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b5\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b5"+
+ "\u02b6\bG\2\2\u02b6\u008e\3\2\2\2\u02b7\u02b8\7\61\2\2\u02b8\u02b9\7,"+
+ "\2\2\u02b9\u02bd\3\2\2\2\u02ba\u02bc\13\2\2\2\u02bb\u02ba\3\2\2\2\u02bc"+
+ "\u02bf\3\2\2\2\u02bd\u02be\3\2\2\2\u02bd\u02bb\3\2\2\2\u02be\u02c0\3\2"+
+ "\2\2\u02bf\u02bd\3\2\2\2\u02c0\u02c1\7,\2\2\u02c1\u02c2\7\61\2\2\u02c2"+
+ "\u02c3\3\2\2\2\u02c3\u02c4\bH\2\2\u02c4\u0090\3\2\2\2\37\2\u01f8\u020d"+
+ "\u0213\u0215\u021e\u022b\u022f\u0234\u023b\u0240\u0247\u024c\u0253\u025a"+
+ "\u025f\u0266\u026b\u0272\u0278\u027a\u027f\u0286\u028b\u0297\u02a2\u02a8"+
+ "\u02b2\u02bd\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens
index 8f685bbbe..7205ec01e 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens
@@ -44,68 +44,70 @@ T__42=43
T__43=44
T__44=45
T__45=46
-MNEMONIC=47
-SIMPLETYPE=48
-STRING=49
-CHAR=50
-BOOLEAN=51
-NUMBER=52
-NUMFLOAT=53
-BINFLOAT=54
-DECFLOAT=55
-HEXFLOAT=56
-NUMINT=57
-BININTEGER=58
-DECINTEGER=59
-HEXINTEGER=60
-NAME=61
-ASMREL=62
-WS=63
-COMMENT_LINE=64
-COMMENT_BLOCK=65
-'('=1
-')'=2
-'{'=3
-'}'=4
-'const'=5
-'='=6
-';'=7
-'if'=8
-'else'=9
-'while'=10
-'do'=11
-'for'=12
-'return'=13
-'asm'=14
-':'=15
-'..'=16
-','=17
-'signed'=18
-'*'=19
-'['=20
-']'=21
-'<'=22
-'>'=23
-'--'=24
-'++'=25
-'+'=26
-'-'=27
-'!'=28
-'&'=29
-'~'=30
-'>>'=31
-'<<'=32
-'/'=33
-'%'=34
-'=='=35
-'!='=36
-'<>'=37
-'<='=38
-'=<'=39
-'>='=40
-'=>'=41
-'^'=42
-'|'=43
-'&&'=44
-'||'=45
-'#'=46
+T__46=47
+MNEMONIC=48
+SIMPLETYPE=49
+STRING=50
+CHAR=51
+BOOLEAN=52
+NUMBER=53
+NUMFLOAT=54
+BINFLOAT=55
+DECFLOAT=56
+HEXFLOAT=57
+NUMINT=58
+BININTEGER=59
+DECINTEGER=60
+HEXINTEGER=61
+NAME=62
+ASMREL=63
+WS=64
+COMMENT_LINE=65
+COMMENT_BLOCK=66
+'import'=1
+'('=2
+')'=3
+'{'=4
+'}'=5
+','=6
+'const'=7
+'='=8
+';'=9
+'if'=10
+'else'=11
+'while'=12
+'do'=13
+'for'=14
+'return'=15
+'asm'=16
+':'=17
+'..'=18
+'signed'=19
+'*'=20
+'['=21
+']'=22
+'<'=23
+'>'=24
+'--'=25
+'++'=26
+'+'=27
+'-'=28
+'!'=29
+'&'=30
+'~'=31
+'>>'=32
+'<<'=33
+'/'=34
+'%'=35
+'=='=36
+'!='=37
+'<>'=38
+'<='=39
+'=<'=40
+'>='=41
+'=>'=42
+'^'=43
+'|'=44
+'&&'=45
+'||'=46
+'#'=47
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
index b9c679874..7a156913f 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java
@@ -27,6 +27,26 @@ public interface KickCListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitAsmFile(KickCParser.AsmFileContext ctx);
+ /**
+ * Enter a parse tree produced by {@link KickCParser#importSeq}.
+ * @param ctx the parse tree
+ */
+ void enterImportSeq(KickCParser.ImportSeqContext ctx);
+ /**
+ * Exit a parse tree produced by {@link KickCParser#importSeq}.
+ * @param ctx the parse tree
+ */
+ void exitImportSeq(KickCParser.ImportSeqContext ctx);
+ /**
+ * Enter a parse tree produced by {@link KickCParser#importDecl}.
+ * @param ctx the parse tree
+ */
+ void enterImportDecl(KickCParser.ImportDeclContext ctx);
+ /**
+ * Exit a parse tree produced by {@link KickCParser#importDecl}.
+ * @param ctx the parse tree
+ */
+ void exitImportDecl(KickCParser.ImportDeclContext ctx);
/**
* Enter a parse tree produced by {@link KickCParser#declSeq}.
* @param ctx the parse tree
@@ -61,6 +81,26 @@ public interface KickCListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitDeclVariable(KickCParser.DeclVariableContext ctx);
+ /**
+ * Enter a parse tree produced by {@link KickCParser#parameterListDecl}.
+ * @param ctx the parse tree
+ */
+ void enterParameterListDecl(KickCParser.ParameterListDeclContext ctx);
+ /**
+ * Exit a parse tree produced by {@link KickCParser#parameterListDecl}.
+ * @param ctx the parse tree
+ */
+ void exitParameterListDecl(KickCParser.ParameterListDeclContext ctx);
+ /**
+ * Enter a parse tree produced by {@link KickCParser#parameterDecl}.
+ * @param ctx the parse tree
+ */
+ void enterParameterDecl(KickCParser.ParameterDeclContext ctx);
+ /**
+ * Exit a parse tree produced by {@link KickCParser#parameterDecl}.
+ * @param ctx the parse tree
+ */
+ void exitParameterDecl(KickCParser.ParameterDeclContext ctx);
/**
* Enter a parse tree produced by {@link KickCParser#declVar}.
* @param ctx the parse tree
@@ -237,26 +277,6 @@ public interface KickCListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitForRange(KickCParser.ForRangeContext ctx);
- /**
- * Enter a parse tree produced by {@link KickCParser#parameterListDecl}.
- * @param ctx the parse tree
- */
- void enterParameterListDecl(KickCParser.ParameterListDeclContext ctx);
- /**
- * Exit a parse tree produced by {@link KickCParser#parameterListDecl}.
- * @param ctx the parse tree
- */
- void exitParameterListDecl(KickCParser.ParameterListDeclContext ctx);
- /**
- * Enter a parse tree produced by {@link KickCParser#parameterDecl}.
- * @param ctx the parse tree
- */
- void enterParameterDecl(KickCParser.ParameterDeclContext ctx);
- /**
- * Exit a parse tree produced by {@link KickCParser#parameterDecl}.
- * @param ctx the parse tree
- */
- void exitParameterDecl(KickCParser.ParameterDeclContext ctx);
/**
* Enter a parse tree produced by the {@code typePtr}
* labeled alternative in {@link KickCParser#typeDecl}.
diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
index cd9911d7d..a1847e631 100644
--- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
+++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java
@@ -23,40 +23,41 @@ public class KickCParser extends Parser {
T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
- T__45=46, MNEMONIC=47, SIMPLETYPE=48, STRING=49, CHAR=50, BOOLEAN=51,
- NUMBER=52, NUMFLOAT=53, BINFLOAT=54, DECFLOAT=55, HEXFLOAT=56, NUMINT=57,
- BININTEGER=58, DECINTEGER=59, HEXINTEGER=60, NAME=61, ASMREL=62, WS=63,
- COMMENT_LINE=64, COMMENT_BLOCK=65;
+ T__45=46, T__46=47, MNEMONIC=48, SIMPLETYPE=49, STRING=50, CHAR=51, BOOLEAN=52,
+ NUMBER=53, NUMFLOAT=54, BINFLOAT=55, DECFLOAT=56, HEXFLOAT=57, NUMINT=58,
+ BININTEGER=59, DECINTEGER=60, HEXINTEGER=61, NAME=62, ASMREL=63, WS=64,
+ COMMENT_LINE=65, COMMENT_BLOCK=66;
public static final int
- RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_decl = 3, RULE_declVar = 4,
- RULE_stmtSeq = 5, RULE_stmt = 6, RULE_forDeclaration = 7, RULE_forIteration = 8,
- RULE_parameterListDecl = 9, RULE_parameterDecl = 10, RULE_typeDecl = 11,
- RULE_initializer = 12, RULE_lvalue = 13, RULE_expr = 14, RULE_parameterList = 15,
- RULE_asmLines = 16, RULE_asmLine = 17, RULE_asmLabel = 18, RULE_asmInstruction = 19,
- RULE_asmParamMode = 20, RULE_asmExpr = 21;
+ RULE_file = 0, RULE_asmFile = 1, RULE_importSeq = 2, RULE_importDecl = 3,
+ RULE_declSeq = 4, RULE_decl = 5, RULE_parameterListDecl = 6, RULE_parameterDecl = 7,
+ RULE_declVar = 8, RULE_stmtSeq = 9, RULE_stmt = 10, RULE_forDeclaration = 11,
+ RULE_forIteration = 12, RULE_typeDecl = 13, RULE_initializer = 14, RULE_lvalue = 15,
+ RULE_expr = 16, RULE_parameterList = 17, RULE_asmLines = 18, RULE_asmLine = 19,
+ RULE_asmLabel = 20, RULE_asmInstruction = 21, RULE_asmParamMode = 22,
+ RULE_asmExpr = 23;
public static final String[] ruleNames = {
- "file", "asmFile", "declSeq", "decl", "declVar", "stmtSeq", "stmt", "forDeclaration",
- "forIteration", "parameterListDecl", "parameterDecl", "typeDecl", "initializer",
- "lvalue", "expr", "parameterList", "asmLines", "asmLine", "asmLabel",
- "asmInstruction", "asmParamMode", "asmExpr"
+ "file", "asmFile", "importSeq", "importDecl", "declSeq", "decl", "parameterListDecl",
+ "parameterDecl", "declVar", "stmtSeq", "stmt", "forDeclaration", "forIteration",
+ "typeDecl", "initializer", "lvalue", "expr", "parameterList", "asmLines",
+ "asmLine", "asmLabel", "asmInstruction", "asmParamMode", "asmExpr"
};
private static final String[] _LITERAL_NAMES = {
- null, "'('", "')'", "'{'", "'}'", "'const'", "'='", "';'", "'if'", "'else'",
- "'while'", "'do'", "'for'", "'return'", "'asm'", "':'", "'..'", "','",
- "'signed'", "'*'", "'['", "']'", "'<'", "'>'", "'--'", "'++'", "'+'",
- "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'=='", "'!='",
- "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'", "'&&'", "'||'",
- "'#'"
+ null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'const'", "'='",
+ "';'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'",
+ "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'<'", "'>'", "'--'",
+ "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'",
+ "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'",
+ "'&&'", "'||'", "'#'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, null, null, null, null, null, "MNEMONIC",
- "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT",
- "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER",
- "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT",
+ "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER",
+ "HEXINTEGER", "NAME", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
@@ -108,6 +109,9 @@ public class KickCParser extends Parser {
_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
public static class FileContext extends ParserRuleContext {
+ public ImportSeqContext importSeq() {
+ return getRuleContext(ImportSeqContext.class,0);
+ }
public DeclSeqContext declSeq() {
return getRuleContext(DeclSeqContext.class,0);
}
@@ -137,9 +141,11 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(44);
+ setState(48);
+ importSeq();
+ setState(49);
declSeq();
- setState(45);
+ setState(50);
match(EOF);
}
}
@@ -184,9 +190,9 @@ public class KickCParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(47);
+ setState(52);
asmLines();
- setState(48);
+ setState(53);
match(EOF);
}
}
@@ -201,6 +207,110 @@ public class KickCParser extends Parser {
return _localctx;
}
+ public static class ImportSeqContext extends ParserRuleContext {
+ public List importDecl() {
+ return getRuleContexts(ImportDeclContext.class);
+ }
+ public ImportDeclContext importDecl(int i) {
+ return getRuleContext(ImportDeclContext.class,i);
+ }
+ public ImportSeqContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_importSeq; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).enterImportSeq(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).exitImportSeq(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitImportSeq(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ImportSeqContext importSeq() throws RecognitionException {
+ ImportSeqContext _localctx = new ImportSeqContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_importSeq);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(56);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ do {
+ {
+ {
+ setState(55);
+ importDecl();
+ }
+ }
+ setState(58);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ } while ( _la==T__0 );
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ImportDeclContext extends ParserRuleContext {
+ public TerminalNode STRING() { return getToken(KickCParser.STRING, 0); }
+ public ImportDeclContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_importDecl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).enterImportDecl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).exitImportDecl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitImportDecl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ImportDeclContext importDecl() throws RecognitionException {
+ ImportDeclContext _localctx = new ImportDeclContext(_ctx, getState());
+ enterRule(_localctx, 6, RULE_importDecl);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(60);
+ match(T__0);
+ setState(61);
+ match(STRING);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class DeclSeqContext extends ParserRuleContext {
public List decl() {
return getRuleContexts(DeclContext.class);
@@ -229,25 +339,25 @@ public class KickCParser extends Parser {
public final DeclSeqContext declSeq() throws RecognitionException {
DeclSeqContext _localctx = new DeclSeqContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_declSeq);
+ enterRule(_localctx, 8, RULE_declSeq);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(51);
+ setState(64);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(50);
+ setState(63);
decl();
}
}
- setState(53);
+ setState(66);
_errHandler.sync(this);
_la = _input.LA(1);
- } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__17) | (1L << SIMPLETYPE))) != 0) );
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__6) | (1L << T__18) | (1L << SIMPLETYPE))) != 0) );
}
}
catch (RecognitionException re) {
@@ -320,55 +430,55 @@ public class KickCParser extends Parser {
public final DeclContext decl() throws RecognitionException {
DeclContext _localctx = new DeclContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_decl);
+ enterRule(_localctx, 10, RULE_decl);
int _la;
try {
- setState(69);
+ setState(82);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
_localctx = new DeclMethodContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(55);
+ setState(68);
typeDecl(0);
- setState(56);
+ setState(69);
match(NAME);
- setState(57);
- match(T__0);
- setState(59);
+ setState(70);
+ match(T__1);
+ setState(72);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__17 || _la==SIMPLETYPE) {
+ if (_la==T__18 || _la==SIMPLETYPE) {
{
- setState(58);
+ setState(71);
parameterListDecl();
}
}
- setState(61);
- match(T__1);
- setState(62);
+ setState(74);
match(T__2);
- setState(64);
+ setState(75);
+ match(T__3);
+ setState(77);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__17) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__3) | (1L << T__6) | (1L << T__9) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__18) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(63);
+ setState(76);
stmtSeq();
}
}
- setState(66);
- match(T__3);
+ setState(79);
+ match(T__4);
}
break;
case 2:
_localctx = new DeclVariableContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(68);
+ setState(81);
declVar();
}
break;
@@ -385,6 +495,117 @@ public class KickCParser extends Parser {
return _localctx;
}
+ public static class ParameterListDeclContext extends ParserRuleContext {
+ public List parameterDecl() {
+ return getRuleContexts(ParameterDeclContext.class);
+ }
+ public ParameterDeclContext parameterDecl(int i) {
+ return getRuleContext(ParameterDeclContext.class,i);
+ }
+ public ParameterListDeclContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_parameterListDecl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).enterParameterListDecl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).exitParameterListDecl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitParameterListDecl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ParameterListDeclContext parameterListDecl() throws RecognitionException {
+ ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState());
+ enterRule(_localctx, 12, RULE_parameterListDecl);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(84);
+ parameterDecl();
+ setState(89);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__5) {
+ {
+ {
+ setState(85);
+ match(T__5);
+ setState(86);
+ parameterDecl();
+ }
+ }
+ setState(91);
+ _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 ParameterDeclContext extends ParserRuleContext {
+ public TypeDeclContext typeDecl() {
+ return getRuleContext(TypeDeclContext.class,0);
+ }
+ public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
+ public ParameterDeclContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_parameterDecl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).enterParameterDecl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof KickCListener ) ((KickCListener)listener).exitParameterDecl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitParameterDecl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ParameterDeclContext parameterDecl() throws RecognitionException {
+ ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState());
+ enterRule(_localctx, 14, RULE_parameterDecl);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(92);
+ typeDecl(0);
+ setState(93);
+ match(NAME);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class DeclVarContext extends ParserRuleContext {
public TypeDeclContext typeDecl() {
return getRuleContext(TypeDeclContext.class,0);
@@ -414,39 +635,39 @@ public class KickCParser extends Parser {
public final DeclVarContext declVar() throws RecognitionException {
DeclVarContext _localctx = new DeclVarContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_declVar);
+ enterRule(_localctx, 16, RULE_declVar);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(72);
+ setState(96);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__4) {
+ if (_la==T__6) {
{
- setState(71);
- match(T__4);
+ setState(95);
+ match(T__6);
}
}
- setState(74);
+ setState(98);
typeDecl(0);
- setState(75);
+ setState(99);
match(NAME);
- setState(78);
+ setState(102);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__5) {
+ if (_la==T__7) {
{
- setState(76);
- match(T__5);
- setState(77);
+ setState(100);
+ match(T__7);
+ setState(101);
initializer();
}
}
- setState(80);
- match(T__6);
+ setState(104);
+ match(T__8);
}
}
catch (RecognitionException re) {
@@ -488,25 +709,25 @@ public class KickCParser extends Parser {
public final StmtSeqContext stmtSeq() throws RecognitionException {
StmtSeqContext _localctx = new StmtSeqContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_stmtSeq);
+ enterRule(_localctx, 18, RULE_stmtSeq);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(83);
+ setState(107);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(82);
+ setState(106);
stmt();
}
}
- setState(85);
+ setState(109);
_errHandler.sync(this);
_la = _input.LA(1);
- } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__17) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) );
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__3) | (1L << T__6) | (1L << T__9) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__18) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) );
}
}
catch (RecognitionException re) {
@@ -745,17 +966,17 @@ public class KickCParser extends Parser {
public final StmtContext stmt() throws RecognitionException {
StmtContext _localctx = new StmtContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_stmt);
+ enterRule(_localctx, 20, RULE_stmt);
int _la;
try {
- setState(143);
+ setState(167);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
case 1:
_localctx = new StmtDeclVarContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(87);
+ setState(111);
declVar();
}
break;
@@ -763,68 +984,68 @@ public class KickCParser extends Parser {
_localctx = new StmtBlockContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(88);
- match(T__2);
- setState(90);
+ setState(112);
+ match(T__3);
+ setState(114);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__17) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__3) | (1L << T__6) | (1L << T__9) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__18) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(89);
+ setState(113);
stmtSeq();
}
}
- setState(92);
- match(T__3);
+ setState(116);
+ match(T__4);
}
break;
case 3:
_localctx = new StmtAssignmentContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(93);
+ setState(117);
lvalue(0);
- setState(94);
- match(T__5);
- setState(95);
+ setState(118);
+ match(T__7);
+ setState(119);
expr(0);
- setState(96);
- match(T__6);
+ setState(120);
+ match(T__8);
}
break;
case 4:
_localctx = new StmtExprContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(98);
+ setState(122);
expr(0);
- setState(99);
- match(T__6);
+ setState(123);
+ match(T__8);
}
break;
case 5:
_localctx = new StmtIfElseContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(101);
- match(T__7);
- setState(102);
- match(T__0);
- setState(103);
- expr(0);
- setState(104);
+ setState(125);
+ match(T__9);
+ setState(126);
match(T__1);
- setState(105);
+ setState(127);
+ expr(0);
+ setState(128);
+ match(T__2);
+ setState(129);
stmt();
- setState(108);
+ setState(132);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
{
- setState(106);
- match(T__8);
- setState(107);
+ setState(130);
+ match(T__10);
+ setState(131);
stmt();
}
break;
@@ -835,15 +1056,15 @@ public class KickCParser extends Parser {
_localctx = new StmtWhileContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(110);
- match(T__9);
- setState(111);
- match(T__0);
- setState(112);
- expr(0);
- setState(113);
+ setState(134);
+ match(T__11);
+ setState(135);
match(T__1);
- setState(114);
+ setState(136);
+ expr(0);
+ setState(137);
+ match(T__2);
+ setState(138);
stmt();
}
break;
@@ -851,45 +1072,45 @@ public class KickCParser extends Parser {
_localctx = new StmtDoWhileContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(116);
- match(T__10);
- setState(117);
+ setState(140);
+ match(T__12);
+ setState(141);
stmt();
- setState(118);
- match(T__9);
- setState(119);
- match(T__0);
- setState(120);
- expr(0);
- setState(121);
+ setState(142);
+ match(T__11);
+ setState(143);
match(T__1);
- setState(122);
- match(T__6);
+ setState(144);
+ expr(0);
+ setState(145);
+ match(T__2);
+ setState(146);
+ match(T__8);
}
break;
case 8:
_localctx = new StmtForContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(124);
- match(T__11);
- setState(125);
- match(T__0);
- setState(127);
+ setState(148);
+ match(T__13);
+ setState(149);
+ match(T__1);
+ setState(151);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__17) | (1L << SIMPLETYPE) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__18) | (1L << SIMPLETYPE) | (1L << NAME))) != 0)) {
{
- setState(126);
+ setState(150);
forDeclaration();
}
}
- setState(129);
+ setState(153);
forIteration();
- setState(130);
- match(T__1);
- setState(131);
+ setState(154);
+ match(T__2);
+ setState(155);
stmt();
}
break;
@@ -897,34 +1118,34 @@ public class KickCParser extends Parser {
_localctx = new StmtReturnContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(133);
- match(T__12);
- setState(135);
+ setState(157);
+ match(T__14);
+ setState(159);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(134);
+ setState(158);
expr(0);
}
}
- setState(137);
- match(T__6);
+ setState(161);
+ match(T__8);
}
break;
case 10:
_localctx = new StmtAsmContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(138);
- match(T__13);
- setState(139);
- match(T__2);
- setState(140);
- asmLines();
- setState(141);
+ setState(162);
+ match(T__15);
+ setState(163);
match(T__3);
+ setState(164);
+ asmLines();
+ setState(165);
+ match(T__4);
}
break;
}
@@ -977,32 +1198,32 @@ public class KickCParser extends Parser {
public final ForDeclarationContext forDeclaration() throws RecognitionException {
ForDeclarationContext _localctx = new ForDeclarationContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_forDeclaration);
+ enterRule(_localctx, 22, RULE_forDeclaration);
int _la;
try {
_localctx = new ForDeclContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(146);
+ setState(170);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__17 || _la==SIMPLETYPE) {
+ if (_la==T__18 || _la==SIMPLETYPE) {
{
- setState(145);
+ setState(169);
typeDecl(0);
}
}
- setState(148);
+ setState(172);
match(NAME);
- setState(151);
+ setState(175);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==T__5) {
+ if (_la==T__7) {
{
- setState(149);
- match(T__5);
- setState(150);
+ setState(173);
+ match(T__7);
+ setState(174);
initializer();
}
}
@@ -1078,47 +1299,47 @@ public class KickCParser extends Parser {
public final ForIterationContext forIteration() throws RecognitionException {
ForIterationContext _localctx = new ForIterationContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_forIteration);
+ enterRule(_localctx, 24, RULE_forIteration);
int _la;
try {
- setState(164);
+ setState(188);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__6:
+ case T__8:
_localctx = new ForClassicContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(153);
- match(T__6);
- setState(154);
+ setState(177);
+ match(T__8);
+ setState(178);
expr(0);
- setState(155);
- match(T__6);
- setState(157);
+ setState(179);
+ match(T__8);
+ setState(181);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(156);
+ setState(180);
expr(0);
}
}
}
break;
- case T__14:
+ case T__16:
_localctx = new ForRangeContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(159);
- match(T__14);
- setState(160);
+ setState(183);
+ match(T__16);
+ setState(184);
expr(0);
{
- setState(161);
- match(T__15);
+ setState(185);
+ match(T__17);
}
- setState(162);
+ setState(186);
expr(0);
}
break;
@@ -1137,117 +1358,6 @@ public class KickCParser extends Parser {
return _localctx;
}
- public static class ParameterListDeclContext extends ParserRuleContext {
- public List parameterDecl() {
- return getRuleContexts(ParameterDeclContext.class);
- }
- public ParameterDeclContext parameterDecl(int i) {
- return getRuleContext(ParameterDeclContext.class,i);
- }
- public ParameterListDeclContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_parameterListDecl; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof KickCListener ) ((KickCListener)listener).enterParameterListDecl(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof KickCListener ) ((KickCListener)listener).exitParameterListDecl(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitParameterListDecl(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ParameterListDeclContext parameterListDecl() throws RecognitionException {
- ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_parameterListDecl);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(166);
- parameterDecl();
- setState(171);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==T__16) {
- {
- {
- setState(167);
- match(T__16);
- setState(168);
- parameterDecl();
- }
- }
- setState(173);
- _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 ParameterDeclContext extends ParserRuleContext {
- public TypeDeclContext typeDecl() {
- return getRuleContext(TypeDeclContext.class,0);
- }
- public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); }
- public ParameterDeclContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_parameterDecl; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof KickCListener ) ((KickCListener)listener).enterParameterDecl(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof KickCListener ) ((KickCListener)listener).exitParameterDecl(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)visitor).visitParameterDecl(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ParameterDeclContext parameterDecl() throws RecognitionException {
- ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_parameterDecl);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(174);
- typeDecl(0);
- setState(175);
- match(NAME);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
public static class TypeDeclContext extends ParserRuleContext {
public TypeDeclContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -1344,14 +1454,14 @@ public class KickCParser extends Parser {
int _parentState = getState();
TypeDeclContext _localctx = new TypeDeclContext(_ctx, _parentState);
TypeDeclContext _prevctx = _localctx;
- int _startState = 22;
- enterRecursionRule(_localctx, 22, RULE_typeDecl, _p);
+ int _startState = 26;
+ enterRecursionRule(_localctx, 26, RULE_typeDecl, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(181);
+ setState(194);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SIMPLETYPE:
@@ -1360,18 +1470,18 @@ public class KickCParser extends Parser {
_ctx = _localctx;
_prevctx = _localctx;
- setState(178);
+ setState(191);
match(SIMPLETYPE);
}
break;
- case T__17:
+ case T__18:
{
_localctx = new TypeSignedSimpleContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(179);
- match(T__17);
- setState(180);
+ setState(192);
+ match(T__18);
+ setState(193);
match(SIMPLETYPE);
}
break;
@@ -1379,55 +1489,55 @@ public class KickCParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(193);
+ setState(206);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(191);
+ setState(204);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
case 1:
{
_localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(183);
+ setState(196);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(184);
- match(T__18);
+ setState(197);
+ match(T__19);
}
break;
case 2:
{
_localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_typeDecl);
- setState(185);
+ setState(198);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(186);
- match(T__19);
- setState(188);
+ setState(199);
+ match(T__20);
+ setState(201);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(187);
+ setState(200);
expr(0);
}
}
- setState(190);
- match(T__20);
+ setState(203);
+ match(T__21);
}
break;
}
}
}
- setState(195);
+ setState(208);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
}
}
}
@@ -1497,15 +1607,14 @@ public class KickCParser extends Parser {
public final InitializerContext initializer() throws RecognitionException {
InitializerContext _localctx = new InitializerContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_initializer);
+ enterRule(_localctx, 28, RULE_initializer);
int _la;
try {
- setState(208);
+ setState(221);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__0:
- case T__18:
- case T__21:
+ case T__1:
+ case T__19:
case T__22:
case T__23:
case T__24:
@@ -1514,6 +1623,7 @@ public class KickCParser extends Parser {
case T__27:
case T__28:
case T__29:
+ case T__30:
case STRING:
case CHAR:
case BOOLEAN:
@@ -1522,36 +1632,36 @@ public class KickCParser extends Parser {
_localctx = new InitExprContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(196);
+ setState(209);
expr(0);
}
break;
- case T__2:
+ case T__3:
_localctx = new InitListContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(197);
- match(T__2);
- setState(198);
+ setState(210);
+ match(T__3);
+ setState(211);
initializer();
- setState(203);
+ setState(216);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__16) {
+ while (_la==T__5) {
{
{
- setState(199);
- match(T__16);
- setState(200);
+ setState(212);
+ match(T__5);
+ setState(213);
initializer();
}
}
- setState(205);
+ setState(218);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(206);
- match(T__3);
+ setState(219);
+ match(T__4);
}
break;
default:
@@ -1684,23 +1794,23 @@ public class KickCParser extends Parser {
int _parentState = getState();
LvalueContext _localctx = new LvalueContext(_ctx, _parentState);
LvalueContext _prevctx = _localctx;
- int _startState = 26;
- enterRecursionRule(_localctx, 26, RULE_lvalue, _p);
+ int _startState = 30;
+ enterRecursionRule(_localctx, 30, RULE_lvalue, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(221);
+ setState(234);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
case 1:
{
_localctx = new LvalueNameContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(211);
+ setState(224);
match(NAME);
}
break;
@@ -1709,9 +1819,9 @@ public class KickCParser extends Parser {
_localctx = new LvaluePtrContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(212);
- match(T__18);
- setState(213);
+ setState(225);
+ match(T__19);
+ setState(226);
match(NAME);
}
break;
@@ -1720,14 +1830,14 @@ public class KickCParser extends Parser {
_localctx = new LvaluePtrExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(214);
- match(T__18);
- setState(215);
- match(T__0);
- setState(216);
- expr(0);
- setState(217);
+ setState(227);
+ match(T__19);
+ setState(228);
match(T__1);
+ setState(229);
+ expr(0);
+ setState(230);
+ match(T__2);
}
break;
case 4:
@@ -1735,9 +1845,9 @@ public class KickCParser extends Parser {
_localctx = new LvalueLoHiContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(219);
+ setState(232);
_la = _input.LA(1);
- if ( !(_la==T__21 || _la==T__22) ) {
+ if ( !(_la==T__22 || _la==T__23) ) {
_errHandler.recoverInline(this);
}
else {
@@ -1745,15 +1855,15 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(220);
+ setState(233);
lvalue(2);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(230);
+ setState(243);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,24,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -1762,20 +1872,20 @@ public class KickCParser extends Parser {
{
_localctx = new LvalueArrayContext(new LvalueContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_lvalue);
- setState(223);
+ setState(236);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(224);
- match(T__19);
- setState(225);
- expr(0);
- setState(226);
+ setState(237);
match(T__20);
+ setState(238);
+ expr(0);
+ setState(239);
+ match(T__21);
}
}
}
- setState(232);
+ setState(245);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,24,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,25,_ctx);
}
}
}
@@ -2058,28 +2168,28 @@ public class KickCParser extends Parser {
int _parentState = getState();
ExprContext _localctx = new ExprContext(_ctx, _parentState);
ExprContext _prevctx = _localctx;
- int _startState = 28;
- enterRecursionRule(_localctx, 28, RULE_expr, _p);
+ int _startState = 32;
+ enterRecursionRule(_localctx, 32, RULE_expr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(258);
+ setState(271);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
case 1:
{
_localctx = new ExprParContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(234);
- match(T__0);
- setState(235);
- expr(0);
- setState(236);
+ setState(247);
match(T__1);
+ setState(248);
+ expr(0);
+ setState(249);
+ match(T__2);
}
break;
case 2:
@@ -2087,22 +2197,22 @@ public class KickCParser extends Parser {
_localctx = new ExprCallContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(238);
+ setState(251);
match(NAME);
- setState(239);
- match(T__0);
- setState(241);
+ setState(252);
+ match(T__1);
+ setState(254);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) {
{
- setState(240);
+ setState(253);
parameterList();
}
}
- setState(243);
- match(T__1);
+ setState(256);
+ match(T__2);
}
break;
case 3:
@@ -2110,13 +2220,13 @@ public class KickCParser extends Parser {
_localctx = new ExprCastContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(244);
- match(T__0);
- setState(245);
- typeDecl(0);
- setState(246);
+ setState(257);
match(T__1);
- setState(247);
+ setState(258);
+ typeDecl(0);
+ setState(259);
+ match(T__2);
+ setState(260);
expr(19);
}
break;
@@ -2125,9 +2235,9 @@ public class KickCParser extends Parser {
_localctx = new ExprPreModContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(249);
+ setState(262);
_la = _input.LA(1);
- if ( !(_la==T__23 || _la==T__24) ) {
+ if ( !(_la==T__24 || _la==T__25) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2135,7 +2245,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(250);
+ setState(263);
expr(17);
}
break;
@@ -2144,9 +2254,9 @@ public class KickCParser extends Parser {
_localctx = new ExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(251);
+ setState(264);
_la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__18) | (1L << T__21) | (1L << T__22) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29))) != 0)) ) {
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__19) | (1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2154,7 +2264,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(252);
+ setState(265);
expr(15);
}
break;
@@ -2163,7 +2273,7 @@ public class KickCParser extends Parser {
_localctx = new ExprIdContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(253);
+ setState(266);
match(NAME);
}
break;
@@ -2172,7 +2282,7 @@ public class KickCParser extends Parser {
_localctx = new ExprNumberContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(254);
+ setState(267);
match(NUMBER);
}
break;
@@ -2181,7 +2291,7 @@ public class KickCParser extends Parser {
_localctx = new ExprStringContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(255);
+ setState(268);
match(STRING);
}
break;
@@ -2190,7 +2300,7 @@ public class KickCParser extends Parser {
_localctx = new ExprCharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(256);
+ setState(269);
match(CHAR);
}
break;
@@ -2199,32 +2309,32 @@ public class KickCParser extends Parser {
_localctx = new ExprBoolContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(257);
+ setState(270);
match(BOOLEAN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(296);
+ setState(309);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(294);
+ setState(307);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(260);
+ setState(273);
if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
- setState(261);
+ setState(274);
_la = _input.LA(1);
- if ( !(_la==T__30 || _la==T__31) ) {
+ if ( !(_la==T__31 || _la==T__32) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2232,7 +2342,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(262);
+ setState(275);
expr(15);
}
break;
@@ -2240,11 +2350,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(263);
+ setState(276);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
- setState(264);
+ setState(277);
_la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__18) | (1L << T__32) | (1L << T__33))) != 0)) ) {
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__19) | (1L << T__33) | (1L << T__34))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2252,7 +2362,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(265);
+ setState(278);
expr(14);
}
break;
@@ -2260,11 +2370,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(266);
+ setState(279);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(267);
+ setState(280);
_la = _input.LA(1);
- if ( !(_la==T__25 || _la==T__26) ) {
+ if ( !(_la==T__26 || _la==T__27) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2272,7 +2382,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(268);
+ setState(281);
expr(13);
}
break;
@@ -2280,11 +2390,11 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(269);
+ setState(282);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
- setState(270);
+ setState(283);
_la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__21) | (1L << T__22) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40))) != 0)) ) {
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__22) | (1L << T__23) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2292,7 +2402,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(271);
+ setState(284);
expr(12);
}
break;
@@ -2300,13 +2410,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(272);
+ setState(285);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
{
- setState(273);
- match(T__28);
+ setState(286);
+ match(T__29);
}
- setState(274);
+ setState(287);
expr(11);
}
break;
@@ -2314,13 +2424,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(275);
+ setState(288);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
{
- setState(276);
- match(T__41);
+ setState(289);
+ match(T__42);
}
- setState(277);
+ setState(290);
expr(10);
}
break;
@@ -2328,13 +2438,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(278);
+ setState(291);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
{
- setState(279);
- match(T__42);
+ setState(292);
+ match(T__43);
}
- setState(280);
+ setState(293);
expr(9);
}
break;
@@ -2342,13 +2452,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(281);
+ setState(294);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
{
- setState(282);
- match(T__43);
+ setState(295);
+ match(T__44);
}
- setState(283);
+ setState(296);
expr(8);
}
break;
@@ -2356,13 +2466,13 @@ public class KickCParser extends Parser {
{
_localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(284);
+ setState(297);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
{
- setState(285);
- match(T__44);
+ setState(298);
+ match(T__45);
}
- setState(286);
+ setState(299);
expr(7);
}
break;
@@ -2370,25 +2480,25 @@ public class KickCParser extends Parser {
{
_localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(287);
+ setState(300);
if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
- setState(288);
- match(T__19);
- setState(289);
- expr(0);
- setState(290);
+ setState(301);
match(T__20);
+ setState(302);
+ expr(0);
+ setState(303);
+ match(T__21);
}
break;
case 11:
{
_localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(292);
+ setState(305);
if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
- setState(293);
+ setState(306);
_la = _input.LA(1);
- if ( !(_la==T__23 || _la==T__24) ) {
+ if ( !(_la==T__24 || _la==T__25) ) {
_errHandler.recoverInline(this);
}
else {
@@ -2401,9 +2511,9 @@ public class KickCParser extends Parser {
}
}
}
- setState(298);
+ setState(311);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
}
}
}
@@ -2446,26 +2556,26 @@ public class KickCParser extends Parser {
public final ParameterListContext parameterList() throws RecognitionException {
ParameterListContext _localctx = new ParameterListContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_parameterList);
+ enterRule(_localctx, 34, RULE_parameterList);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(299);
+ setState(312);
expr(0);
- setState(304);
+ setState(317);
_errHandler.sync(this);
_la = _input.LA(1);
- while (_la==T__16) {
+ while (_la==T__5) {
{
{
- setState(300);
- match(T__16);
- setState(301);
+ setState(313);
+ match(T__5);
+ setState(314);
expr(0);
}
}
- setState(306);
+ setState(319);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2510,22 +2620,22 @@ public class KickCParser extends Parser {
public final AsmLinesContext asmLines() throws RecognitionException {
AsmLinesContext _localctx = new AsmLinesContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_asmLines);
+ enterRule(_localctx, 36, RULE_asmLines);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(310);
+ setState(323);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__27) | (1L << MNEMONIC) | (1L << NAME))) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__28) | (1L << MNEMONIC) | (1L << NAME))) != 0)) {
{
{
- setState(307);
+ setState(320);
asmLine();
}
}
- setState(312);
+ setState(325);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2570,23 +2680,23 @@ public class KickCParser extends Parser {
public final AsmLineContext asmLine() throws RecognitionException {
AsmLineContext _localctx = new AsmLineContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_asmLine);
+ enterRule(_localctx, 38, RULE_asmLine);
try {
- setState(315);
+ setState(328);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__27:
+ case T__28:
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(313);
+ setState(326);
asmLabel();
}
break;
case MNEMONIC:
enterOuterAlt(_localctx, 2);
{
- setState(314);
+ setState(327);
asmInstruction();
}
break;
@@ -2628,27 +2738,27 @@ public class KickCParser extends Parser {
public final AsmLabelContext asmLabel() throws RecognitionException {
AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_asmLabel);
+ enterRule(_localctx, 40, RULE_asmLabel);
try {
- setState(321);
+ setState(334);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(317);
+ setState(330);
match(NAME);
- setState(318);
- match(T__14);
+ setState(331);
+ match(T__16);
}
break;
- case T__27:
+ case T__28:
enterOuterAlt(_localctx, 2);
{
- setState(319);
- match(T__27);
- setState(320);
- match(T__14);
+ setState(332);
+ match(T__28);
+ setState(333);
+ match(T__16);
}
break;
default:
@@ -2692,18 +2802,18 @@ public class KickCParser extends Parser {
public final AsmInstructionContext asmInstruction() throws RecognitionException {
AsmInstructionContext _localctx = new AsmInstructionContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_asmInstruction);
+ enterRule(_localctx, 42, RULE_asmInstruction);
try {
enterOuterAlt(_localctx, 1);
{
- setState(323);
+ setState(336);
match(MNEMONIC);
- setState(325);
+ setState(338);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
case 1:
{
- setState(324);
+ setState(337);
asmParamMode();
}
break;
@@ -2852,16 +2962,16 @@ public class KickCParser extends Parser {
public final AsmParamModeContext asmParamMode() throws RecognitionException {
AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_asmParamMode);
+ enterRule(_localctx, 44, RULE_asmParamMode);
try {
- setState(350);
+ setState(363);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
case 1:
_localctx = new AsmModeAbsContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(327);
+ setState(340);
asmExpr(0);
}
break;
@@ -2869,9 +2979,9 @@ public class KickCParser extends Parser {
_localctx = new AsmModeImmContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(328);
- match(T__45);
- setState(329);
+ setState(341);
+ match(T__46);
+ setState(342);
asmExpr(0);
}
break;
@@ -2879,11 +2989,11 @@ public class KickCParser extends Parser {
_localctx = new AsmModeAbsXYContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(330);
+ setState(343);
asmExpr(0);
- setState(331);
- match(T__16);
- setState(332);
+ setState(344);
+ match(T__5);
+ setState(345);
match(NAME);
}
break;
@@ -2891,15 +3001,15 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIndIdxXYContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(334);
- match(T__0);
- setState(335);
- asmExpr(0);
- setState(336);
+ setState(347);
match(T__1);
- setState(337);
- match(T__16);
- setState(338);
+ setState(348);
+ asmExpr(0);
+ setState(349);
+ match(T__2);
+ setState(350);
+ match(T__5);
+ setState(351);
match(NAME);
}
break;
@@ -2907,28 +3017,28 @@ public class KickCParser extends Parser {
_localctx = new AsmModeIdxIndXYContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(340);
- match(T__0);
- setState(341);
- asmExpr(0);
- setState(342);
- match(T__16);
- setState(343);
- match(NAME);
- setState(344);
+ setState(353);
match(T__1);
+ setState(354);
+ asmExpr(0);
+ setState(355);
+ match(T__5);
+ setState(356);
+ match(NAME);
+ setState(357);
+ match(T__2);
}
break;
case 6:
_localctx = new AsmModeIndContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(346);
- match(T__0);
- setState(347);
- asmExpr(0);
- setState(348);
+ setState(359);
match(T__1);
+ setState(360);
+ asmExpr(0);
+ setState(361);
+ match(T__2);
}
break;
}
@@ -3091,28 +3201,28 @@ public class KickCParser extends Parser {
int _parentState = getState();
AsmExprContext _localctx = new AsmExprContext(_ctx, _parentState);
AsmExprContext _prevctx = _localctx;
- int _startState = 42;
- enterRecursionRule(_localctx, 42, RULE_asmExpr, _p);
+ int _startState = 46;
+ enterRecursionRule(_localctx, 46, RULE_asmExpr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(362);
+ setState(375);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__21:
case T__22:
- case T__25:
+ case T__23:
case T__26:
+ case T__27:
{
_localctx = new AsmExprUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(353);
+ setState(366);
_la = _input.LA(1);
- if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__21) | (1L << T__22) | (1L << T__25) | (1L << T__26))) != 0)) ) {
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__22) | (1L << T__23) | (1L << T__26) | (1L << T__27))) != 0)) ) {
_errHandler.recoverInline(this);
}
else {
@@ -3120,7 +3230,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(354);
+ setState(367);
asmExpr(8);
}
break;
@@ -3129,7 +3239,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(355);
+ setState(368);
match(NAME);
}
break;
@@ -3138,21 +3248,21 @@ public class KickCParser extends Parser {
_localctx = new AsmExprLabelRelContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(356);
+ setState(369);
match(ASMREL);
}
break;
- case T__2:
+ case T__3:
{
_localctx = new AsmExprReplaceContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(357);
- match(T__2);
- setState(358);
- match(NAME);
- setState(359);
+ setState(370);
match(T__3);
+ setState(371);
+ match(NAME);
+ setState(372);
+ match(T__4);
}
break;
case NUMBER:
@@ -3160,7 +3270,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprIntContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(360);
+ setState(373);
match(NUMBER);
}
break;
@@ -3169,7 +3279,7 @@ public class KickCParser extends Parser {
_localctx = new AsmExprCharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(361);
+ setState(374);
match(CHAR);
}
break;
@@ -3177,26 +3287,26 @@ public class KickCParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(372);
+ setState(385);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,37,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,38,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(370);
+ setState(383);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(364);
+ setState(377);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(365);
+ setState(378);
_la = _input.LA(1);
- if ( !(_la==T__18 || _la==T__32) ) {
+ if ( !(_la==T__19 || _la==T__33) ) {
_errHandler.recoverInline(this);
}
else {
@@ -3204,7 +3314,7 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(366);
+ setState(379);
asmExpr(8);
}
break;
@@ -3212,11 +3322,11 @@ public class KickCParser extends Parser {
{
_localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_asmExpr);
- setState(367);
+ setState(380);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(368);
+ setState(381);
_la = _input.LA(1);
- if ( !(_la==T__25 || _la==T__26) ) {
+ if ( !(_la==T__26 || _la==T__27) ) {
_errHandler.recoverInline(this);
}
else {
@@ -3224,16 +3334,16 @@ public class KickCParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(369);
+ setState(382);
asmExpr(7);
}
break;
}
}
}
- setState(374);
+ setState(387);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,37,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,38,_ctx);
}
}
}
@@ -3250,13 +3360,13 @@ public class KickCParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 11:
- return typeDecl_sempred((TypeDeclContext)_localctx, predIndex);
case 13:
+ return typeDecl_sempred((TypeDeclContext)_localctx, predIndex);
+ case 15:
return lvalue_sempred((LvalueContext)_localctx, predIndex);
- case 14:
+ case 16:
return expr_sempred((ExprContext)_localctx, predIndex);
- case 21:
+ case 23:
return asmExpr_sempred((AsmExprContext)_localctx, predIndex);
}
return true;
@@ -3315,149 +3425,153 @@ public class KickCParser extends Parser {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3C\u017a\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3D\u0187\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\3\2\3\2\3\2\3\3\3\3"+
- "\3\3\3\4\6\4\66\n\4\r\4\16\4\67\3\5\3\5\3\5\3\5\5\5>\n\5\3\5\3\5\3\5\5"+
- "\5C\n\5\3\5\3\5\3\5\5\5H\n\5\3\6\5\6K\n\6\3\6\3\6\3\6\3\6\5\6Q\n\6\3\6"+
- "\3\6\3\7\6\7V\n\7\r\7\16\7W\3\b\3\b\3\b\5\b]\n\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\b\5\bo\n\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\b\3\b\5\b\u0082\n\b\3\b\3"+
- "\b\3\b\3\b\3\b\3\b\5\b\u008a\n\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u0092\n\b"+
- "\3\t\5\t\u0095\n\t\3\t\3\t\3\t\5\t\u009a\n\t\3\n\3\n\3\n\3\n\5\n\u00a0"+
- "\n\n\3\n\3\n\3\n\3\n\3\n\5\n\u00a7\n\n\3\13\3\13\3\13\7\13\u00ac\n\13"+
- "\f\13\16\13\u00af\13\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\5\r\u00b8\n\r\3\r"+
- "\3\r\3\r\3\r\3\r\5\r\u00bf\n\r\3\r\7\r\u00c2\n\r\f\r\16\r\u00c5\13\r\3"+
- "\16\3\16\3\16\3\16\3\16\7\16\u00cc\n\16\f\16\16\16\u00cf\13\16\3\16\3"+
- "\16\5\16\u00d3\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+
- "\3\17\5\17\u00e0\n\17\3\17\3\17\3\17\3\17\3\17\7\17\u00e7\n\17\f\17\16"+
- "\17\u00ea\13\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00f4\n\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\5\20\u0105\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\7\20\u0129\n\20\f\20"+
- "\16\20\u012c\13\20\3\21\3\21\3\21\7\21\u0131\n\21\f\21\16\21\u0134\13"+
- "\21\3\22\7\22\u0137\n\22\f\22\16\22\u013a\13\22\3\23\3\23\5\23\u013e\n"+
- "\23\3\24\3\24\3\24\3\24\5\24\u0144\n\24\3\25\3\25\5\25\u0148\n\25\3\26"+
- "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26"+
- "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u0161\n\26\3\27\3\27\3\27"+
- "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u016d\n\27\3\27\3\27\3\27\3\27"+
- "\3\27\3\27\7\27\u0175\n\27\f\27\16\27\u0178\13\27\3\27\2\6\30\34\36,\30"+
- "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,\2\13\3\2\30\31\3\2\32"+
- "\33\5\2\25\25\30\31\34 \3\2!\"\4\2\25\25#$\3\2\34\35\4\2\30\31%+\4\2\30"+
- "\31\34\35\4\2\25\25##\2\u01ac\2.\3\2\2\2\4\61\3\2\2\2\6\65\3\2\2\2\bG"+
- "\3\2\2\2\nJ\3\2\2\2\fU\3\2\2\2\16\u0091\3\2\2\2\20\u0094\3\2\2\2\22\u00a6"+
- "\3\2\2\2\24\u00a8\3\2\2\2\26\u00b0\3\2\2\2\30\u00b7\3\2\2\2\32\u00d2\3"+
- "\2\2\2\34\u00df\3\2\2\2\36\u0104\3\2\2\2 \u012d\3\2\2\2\"\u0138\3\2\2"+
- "\2$\u013d\3\2\2\2&\u0143\3\2\2\2(\u0145\3\2\2\2*\u0160\3\2\2\2,\u016c"+
- "\3\2\2\2./\5\6\4\2/\60\7\2\2\3\60\3\3\2\2\2\61\62\5\"\22\2\62\63\7\2\2"+
- "\3\63\5\3\2\2\2\64\66\5\b\5\2\65\64\3\2\2\2\66\67\3\2\2\2\67\65\3\2\2"+
- "\2\678\3\2\2\28\7\3\2\2\29:\5\30\r\2:;\7?\2\2;=\7\3\2\2<>\5\24\13\2=<"+
- "\3\2\2\2=>\3\2\2\2>?\3\2\2\2?@\7\4\2\2@B\7\5\2\2AC\5\f\7\2BA\3\2\2\2B"+
- "C\3\2\2\2CD\3\2\2\2DE\7\6\2\2EH\3\2\2\2FH\5\n\6\2G9\3\2\2\2GF\3\2\2\2"+
- "H\t\3\2\2\2IK\7\7\2\2JI\3\2\2\2JK\3\2\2\2KL\3\2\2\2LM\5\30\r\2MP\7?\2"+
- "\2NO\7\b\2\2OQ\5\32\16\2PN\3\2\2\2PQ\3\2\2\2QR\3\2\2\2RS\7\t\2\2S\13\3"+
- "\2\2\2TV\5\16\b\2UT\3\2\2\2VW\3\2\2\2WU\3\2\2\2WX\3\2\2\2X\r\3\2\2\2Y"+
- "\u0092\5\n\6\2Z\\\7\5\2\2[]\5\f\7\2\\[\3\2\2\2\\]\3\2\2\2]^\3\2\2\2^\u0092"+
- "\7\6\2\2_`\5\34\17\2`a\7\b\2\2ab\5\36\20\2bc\7\t\2\2c\u0092\3\2\2\2de"+
- "\5\36\20\2ef\7\t\2\2f\u0092\3\2\2\2gh\7\n\2\2hi\7\3\2\2ij\5\36\20\2jk"+
- "\7\4\2\2kn\5\16\b\2lm\7\13\2\2mo\5\16\b\2nl\3\2\2\2no\3\2\2\2o\u0092\3"+
- "\2\2\2pq\7\f\2\2qr\7\3\2\2rs\5\36\20\2st\7\4\2\2tu\5\16\b\2u\u0092\3\2"+
- "\2\2vw\7\r\2\2wx\5\16\b\2xy\7\f\2\2yz\7\3\2\2z{\5\36\20\2{|\7\4\2\2|}"+
- "\7\t\2\2}\u0092\3\2\2\2~\177\7\16\2\2\177\u0081\7\3\2\2\u0080\u0082\5"+
- "\20\t\2\u0081\u0080\3\2\2\2\u0081\u0082\3\2\2\2\u0082\u0083\3\2\2\2\u0083"+
- "\u0084\5\22\n\2\u0084\u0085\7\4\2\2\u0085\u0086\5\16\b\2\u0086\u0092\3"+
- "\2\2\2\u0087\u0089\7\17\2\2\u0088\u008a\5\36\20\2\u0089\u0088\3\2\2\2"+
- "\u0089\u008a\3\2\2\2\u008a\u008b\3\2\2\2\u008b\u0092\7\t\2\2\u008c\u008d"+
- "\7\20\2\2\u008d\u008e\7\5\2\2\u008e\u008f\5\"\22\2\u008f\u0090\7\6\2\2"+
- "\u0090\u0092\3\2\2\2\u0091Y\3\2\2\2\u0091Z\3\2\2\2\u0091_\3\2\2\2\u0091"+
- "d\3\2\2\2\u0091g\3\2\2\2\u0091p\3\2\2\2\u0091v\3\2\2\2\u0091~\3\2\2\2"+
- "\u0091\u0087\3\2\2\2\u0091\u008c\3\2\2\2\u0092\17\3\2\2\2\u0093\u0095"+
- "\5\30\r\2\u0094\u0093\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\3\2\2\2"+
- "\u0096\u0099\7?\2\2\u0097\u0098\7\b\2\2\u0098\u009a\5\32\16\2\u0099\u0097"+
- "\3\2\2\2\u0099\u009a\3\2\2\2\u009a\21\3\2\2\2\u009b\u009c\7\t\2\2\u009c"+
- "\u009d\5\36\20\2\u009d\u009f\7\t\2\2\u009e\u00a0\5\36\20\2\u009f\u009e"+
- "\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a7\3\2\2\2\u00a1\u00a2\7\21\2\2"+
- "\u00a2\u00a3\5\36\20\2\u00a3\u00a4\7\22\2\2\u00a4\u00a5\5\36\20\2\u00a5"+
- "\u00a7\3\2\2\2\u00a6\u009b\3\2\2\2\u00a6\u00a1\3\2\2\2\u00a7\23\3\2\2"+
- "\2\u00a8\u00ad\5\26\f\2\u00a9\u00aa\7\23\2\2\u00aa\u00ac\5\26\f\2\u00ab"+
- "\u00a9\3\2\2\2\u00ac\u00af\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae\3\2"+
- "\2\2\u00ae\25\3\2\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b1\5\30\r\2\u00b1\u00b2"+
- "\7?\2\2\u00b2\27\3\2\2\2\u00b3\u00b4\b\r\1\2\u00b4\u00b8\7\62\2\2\u00b5"+
- "\u00b6\7\24\2\2\u00b6\u00b8\7\62\2\2\u00b7\u00b3\3\2\2\2\u00b7\u00b5\3"+
- "\2\2\2\u00b8\u00c3\3\2\2\2\u00b9\u00ba\f\4\2\2\u00ba\u00c2\7\25\2\2\u00bb"+
- "\u00bc\f\3\2\2\u00bc\u00be\7\26\2\2\u00bd\u00bf\5\36\20\2\u00be\u00bd"+
- "\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c2\7\27\2\2"+
- "\u00c1\u00b9\3\2\2\2\u00c1\u00bb\3\2\2\2\u00c2\u00c5\3\2\2\2\u00c3\u00c1"+
- "\3\2\2\2\u00c3\u00c4\3\2\2\2\u00c4\31\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6"+
- "\u00d3\5\36\20\2\u00c7\u00c8\7\5\2\2\u00c8\u00cd\5\32\16\2\u00c9\u00ca"+
- "\7\23\2\2\u00ca\u00cc\5\32\16\2\u00cb\u00c9\3\2\2\2\u00cc\u00cf\3\2\2"+
- "\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\3\2\2\2\u00cf\u00cd"+
- "\3\2\2\2\u00d0\u00d1\7\6\2\2\u00d1\u00d3\3\2\2\2\u00d2\u00c6\3\2\2\2\u00d2"+
- "\u00c7\3\2\2\2\u00d3\33\3\2\2\2\u00d4\u00d5\b\17\1\2\u00d5\u00e0\7?\2"+
- "\2\u00d6\u00d7\7\25\2\2\u00d7\u00e0\7?\2\2\u00d8\u00d9\7\25\2\2\u00d9"+
- "\u00da\7\3\2\2\u00da\u00db\5\36\20\2\u00db\u00dc\7\4\2\2\u00dc\u00e0\3"+
- "\2\2\2\u00dd\u00de\t\2\2\2\u00de\u00e0\5\34\17\4\u00df\u00d4\3\2\2\2\u00df"+
- "\u00d6\3\2\2\2\u00df\u00d8\3\2\2\2\u00df\u00dd\3\2\2\2\u00e0\u00e8\3\2"+
- "\2\2\u00e1\u00e2\f\3\2\2\u00e2\u00e3\7\26\2\2\u00e3\u00e4\5\36\20\2\u00e4"+
- "\u00e5\7\27\2\2\u00e5\u00e7\3\2\2\2\u00e6\u00e1\3\2\2\2\u00e7\u00ea\3"+
- "\2\2\2\u00e8\u00e6\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\35\3\2\2\2\u00ea"+
- "\u00e8\3\2\2\2\u00eb\u00ec\b\20\1\2\u00ec\u00ed\7\3\2\2\u00ed\u00ee\5"+
- "\36\20\2\u00ee\u00ef\7\4\2\2\u00ef\u0105\3\2\2\2\u00f0\u00f1\7?\2\2\u00f1"+
- "\u00f3\7\3\2\2\u00f2\u00f4\5 \21\2\u00f3\u00f2\3\2\2\2\u00f3\u00f4\3\2"+
- "\2\2\u00f4\u00f5\3\2\2\2\u00f5\u0105\7\4\2\2\u00f6\u00f7\7\3\2\2\u00f7"+
- "\u00f8\5\30\r\2\u00f8\u00f9\7\4\2\2\u00f9\u00fa\5\36\20\25\u00fa\u0105"+
- "\3\2\2\2\u00fb\u00fc\t\3\2\2\u00fc\u0105\5\36\20\23\u00fd\u00fe\t\4\2"+
- "\2\u00fe\u0105\5\36\20\21\u00ff\u0105\7?\2\2\u0100\u0105\7\66\2\2\u0101"+
- "\u0105\7\63\2\2\u0102\u0105\7\64\2\2\u0103\u0105\7\65\2\2\u0104\u00eb"+
- "\3\2\2\2\u0104\u00f0\3\2\2\2\u0104\u00f6\3\2\2\2\u0104\u00fb\3\2\2\2\u0104"+
- "\u00fd\3\2\2\2\u0104\u00ff\3\2\2\2\u0104\u0100\3\2\2\2\u0104\u0101\3\2"+
- "\2\2\u0104\u0102\3\2\2\2\u0104\u0103\3\2\2\2\u0105\u012a\3\2\2\2\u0106"+
- "\u0107\f\20\2\2\u0107\u0108\t\5\2\2\u0108\u0129\5\36\20\21\u0109\u010a"+
- "\f\17\2\2\u010a\u010b\t\6\2\2\u010b\u0129\5\36\20\20\u010c\u010d\f\16"+
- "\2\2\u010d\u010e\t\7\2\2\u010e\u0129\5\36\20\17\u010f\u0110\f\r\2\2\u0110"+
- "\u0111\t\b\2\2\u0111\u0129\5\36\20\16\u0112\u0113\f\f\2\2\u0113\u0114"+
- "\7\37\2\2\u0114\u0129\5\36\20\r\u0115\u0116\f\13\2\2\u0116\u0117\7,\2"+
- "\2\u0117\u0129\5\36\20\f\u0118\u0119\f\n\2\2\u0119\u011a\7-\2\2\u011a"+
- "\u0129\5\36\20\13\u011b\u011c\f\t\2\2\u011c\u011d\7.\2\2\u011d\u0129\5"+
- "\36\20\n\u011e\u011f\f\b\2\2\u011f\u0120\7/\2\2\u0120\u0129\5\36\20\t"+
- "\u0121\u0122\f\24\2\2\u0122\u0123\7\26\2\2\u0123\u0124\5\36\20\2\u0124"+
- "\u0125\7\27\2\2\u0125\u0129\3\2\2\2\u0126\u0127\f\22\2\2\u0127\u0129\t"+
- "\3\2\2\u0128\u0106\3\2\2\2\u0128\u0109\3\2\2\2\u0128\u010c\3\2\2\2\u0128"+
- "\u010f\3\2\2\2\u0128\u0112\3\2\2\2\u0128\u0115\3\2\2\2\u0128\u0118\3\2"+
- "\2\2\u0128\u011b\3\2\2\2\u0128\u011e\3\2\2\2\u0128\u0121\3\2\2\2\u0128"+
- "\u0126\3\2\2\2\u0129\u012c\3\2\2\2\u012a\u0128\3\2\2\2\u012a\u012b\3\2"+
- "\2\2\u012b\37\3\2\2\2\u012c\u012a\3\2\2\2\u012d\u0132\5\36\20\2\u012e"+
- "\u012f\7\23\2\2\u012f\u0131\5\36\20\2\u0130\u012e\3\2\2\2\u0131\u0134"+
- "\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133\3\2\2\2\u0133!\3\2\2\2\u0134"+
- "\u0132\3\2\2\2\u0135\u0137\5$\23\2\u0136\u0135\3\2\2\2\u0137\u013a\3\2"+
- "\2\2\u0138\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139#\3\2\2\2\u013a\u0138"+
- "\3\2\2\2\u013b\u013e\5&\24\2\u013c\u013e\5(\25\2\u013d\u013b\3\2\2\2\u013d"+
- "\u013c\3\2\2\2\u013e%\3\2\2\2\u013f\u0140\7?\2\2\u0140\u0144\7\21\2\2"+
- "\u0141\u0142\7\36\2\2\u0142\u0144\7\21\2\2\u0143\u013f\3\2\2\2\u0143\u0141"+
- "\3\2\2\2\u0144\'\3\2\2\2\u0145\u0147\7\61\2\2\u0146\u0148\5*\26\2\u0147"+
- "\u0146\3\2\2\2\u0147\u0148\3\2\2\2\u0148)\3\2\2\2\u0149\u0161\5,\27\2"+
- "\u014a\u014b\7\60\2\2\u014b\u0161\5,\27\2\u014c\u014d\5,\27\2\u014d\u014e"+
- "\7\23\2\2\u014e\u014f\7?\2\2\u014f\u0161\3\2\2\2\u0150\u0151\7\3\2\2\u0151"+
- "\u0152\5,\27\2\u0152\u0153\7\4\2\2\u0153\u0154\7\23\2\2\u0154\u0155\7"+
- "?\2\2\u0155\u0161\3\2\2\2\u0156\u0157\7\3\2\2\u0157\u0158\5,\27\2\u0158"+
- "\u0159\7\23\2\2\u0159\u015a\7?\2\2\u015a\u015b\7\4\2\2\u015b\u0161\3\2"+
- "\2\2\u015c\u015d\7\3\2\2\u015d\u015e\5,\27\2\u015e\u015f\7\4\2\2\u015f"+
- "\u0161\3\2\2\2\u0160\u0149\3\2\2\2\u0160\u014a\3\2\2\2\u0160\u014c\3\2"+
- "\2\2\u0160\u0150\3\2\2\2\u0160\u0156\3\2\2\2\u0160\u015c\3\2\2\2\u0161"+
- "+\3\2\2\2\u0162\u0163\b\27\1\2\u0163\u0164\t\t\2\2\u0164\u016d\5,\27\n"+
- "\u0165\u016d\7?\2\2\u0166\u016d\7@\2\2\u0167\u0168\7\5\2\2\u0168\u0169"+
- "\7?\2\2\u0169\u016d\7\6\2\2\u016a\u016d\7\66\2\2\u016b\u016d\7\64\2\2"+
- "\u016c\u0162\3\2\2\2\u016c\u0165\3\2\2\2\u016c\u0166\3\2\2\2\u016c\u0167"+
- "\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016b\3\2\2\2\u016d\u0176\3\2\2\2\u016e"+
- "\u016f\f\t\2\2\u016f\u0170\t\n\2\2\u0170\u0175\5,\27\n\u0171\u0172\f\b"+
- "\2\2\u0172\u0173\t\7\2\2\u0173\u0175\5,\27\t\u0174\u016e\3\2\2\2\u0174"+
- "\u0171\3\2\2\2\u0175\u0178\3\2\2\2\u0176\u0174\3\2\2\2\u0176\u0177\3\2"+
- "\2\2\u0177-\3\2\2\2\u0178\u0176\3\2\2\2(\67=BGJPW\\n\u0081\u0089\u0091"+
- "\u0094\u0099\u009f\u00a6\u00ad\u00b7\u00be\u00c1\u00c3\u00cd\u00d2\u00df"+
- "\u00e8\u00f3\u0104\u0128\u012a\u0132\u0138\u013d\u0143\u0147\u0160\u016c"+
- "\u0174\u0176";
+ "\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"+
+ "\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\4\6\4;\n\4\r\4\16\4<\3\5\3\5\3\5\3\6\6"+
+ "\6C\n\6\r\6\16\6D\3\7\3\7\3\7\3\7\5\7K\n\7\3\7\3\7\3\7\5\7P\n\7\3\7\3"+
+ "\7\3\7\5\7U\n\7\3\b\3\b\3\b\7\bZ\n\b\f\b\16\b]\13\b\3\t\3\t\3\t\3\n\5"+
+ "\nc\n\n\3\n\3\n\3\n\3\n\5\ni\n\n\3\n\3\n\3\13\6\13n\n\13\r\13\16\13o\3"+
+ "\f\3\f\3\f\5\fu\n\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\5\f\u0087\n\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\5\f\u009a\n\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u00a2"+
+ "\n\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u00aa\n\f\3\r\5\r\u00ad\n\r\3\r\3\r\3"+
+ "\r\5\r\u00b2\n\r\3\16\3\16\3\16\3\16\5\16\u00b8\n\16\3\16\3\16\3\16\3"+
+ "\16\3\16\5\16\u00bf\n\16\3\17\3\17\3\17\3\17\5\17\u00c5\n\17\3\17\3\17"+
+ "\3\17\3\17\3\17\5\17\u00cc\n\17\3\17\7\17\u00cf\n\17\f\17\16\17\u00d2"+
+ "\13\17\3\20\3\20\3\20\3\20\3\20\7\20\u00d9\n\20\f\20\16\20\u00dc\13\20"+
+ "\3\20\3\20\5\20\u00e0\n\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+
+ "\3\21\3\21\5\21\u00ed\n\21\3\21\3\21\3\21\3\21\3\21\7\21\u00f4\n\21\f"+
+ "\21\16\21\u00f7\13\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0101"+
+ "\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+
+ "\3\22\3\22\5\22\u0112\n\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+
+ "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+
+ "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u0136\n\22"+
+ "\f\22\16\22\u0139\13\22\3\23\3\23\3\23\7\23\u013e\n\23\f\23\16\23\u0141"+
+ "\13\23\3\24\7\24\u0144\n\24\f\24\16\24\u0147\13\24\3\25\3\25\5\25\u014b"+
+ "\n\25\3\26\3\26\3\26\3\26\5\26\u0151\n\26\3\27\3\27\5\27\u0155\n\27\3"+
+ "\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3"+
+ "\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u016e\n\30\3\31\3\31"+
+ "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u017a\n\31\3\31\3\31\3\31"+
+ "\3\31\3\31\3\31\7\31\u0182\n\31\f\31\16\31\u0185\13\31\3\31\2\6\34 \""+
+ "\60\32\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\2\13\3\2\31"+
+ "\32\3\2\33\34\5\2\26\26\31\32\35!\3\2\"#\4\2\26\26$%\3\2\35\36\4\2\31"+
+ "\32&,\4\2\31\32\35\36\4\2\26\26$$\2\u01b8\2\62\3\2\2\2\4\66\3\2\2\2\6"+
+ ":\3\2\2\2\b>\3\2\2\2\nB\3\2\2\2\fT\3\2\2\2\16V\3\2\2\2\20^\3\2\2\2\22"+
+ "b\3\2\2\2\24m\3\2\2\2\26\u00a9\3\2\2\2\30\u00ac\3\2\2\2\32\u00be\3\2\2"+
+ "\2\34\u00c4\3\2\2\2\36\u00df\3\2\2\2 \u00ec\3\2\2\2\"\u0111\3\2\2\2$\u013a"+
+ "\3\2\2\2&\u0145\3\2\2\2(\u014a\3\2\2\2*\u0150\3\2\2\2,\u0152\3\2\2\2."+
+ "\u016d\3\2\2\2\60\u0179\3\2\2\2\62\63\5\6\4\2\63\64\5\n\6\2\64\65\7\2"+
+ "\2\3\65\3\3\2\2\2\66\67\5&\24\2\678\7\2\2\38\5\3\2\2\29;\5\b\5\2:9\3\2"+
+ "\2\2;<\3\2\2\2<:\3\2\2\2<=\3\2\2\2=\7\3\2\2\2>?\7\3\2\2?@\7\64\2\2@\t"+
+ "\3\2\2\2AC\5\f\7\2BA\3\2\2\2CD\3\2\2\2DB\3\2\2\2DE\3\2\2\2E\13\3\2\2\2"+
+ "FG\5\34\17\2GH\7@\2\2HJ\7\4\2\2IK\5\16\b\2JI\3\2\2\2JK\3\2\2\2KL\3\2\2"+
+ "\2LM\7\5\2\2MO\7\6\2\2NP\5\24\13\2ON\3\2\2\2OP\3\2\2\2PQ\3\2\2\2QR\7\7"+
+ "\2\2RU\3\2\2\2SU\5\22\n\2TF\3\2\2\2TS\3\2\2\2U\r\3\2\2\2V[\5\20\t\2WX"+
+ "\7\b\2\2XZ\5\20\t\2YW\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3\2\2\2\\\17\3\2"+
+ "\2\2][\3\2\2\2^_\5\34\17\2_`\7@\2\2`\21\3\2\2\2ac\7\t\2\2ba\3\2\2\2bc"+
+ "\3\2\2\2cd\3\2\2\2de\5\34\17\2eh\7@\2\2fg\7\n\2\2gi\5\36\20\2hf\3\2\2"+
+ "\2hi\3\2\2\2ij\3\2\2\2jk\7\13\2\2k\23\3\2\2\2ln\5\26\f\2ml\3\2\2\2no\3"+
+ "\2\2\2om\3\2\2\2op\3\2\2\2p\25\3\2\2\2q\u00aa\5\22\n\2rt\7\6\2\2su\5\24"+
+ "\13\2ts\3\2\2\2tu\3\2\2\2uv\3\2\2\2v\u00aa\7\7\2\2wx\5 \21\2xy\7\n\2\2"+
+ "yz\5\"\22\2z{\7\13\2\2{\u00aa\3\2\2\2|}\5\"\22\2}~\7\13\2\2~\u00aa\3\2"+
+ "\2\2\177\u0080\7\f\2\2\u0080\u0081\7\4\2\2\u0081\u0082\5\"\22\2\u0082"+
+ "\u0083\7\5\2\2\u0083\u0086\5\26\f\2\u0084\u0085\7\r\2\2\u0085\u0087\5"+
+ "\26\f\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u00aa\3\2\2\2\u0088"+
+ "\u0089\7\16\2\2\u0089\u008a\7\4\2\2\u008a\u008b\5\"\22\2\u008b\u008c\7"+
+ "\5\2\2\u008c\u008d\5\26\f\2\u008d\u00aa\3\2\2\2\u008e\u008f\7\17\2\2\u008f"+
+ "\u0090\5\26\f\2\u0090\u0091\7\16\2\2\u0091\u0092\7\4\2\2\u0092\u0093\5"+
+ "\"\22\2\u0093\u0094\7\5\2\2\u0094\u0095\7\13\2\2\u0095\u00aa\3\2\2\2\u0096"+
+ "\u0097\7\20\2\2\u0097\u0099\7\4\2\2\u0098\u009a\5\30\r\2\u0099\u0098\3"+
+ "\2\2\2\u0099\u009a\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c\5\32\16\2\u009c"+
+ "\u009d\7\5\2\2\u009d\u009e\5\26\f\2\u009e\u00aa\3\2\2\2\u009f\u00a1\7"+
+ "\21\2\2\u00a0\u00a2\5\"\22\2\u00a1\u00a0\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2"+
+ "\u00a3\3\2\2\2\u00a3\u00aa\7\13\2\2\u00a4\u00a5\7\22\2\2\u00a5\u00a6\7"+
+ "\6\2\2\u00a6\u00a7\5&\24\2\u00a7\u00a8\7\7\2\2\u00a8\u00aa\3\2\2\2\u00a9"+
+ "q\3\2\2\2\u00a9r\3\2\2\2\u00a9w\3\2\2\2\u00a9|\3\2\2\2\u00a9\177\3\2\2"+
+ "\2\u00a9\u0088\3\2\2\2\u00a9\u008e\3\2\2\2\u00a9\u0096\3\2\2\2\u00a9\u009f"+
+ "\3\2\2\2\u00a9\u00a4\3\2\2\2\u00aa\27\3\2\2\2\u00ab\u00ad\5\34\17\2\u00ac"+
+ "\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\u00b1\7@"+
+ "\2\2\u00af\u00b0\7\n\2\2\u00b0\u00b2\5\36\20\2\u00b1\u00af\3\2\2\2\u00b1"+
+ "\u00b2\3\2\2\2\u00b2\31\3\2\2\2\u00b3\u00b4\7\13\2\2\u00b4\u00b5\5\"\22"+
+ "\2\u00b5\u00b7\7\13\2\2\u00b6\u00b8\5\"\22\2\u00b7\u00b6\3\2\2\2\u00b7"+
+ "\u00b8\3\2\2\2\u00b8\u00bf\3\2\2\2\u00b9\u00ba\7\23\2\2\u00ba\u00bb\5"+
+ "\"\22\2\u00bb\u00bc\7\24\2\2\u00bc\u00bd\5\"\22\2\u00bd\u00bf\3\2\2\2"+
+ "\u00be\u00b3\3\2\2\2\u00be\u00b9\3\2\2\2\u00bf\33\3\2\2\2\u00c0\u00c1"+
+ "\b\17\1\2\u00c1\u00c5\7\63\2\2\u00c2\u00c3\7\25\2\2\u00c3\u00c5\7\63\2"+
+ "\2\u00c4\u00c0\3\2\2\2\u00c4\u00c2\3\2\2\2\u00c5\u00d0\3\2\2\2\u00c6\u00c7"+
+ "\f\4\2\2\u00c7\u00cf\7\26\2\2\u00c8\u00c9\f\3\2\2\u00c9\u00cb\7\27\2\2"+
+ "\u00ca\u00cc\5\"\22\2\u00cb\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd"+
+ "\3\2\2\2\u00cd\u00cf\7\30\2\2\u00ce\u00c6\3\2\2\2\u00ce\u00c8\3\2\2\2"+
+ "\u00cf\u00d2\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1\35"+
+ "\3\2\2\2\u00d2\u00d0\3\2\2\2\u00d3\u00e0\5\"\22\2\u00d4\u00d5\7\6\2\2"+
+ "\u00d5\u00da\5\36\20\2\u00d6\u00d7\7\b\2\2\u00d7\u00d9\5\36\20\2\u00d8"+
+ "\u00d6\3\2\2\2\u00d9\u00dc\3\2\2\2\u00da\u00d8\3\2\2\2\u00da\u00db\3\2"+
+ "\2\2\u00db\u00dd\3\2\2\2\u00dc\u00da\3\2\2\2\u00dd\u00de\7\7\2\2\u00de"+
+ "\u00e0\3\2\2\2\u00df\u00d3\3\2\2\2\u00df\u00d4\3\2\2\2\u00e0\37\3\2\2"+
+ "\2\u00e1\u00e2\b\21\1\2\u00e2\u00ed\7@\2\2\u00e3\u00e4\7\26\2\2\u00e4"+
+ "\u00ed\7@\2\2\u00e5\u00e6\7\26\2\2\u00e6\u00e7\7\4\2\2\u00e7\u00e8\5\""+
+ "\22\2\u00e8\u00e9\7\5\2\2\u00e9\u00ed\3\2\2\2\u00ea\u00eb\t\2\2\2\u00eb"+
+ "\u00ed\5 \21\4\u00ec\u00e1\3\2\2\2\u00ec\u00e3\3\2\2\2\u00ec\u00e5\3\2"+
+ "\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00f5\3\2\2\2\u00ee\u00ef\f\3\2\2\u00ef"+
+ "\u00f0\7\27\2\2\u00f0\u00f1\5\"\22\2\u00f1\u00f2\7\30\2\2\u00f2\u00f4"+
+ "\3\2\2\2\u00f3\u00ee\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5"+
+ "\u00f6\3\2\2\2\u00f6!\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f8\u00f9\b\22\1\2"+
+ "\u00f9\u00fa\7\4\2\2\u00fa\u00fb\5\"\22\2\u00fb\u00fc\7\5\2\2\u00fc\u0112"+
+ "\3\2\2\2\u00fd\u00fe\7@\2\2\u00fe\u0100\7\4\2\2\u00ff\u0101\5$\23\2\u0100"+
+ "\u00ff\3\2\2\2\u0100\u0101\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0112\7\5"+
+ "\2\2\u0103\u0104\7\4\2\2\u0104\u0105\5\34\17\2\u0105\u0106\7\5\2\2\u0106"+
+ "\u0107\5\"\22\25\u0107\u0112\3\2\2\2\u0108\u0109\t\3\2\2\u0109\u0112\5"+
+ "\"\22\23\u010a\u010b\t\4\2\2\u010b\u0112\5\"\22\21\u010c\u0112\7@\2\2"+
+ "\u010d\u0112\7\67\2\2\u010e\u0112\7\64\2\2\u010f\u0112\7\65\2\2\u0110"+
+ "\u0112\7\66\2\2\u0111\u00f8\3\2\2\2\u0111\u00fd\3\2\2\2\u0111\u0103\3"+
+ "\2\2\2\u0111\u0108\3\2\2\2\u0111\u010a\3\2\2\2\u0111\u010c\3\2\2\2\u0111"+
+ "\u010d\3\2\2\2\u0111\u010e\3\2\2\2\u0111\u010f\3\2\2\2\u0111\u0110\3\2"+
+ "\2\2\u0112\u0137\3\2\2\2\u0113\u0114\f\20\2\2\u0114\u0115\t\5\2\2\u0115"+
+ "\u0136\5\"\22\21\u0116\u0117\f\17\2\2\u0117\u0118\t\6\2\2\u0118\u0136"+
+ "\5\"\22\20\u0119\u011a\f\16\2\2\u011a\u011b\t\7\2\2\u011b\u0136\5\"\22"+
+ "\17\u011c\u011d\f\r\2\2\u011d\u011e\t\b\2\2\u011e\u0136\5\"\22\16\u011f"+
+ "\u0120\f\f\2\2\u0120\u0121\7 \2\2\u0121\u0136\5\"\22\r\u0122\u0123\f\13"+
+ "\2\2\u0123\u0124\7-\2\2\u0124\u0136\5\"\22\f\u0125\u0126\f\n\2\2\u0126"+
+ "\u0127\7.\2\2\u0127\u0136\5\"\22\13\u0128\u0129\f\t\2\2\u0129\u012a\7"+
+ "/\2\2\u012a\u0136\5\"\22\n\u012b\u012c\f\b\2\2\u012c\u012d\7\60\2\2\u012d"+
+ "\u0136\5\"\22\t\u012e\u012f\f\24\2\2\u012f\u0130\7\27\2\2\u0130\u0131"+
+ "\5\"\22\2\u0131\u0132\7\30\2\2\u0132\u0136\3\2\2\2\u0133\u0134\f\22\2"+
+ "\2\u0134\u0136\t\3\2\2\u0135\u0113\3\2\2\2\u0135\u0116\3\2\2\2\u0135\u0119"+
+ "\3\2\2\2\u0135\u011c\3\2\2\2\u0135\u011f\3\2\2\2\u0135\u0122\3\2\2\2\u0135"+
+ "\u0125\3\2\2\2\u0135\u0128\3\2\2\2\u0135\u012b\3\2\2\2\u0135\u012e\3\2"+
+ "\2\2\u0135\u0133\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137"+
+ "\u0138\3\2\2\2\u0138#\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u013f\5\"\22\2"+
+ "\u013b\u013c\7\b\2\2\u013c\u013e\5\"\22\2\u013d\u013b\3\2\2\2\u013e\u0141"+
+ "\3\2\2\2\u013f\u013d\3\2\2\2\u013f\u0140\3\2\2\2\u0140%\3\2\2\2\u0141"+
+ "\u013f\3\2\2\2\u0142\u0144\5(\25\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\u014b\5*\26\2\u0149\u014b\5,\27\2\u014a\u0148\3\2\2\2\u014a"+
+ "\u0149\3\2\2\2\u014b)\3\2\2\2\u014c\u014d\7@\2\2\u014d\u0151\7\23\2\2"+
+ "\u014e\u014f\7\37\2\2\u014f\u0151\7\23\2\2\u0150\u014c\3\2\2\2\u0150\u014e"+
+ "\3\2\2\2\u0151+\3\2\2\2\u0152\u0154\7\62\2\2\u0153\u0155\5.\30\2\u0154"+
+ "\u0153\3\2\2\2\u0154\u0155\3\2\2\2\u0155-\3\2\2\2\u0156\u016e\5\60\31"+
+ "\2\u0157\u0158\7\61\2\2\u0158\u016e\5\60\31\2\u0159\u015a\5\60\31\2\u015a"+
+ "\u015b\7\b\2\2\u015b\u015c\7@\2\2\u015c\u016e\3\2\2\2\u015d\u015e\7\4"+
+ "\2\2\u015e\u015f\5\60\31\2\u015f\u0160\7\5\2\2\u0160\u0161\7\b\2\2\u0161"+
+ "\u0162\7@\2\2\u0162\u016e\3\2\2\2\u0163\u0164\7\4\2\2\u0164\u0165\5\60"+
+ "\31\2\u0165\u0166\7\b\2\2\u0166\u0167\7@\2\2\u0167\u0168\7\5\2\2\u0168"+
+ "\u016e\3\2\2\2\u0169\u016a\7\4\2\2\u016a\u016b\5\60\31\2\u016b\u016c\7"+
+ "\5\2\2\u016c\u016e\3\2\2\2\u016d\u0156\3\2\2\2\u016d\u0157\3\2\2\2\u016d"+
+ "\u0159\3\2\2\2\u016d\u015d\3\2\2\2\u016d\u0163\3\2\2\2\u016d\u0169\3\2"+
+ "\2\2\u016e/\3\2\2\2\u016f\u0170\b\31\1\2\u0170\u0171\t\t\2\2\u0171\u017a"+
+ "\5\60\31\n\u0172\u017a\7@\2\2\u0173\u017a\7A\2\2\u0174\u0175\7\6\2\2\u0175"+
+ "\u0176\7@\2\2\u0176\u017a\7\7\2\2\u0177\u017a\7\67\2\2\u0178\u017a\7\65"+
+ "\2\2\u0179\u016f\3\2\2\2\u0179\u0172\3\2\2\2\u0179\u0173\3\2\2\2\u0179"+
+ "\u0174\3\2\2\2\u0179\u0177\3\2\2\2\u0179\u0178\3\2\2\2\u017a\u0183\3\2"+
+ "\2\2\u017b\u017c\f\t\2\2\u017c\u017d\t\n\2\2\u017d\u0182\5\60\31\n\u017e"+
+ "\u017f\f\b\2\2\u017f\u0180\t\7\2\2\u0180\u0182\5\60\31\t\u0181\u017b\3"+
+ "\2\2\2\u0181\u017e\3\2\2\2\u0182\u0185\3\2\2\2\u0183\u0181\3\2\2\2\u0183"+
+ "\u0184\3\2\2\2\u0184\61\3\2\2\2\u0185\u0183\3\2\2\2) extends ParseTreeVisitor {
* @return the visitor result
*/
T visitAsmFile(KickCParser.AsmFileContext ctx);
+ /**
+ * Visit a parse tree produced by {@link KickCParser#importSeq}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitImportSeq(KickCParser.ImportSeqContext ctx);
+ /**
+ * Visit a parse tree produced by {@link KickCParser#importDecl}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitImportDecl(KickCParser.ImportDeclContext ctx);
/**
* Visit a parse tree produced by {@link KickCParser#declSeq}.
* @param ctx the parse tree
@@ -42,6 +54,18 @@ public interface KickCVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitDeclVariable(KickCParser.DeclVariableContext ctx);
+ /**
+ * Visit a parse tree produced by {@link KickCParser#parameterListDecl}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitParameterListDecl(KickCParser.ParameterListDeclContext ctx);
+ /**
+ * Visit a parse tree produced by {@link KickCParser#parameterDecl}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitParameterDecl(KickCParser.ParameterDeclContext ctx);
/**
* Visit a parse tree produced by {@link KickCParser#declVar}.
* @param ctx the parse tree
@@ -145,18 +169,6 @@ public interface KickCVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitForRange(KickCParser.ForRangeContext ctx);
- /**
- * Visit a parse tree produced by {@link KickCParser#parameterListDecl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitParameterListDecl(KickCParser.ParameterListDeclContext ctx);
- /**
- * Visit a parse tree produced by {@link KickCParser#parameterDecl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitParameterDecl(KickCParser.ParameterDeclContext ctx);
/**
* Visit a parse tree produced by the {@code typePtr}
* labeled alternative in {@link KickCParser#typeDecl}.
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java
index 423e97042..5c28b573b 100644
--- a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java
+++ b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java
@@ -52,10 +52,27 @@ public class Pass1GenerateStatementSequence extends KickCBaseVisitor