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 visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)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 { @Override public Void visitFile(KickCParser.FileContext ctx) { + this.visit(ctx.importSeq()); this.visit(ctx.declSeq()); return null; } + @Override + public Object visitImportSeq(KickCParser.ImportSeqContext ctx) { + for (KickCParser.ImportDeclContext importDeclContext : ctx.importDecl()) { + this.visit(importDeclContext); + } + return null; + } + + @Override + public Object visitImportDecl(KickCParser.ImportDeclContext ctx) { + String importName = ctx.STRING().getText(); + program.getLog().append("Importing "+importName.substring(1, importName.length() - 1)); + throw new RuntimeException("TODO: Implement importing!"); + //return null; + } + @Override public Object visitDeclSeq(KickCParser.DeclSeqContext ctx) { for (KickCParser.DeclContext declContext : ctx.decl()) { diff --git a/src/main/java/dk/camelot64/kickc/test/TestPrograms.java b/src/main/java/dk/camelot64/kickc/test/TestPrograms.java index d11999045..b84ec5542 100644 --- a/src/main/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/main/java/dk/camelot64/kickc/test/TestPrograms.java @@ -24,6 +24,10 @@ public class TestPrograms extends TestCase { helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/"); } + public void testImporting() throws IOException, URISyntaxException { + compileAndCompare("importing"); + } + public void testUnusedVars() throws IOException, URISyntaxException { compileAndCompare("unused-vars"); } diff --git a/src/main/java/dk/camelot64/kickc/test/imported.kc b/src/main/java/dk/camelot64/kickc/test/imported.kc new file mode 100644 index 000000000..a3bde0ea6 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/imported.kc @@ -0,0 +1,2 @@ +const byte *BGCOL = $d021; +const byte RED = 2; diff --git a/src/main/java/dk/camelot64/kickc/test/importing.kc b/src/main/java/dk/camelot64/kickc/test/importing.kc new file mode 100644 index 000000000..01483a237 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/importing.kc @@ -0,0 +1,7 @@ +import "imported.kc" + +void main() { + byte* screen = $0400; + *screen = 1; + *BGCOL = RED; +} \ No newline at end of file