From 6a012a3fd019cb6ec61d4e6585e48b8a2fed54bc Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 30 Jan 2018 10:04:35 +0100 Subject: [PATCH] Added register keyword --- .../java/dk/camelot64/kickc/parser/KickC.g4 | 5 +- .../dk/camelot64/kickc/parser/KickC.tokens | 118 +- .../kickc/parser/KickCBaseListener.java | 12 + .../kickc/parser/KickCBaseVisitor.java | 7 + .../dk/camelot64/kickc/parser/KickCLexer.java | 565 ++++----- .../camelot64/kickc/parser/KickCLexer.tokens | 118 +- .../camelot64/kickc/parser/KickCListener.java | 12 + .../camelot64/kickc/parser/KickCParser.java | 1013 +++++++++-------- .../camelot64/kickc/parser/KickCVisitor.java | 7 + .../dk/camelot64/kickc/test/TestPrograms.java | 5 + .../camelot64/kickc/test/kc/var-register.kc | 16 + 11 files changed, 1004 insertions(+), 874 deletions(-) create mode 100644 src/test/java/dk/camelot64/kickc/test/kc/var-register.kc diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 index f8cd25c79..b2d628c89 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 @@ -30,7 +30,7 @@ parameterListDecl : parameterDecl (',' parameterDecl)* ; parameterDecl - : typeDecl NAME ; + : directives? typeDecl NAME ; declVar : directives? typeDecl directives? NAME ('=' expr)? ';' @@ -43,6 +43,7 @@ directives directive : 'const' #directiveConst | 'align' '(' NUMBER ')' #directiveAlign + | 'register' '(' NAME ')' #directiveRegister ; stmtSeq @@ -62,7 +63,7 @@ stmt ; forDeclaration - : typeDecl? NAME ('=' expr)? #forDecl + : directives? typeDecl? NAME ('=' expr)? #forDecl ; forIteration diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens index 33a7fd43f..e315b1de1 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens @@ -47,25 +47,26 @@ T__45=46 T__46=47 T__47=48 T__48=49 -MNEMONIC=50 -SIMPLETYPE=51 -STRING=52 -CHAR=53 -BOOLEAN=54 -NUMBER=55 -NUMFLOAT=56 -BINFLOAT=57 -DECFLOAT=58 -HEXFLOAT=59 -NUMINT=60 -BININTEGER=61 -DECINTEGER=62 -HEXINTEGER=63 -NAME=64 -ASMREL=65 -WS=66 -COMMENT_LINE=67 -COMMENT_BLOCK=68 +T__49=50 +MNEMONIC=51 +SIMPLETYPE=52 +STRING=53 +CHAR=54 +BOOLEAN=55 +NUMBER=56 +NUMFLOAT=57 +BINFLOAT=58 +DECFLOAT=59 +HEXFLOAT=60 +NUMINT=61 +BININTEGER=62 +DECINTEGER=63 +HEXINTEGER=64 +NAME=65 +ASMREL=66 +WS=67 +COMMENT_LINE=68 +COMMENT_BLOCK=69 'import'=1 '('=2 ')'=3 @@ -76,42 +77,43 @@ COMMENT_BLOCK=68 ';'=8 'const'=9 'align'=10 -'if'=11 -'else'=12 -'while'=13 -'do'=14 -'for'=15 -'return'=16 -'asm'=17 -':'=18 -'..'=19 -'signed'=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 -'.byte'=48 -'#'=49 +'register'=11 +'if'=12 +'else'=13 +'while'=14 +'do'=15 +'for'=16 +'return'=17 +'asm'=18 +':'=19 +'..'=20 +'signed'=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 +'||'=48 +'.byte'=49 +'#'=50 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java index 00634b15b..75415edd1 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java @@ -167,6 +167,18 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitDirectiveAlign(KickCParser.DirectiveAlignContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectiveRegister(KickCParser.DirectiveRegisterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectiveRegister(KickCParser.DirectiveRegisterContext 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 d19739e0f..88b44e874 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java @@ -102,6 +102,13 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDirectiveAlign(KickCParser.DirectiveAlignContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectiveRegister(KickCParser.DirectiveRegisterContext 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 4e19b4d82..d3723a3d2 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, T__46=47, T__47=48, T__48=49, MNEMONIC=50, SIMPLETYPE=51, STRING=52, - CHAR=53, BOOLEAN=54, NUMBER=55, NUMFLOAT=56, BINFLOAT=57, DECFLOAT=58, - HEXFLOAT=59, NUMINT=60, BININTEGER=61, DECINTEGER=62, HEXINTEGER=63, NAME=64, - ASMREL=65, WS=66, COMMENT_LINE=67, COMMENT_BLOCK=68; + T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, MNEMONIC=51, SIMPLETYPE=52, + STRING=53, CHAR=54, BOOLEAN=55, NUMBER=56, NUMFLOAT=57, BINFLOAT=58, DECFLOAT=59, + HEXFLOAT=60, NUMINT=61, BININTEGER=62, DECINTEGER=63, HEXINTEGER=64, NAME=65, + ASMREL=66, WS=67, COMMENT_LINE=68, COMMENT_BLOCK=69; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -42,27 +42,27 @@ public class KickCLexer extends Lexer { "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", "T__46", "T__47", "T__48", - "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", - "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", - "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", - "NAME_CHAR", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + "T__49", "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", + "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", + "DECINTEGER", "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", + "NAME_START", "NAME_CHAR", "ASMREL", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; private static final String[] _LITERAL_NAMES = { null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'='", "';'", "'const'", - "'align'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", - "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", - "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", - "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'", - "'&&'", "'||'", "'.byte'", "'#'" + "'align'", "'register'", "'if'", "'else'", "'while'", "'do'", "'for'", + "'return'", "'asm'", "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", + "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", + "'<'", "'>'", "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", + "'^'", "'|'", "'&&'", "'||'", "'.byte'", "'#'" }; 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, null, - null, null, "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", - "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", + 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\2F\u02dd\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2G\u02e8\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"+ @@ -132,272 +132,275 @@ public class KickCLexer extends Lexer { ",\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\4H\tH\4I"+ - "\tI\4J\tJ\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\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3"+ - "\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16"+ - "\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\22\3\22\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25"+ - "\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\60\3\60\3\60\3\61\3\61\3"+ - "\61\3\61\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3"+ - "\63\3\63\3\63\3\63\5\63\u020c\n\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\tI\4J\tJ\4K\tK\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\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13"+ + "\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3"+ + "\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\21\3"+ + "\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3"+ + "\24\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\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\60\3\60\3\60\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62"+ + "\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ - "\3\64\3\64\3\64\5\64\u0226\n\64\3\65\3\65\3\65\3\65\7\65\u022c\n\65\f"+ - "\65\16\65\u022f\13\65\3\65\3\65\3\66\3\66\3\66\3\66\5\66\u0237\n\66\3"+ - "\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\5\67\u0244\n\67"+ - "\38\38\58\u0248\n8\39\39\39\59\u024d\n9\3:\3:\3:\3:\3:\5:\u0254\n:\3:"+ - "\7:\u0257\n:\f:\16:\u025a\13:\3:\3:\6:\u025e\n:\r:\16:\u025f\3;\7;\u0263"+ - "\n;\f;\16;\u0266\13;\3;\3;\6;\u026a\n;\r;\16;\u026b\3<\3<\3<\3<\3<\5<"+ - "\u0273\n<\3<\7<\u0276\n<\f<\16<\u0279\13<\3<\3<\6<\u027d\n<\r<\16<\u027e"+ - "\3=\3=\3=\5=\u0284\n=\3>\3>\3>\6>\u0289\n>\r>\16>\u028a\3>\3>\6>\u028f"+ - "\n>\r>\16>\u0290\5>\u0293\n>\3?\6?\u0296\n?\r?\16?\u0297\3@\3@\3@\3@\3"+ - "@\5@\u029f\n@\3@\6@\u02a2\n@\r@\16@\u02a3\3A\3A\3B\3B\3C\3C\3D\3D\7D\u02ae"+ - "\nD\fD\16D\u02b1\13D\3E\3E\3F\3F\3G\3G\7G\u02b9\nG\fG\16G\u02bc\13G\3"+ - "H\6H\u02bf\nH\rH\16H\u02c0\3H\3H\3I\3I\3I\3I\7I\u02c9\nI\fI\16I\u02cc"+ - "\13I\3I\3I\3J\3J\3J\3J\7J\u02d4\nJ\fJ\16J\u02d7\13J\3J\3J\3J\3J\3J\3\u02d5"+ - "\2K\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\67"+ - "m8o9q:s;u{?}@\177A\u0081\2\u0083\2\u0085\2\u0087B\u0089\2\u008b\2"+ - "\u008dC\u008fD\u0091E\u0093F\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\u0343\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{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0087\3\2\2\2\2"+ - "\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\3\u0095"+ - "\3\2\2\2\5\u009c\3\2\2\2\7\u009e\3\2\2\2\t\u00a0\3\2\2\2\13\u00a2\3\2"+ - "\2\2\r\u00a4\3\2\2\2\17\u00a6\3\2\2\2\21\u00a8\3\2\2\2\23\u00aa\3\2\2"+ - "\2\25\u00b0\3\2\2\2\27\u00b6\3\2\2\2\31\u00b9\3\2\2\2\33\u00be\3\2\2\2"+ - "\35\u00c4\3\2\2\2\37\u00c7\3\2\2\2!\u00cb\3\2\2\2#\u00d2\3\2\2\2%\u00d6"+ - "\3\2\2\2\'\u00d8\3\2\2\2)\u00db\3\2\2\2+\u00e2\3\2\2\2-\u00e4\3\2\2\2"+ - "/\u00e6\3\2\2\2\61\u00e8\3\2\2\2\63\u00eb\3\2\2\2\65\u00ee\3\2\2\2\67"+ - "\u00f0\3\2\2\29\u00f2\3\2\2\2;\u00f4\3\2\2\2=\u00f6\3\2\2\2?\u00f8\3\2"+ - "\2\2A\u00fb\3\2\2\2C\u00fe\3\2\2\2E\u0100\3\2\2\2G\u0102\3\2\2\2I\u0104"+ - "\3\2\2\2K\u0106\3\2\2\2M\u0109\3\2\2\2O\u010c\3\2\2\2Q\u010f\3\2\2\2S"+ - "\u0112\3\2\2\2U\u0115\3\2\2\2W\u0118\3\2\2\2Y\u011b\3\2\2\2[\u011d\3\2"+ - "\2\2]\u011f\3\2\2\2_\u0122\3\2\2\2a\u0125\3\2\2\2c\u012b\3\2\2\2e\u020b"+ - "\3\2\2\2g\u0225\3\2\2\2i\u0227\3\2\2\2k\u0232\3\2\2\2m\u0243\3\2\2\2o"+ - "\u0247\3\2\2\2q\u024c\3\2\2\2s\u0253\3\2\2\2u\u0264\3\2\2\2w\u0272\3\2"+ - "\2\2y\u0283\3\2\2\2{\u0292\3\2\2\2}\u0295\3\2\2\2\177\u029e\3\2\2\2\u0081"+ - "\u02a5\3\2\2\2\u0083\u02a7\3\2\2\2\u0085\u02a9\3\2\2\2\u0087\u02ab\3\2"+ - "\2\2\u0089\u02b2\3\2\2\2\u008b\u02b4\3\2\2\2\u008d\u02b6\3\2\2\2\u008f"+ - "\u02be\3\2\2\2\u0091\u02c4\3\2\2\2\u0093\u02cf\3\2\2\2\u0095\u0096\7k"+ - "\2\2\u0096\u0097\7o\2\2\u0097\u0098\7r\2\2\u0098\u0099\7q\2\2\u0099\u009a"+ - "\7t\2\2\u009a\u009b\7v\2\2\u009b\4\3\2\2\2\u009c\u009d\7*\2\2\u009d\6"+ - "\3\2\2\2\u009e\u009f\7+\2\2\u009f\b\3\2\2\2\u00a0\u00a1\7}\2\2\u00a1\n"+ - "\3\2\2\2\u00a2\u00a3\7\177\2\2\u00a3\f\3\2\2\2\u00a4\u00a5\7.\2\2\u00a5"+ - "\16\3\2\2\2\u00a6\u00a7\7?\2\2\u00a7\20\3\2\2\2\u00a8\u00a9\7=\2\2\u00a9"+ - "\22\3\2\2\2\u00aa\u00ab\7e\2\2\u00ab\u00ac\7q\2\2\u00ac\u00ad\7p\2\2\u00ad"+ - "\u00ae\7u\2\2\u00ae\u00af\7v\2\2\u00af\24\3\2\2\2\u00b0\u00b1\7c\2\2\u00b1"+ - "\u00b2\7n\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b4\7i\2\2\u00b4\u00b5\7p\2\2"+ - "\u00b5\26\3\2\2\2\u00b6\u00b7\7k\2\2\u00b7\u00b8\7h\2\2\u00b8\30\3\2\2"+ - "\2\u00b9\u00ba\7g\2\2\u00ba\u00bb\7n\2\2\u00bb\u00bc\7u\2\2\u00bc\u00bd"+ - "\7g\2\2\u00bd\32\3\2\2\2\u00be\u00bf\7y\2\2\u00bf\u00c0\7j\2\2\u00c0\u00c1"+ - "\7k\2\2\u00c1\u00c2\7n\2\2\u00c2\u00c3\7g\2\2\u00c3\34\3\2\2\2\u00c4\u00c5"+ - "\7f\2\2\u00c5\u00c6\7q\2\2\u00c6\36\3\2\2\2\u00c7\u00c8\7h\2\2\u00c8\u00c9"+ - "\7q\2\2\u00c9\u00ca\7t\2\2\u00ca \3\2\2\2\u00cb\u00cc\7t\2\2\u00cc\u00cd"+ - "\7g\2\2\u00cd\u00ce\7v\2\2\u00ce\u00cf\7w\2\2\u00cf\u00d0\7t\2\2\u00d0"+ - "\u00d1\7p\2\2\u00d1\"\3\2\2\2\u00d2\u00d3\7c\2\2\u00d3\u00d4\7u\2\2\u00d4"+ - "\u00d5\7o\2\2\u00d5$\3\2\2\2\u00d6\u00d7\7<\2\2\u00d7&\3\2\2\2\u00d8\u00d9"+ - "\7\60\2\2\u00d9\u00da\7\60\2\2\u00da(\3\2\2\2\u00db\u00dc\7u\2\2\u00dc"+ - "\u00dd\7k\2\2\u00dd\u00de\7i\2\2\u00de\u00df\7p\2\2\u00df\u00e0\7g\2\2"+ - "\u00e0\u00e1\7f\2\2\u00e1*\3\2\2\2\u00e2\u00e3\7,\2\2\u00e3,\3\2\2\2\u00e4"+ - "\u00e5\7]\2\2\u00e5.\3\2\2\2\u00e6\u00e7\7_\2\2\u00e7\60\3\2\2\2\u00e8"+ - "\u00e9\7/\2\2\u00e9\u00ea\7/\2\2\u00ea\62\3\2\2\2\u00eb\u00ec\7-\2\2\u00ec"+ - "\u00ed\7-\2\2\u00ed\64\3\2\2\2\u00ee\u00ef\7-\2\2\u00ef\66\3\2\2\2\u00f0"+ - "\u00f1\7/\2\2\u00f18\3\2\2\2\u00f2\u00f3\7#\2\2\u00f3:\3\2\2\2\u00f4\u00f5"+ - "\7(\2\2\u00f5<\3\2\2\2\u00f6\u00f7\7\u0080\2\2\u00f7>\3\2\2\2\u00f8\u00f9"+ - "\7@\2\2\u00f9\u00fa\7@\2\2\u00fa@\3\2\2\2\u00fb\u00fc\7>\2\2\u00fc\u00fd"+ - "\7>\2\2\u00fdB\3\2\2\2\u00fe\u00ff\7\61\2\2\u00ffD\3\2\2\2\u0100\u0101"+ - "\7\'\2\2\u0101F\3\2\2\2\u0102\u0103\7>\2\2\u0103H\3\2\2\2\u0104\u0105"+ - "\7@\2\2\u0105J\3\2\2\2\u0106\u0107\7?\2\2\u0107\u0108\7?\2\2\u0108L\3"+ - "\2\2\2\u0109\u010a\7#\2\2\u010a\u010b\7?\2\2\u010bN\3\2\2\2\u010c\u010d"+ - "\7>\2\2\u010d\u010e\7@\2\2\u010eP\3\2\2\2\u010f\u0110\7>\2\2\u0110\u0111"+ - "\7?\2\2\u0111R\3\2\2\2\u0112\u0113\7?\2\2\u0113\u0114\7>\2\2\u0114T\3"+ - "\2\2\2\u0115\u0116\7@\2\2\u0116\u0117\7?\2\2\u0117V\3\2\2\2\u0118\u0119"+ - "\7?\2\2\u0119\u011a\7@\2\2\u011aX\3\2\2\2\u011b\u011c\7`\2\2\u011cZ\3"+ - "\2\2\2\u011d\u011e\7~\2\2\u011e\\\3\2\2\2\u011f\u0120\7(\2\2\u0120\u0121"+ - "\7(\2\2\u0121^\3\2\2\2\u0122\u0123\7~\2\2\u0123\u0124\7~\2\2\u0124`\3"+ - "\2\2\2\u0125\u0126\7\60\2\2\u0126\u0127\7d\2\2\u0127\u0128\7{\2\2\u0128"+ - "\u0129\7v\2\2\u0129\u012a\7g\2\2\u012ab\3\2\2\2\u012b\u012c\7%\2\2\u012c"+ - "d\3\2\2\2\u012d\u012e\7d\2\2\u012e\u012f\7t\2\2\u012f\u020c\7m\2\2\u0130"+ - "\u0131\7q\2\2\u0131\u0132\7t\2\2\u0132\u020c\7c\2\2\u0133\u0134\7m\2\2"+ - "\u0134\u0135\7k\2\2\u0135\u020c\7n\2\2\u0136\u0137\7u\2\2\u0137\u0138"+ - "\7n\2\2\u0138\u020c\7q\2\2\u0139\u013a\7p\2\2\u013a\u013b\7q\2\2\u013b"+ - "\u020c\7r\2\2\u013c\u013d\7c\2\2\u013d\u013e\7u\2\2\u013e\u020c\7n\2\2"+ - "\u013f\u0140\7r\2\2\u0140\u0141\7j\2\2\u0141\u020c\7r\2\2\u0142\u0143"+ - "\7c\2\2\u0143\u0144\7p\2\2\u0144\u020c\7e\2\2\u0145\u0146\7d\2\2\u0146"+ - "\u0147\7r\2\2\u0147\u020c\7n\2\2\u0148\u0149\7e\2\2\u0149\u014a\7n\2\2"+ - "\u014a\u020c\7e\2\2\u014b\u014c\7l\2\2\u014c\u014d\7u\2\2\u014d\u020c"+ - "\7t\2\2\u014e\u014f\7c\2\2\u014f\u0150\7p\2\2\u0150\u020c\7f\2\2\u0151"+ - "\u0152\7t\2\2\u0152\u0153\7n\2\2\u0153\u020c\7c\2\2\u0154\u0155\7d\2\2"+ - "\u0155\u0156\7k\2\2\u0156\u020c\7v\2\2\u0157\u0158\7t\2\2\u0158\u0159"+ - "\7q\2\2\u0159\u020c\7n\2\2\u015a\u015b\7r\2\2\u015b\u015c\7n\2\2\u015c"+ - "\u020c\7c\2\2\u015d\u015e\7r\2\2\u015e\u015f\7n\2\2\u015f\u020c\7r\2\2"+ - "\u0160\u0161\7d\2\2\u0161\u0162\7o\2\2\u0162\u020c\7k\2\2\u0163\u0164"+ - "\7u\2\2\u0164\u0165\7g\2\2\u0165\u020c\7e\2\2\u0166\u0167\7t\2\2\u0167"+ - "\u0168\7v\2\2\u0168\u020c\7k\2\2\u0169\u016a\7g\2\2\u016a\u016b\7q\2\2"+ - "\u016b\u020c\7t\2\2\u016c\u016d\7u\2\2\u016d\u016e\7t\2\2\u016e\u020c"+ - "\7g\2\2\u016f\u0170\7n\2\2\u0170\u0171\7u\2\2\u0171\u020c\7t\2\2\u0172"+ - "\u0173\7r\2\2\u0173\u0174\7j\2\2\u0174\u020c\7c\2\2\u0175\u0176\7c\2\2"+ - "\u0176\u0177\7n\2\2\u0177\u020c\7t\2\2\u0178\u0179\7l\2\2\u0179\u017a"+ - "\7o\2\2\u017a\u020c\7r\2\2\u017b\u017c\7d\2\2\u017c\u017d\7x\2\2\u017d"+ - "\u020c\7e\2\2\u017e\u017f\7e\2\2\u017f\u0180\7n\2\2\u0180\u020c\7k\2\2"+ - "\u0181\u0182\7t\2\2\u0182\u0183\7v\2\2\u0183\u020c\7u\2\2\u0184\u0185"+ - "\7c\2\2\u0185\u0186\7f\2\2\u0186\u020c\7e\2\2\u0187\u0188\7t\2\2\u0188"+ - "\u0189\7t\2\2\u0189\u020c\7c\2\2\u018a\u018b\7d\2\2\u018b\u018c\7x\2\2"+ - "\u018c\u020c\7u\2\2\u018d\u018e\7u\2\2\u018e\u018f\7g\2\2\u018f\u020c"+ - "\7k\2\2\u0190\u0191\7u\2\2\u0191\u0192\7c\2\2\u0192\u020c\7z\2\2\u0193"+ - "\u0194\7u\2\2\u0194\u0195\7v\2\2\u0195\u020c\7{\2\2\u0196\u0197\7u\2\2"+ - "\u0197\u0198\7v\2\2\u0198\u020c\7c\2\2\u0199\u019a\7u\2\2\u019a\u019b"+ - "\7v\2\2\u019b\u020c\7z\2\2\u019c\u019d\7f\2\2\u019d\u019e\7g\2\2\u019e"+ - "\u020c\7{\2\2\u019f\u01a0\7v\2\2\u01a0\u01a1\7z\2\2\u01a1\u020c\7c\2\2"+ - "\u01a2\u01a3\7z\2\2\u01a3\u01a4\7c\2\2\u01a4\u020c\7c\2\2\u01a5\u01a6"+ - "\7d\2\2\u01a6\u01a7\7e\2\2\u01a7\u020c\7e\2\2\u01a8\u01a9\7c\2\2\u01a9"+ - "\u01aa\7j\2\2\u01aa\u020c\7z\2\2\u01ab\u01ac\7v\2\2\u01ac\u01ad\7{\2\2"+ - "\u01ad\u020c\7c\2\2\u01ae\u01af\7v\2\2\u01af\u01b0\7z\2\2\u01b0\u020c"+ - "\7u\2\2\u01b1\u01b2\7v\2\2\u01b2\u01b3\7c\2\2\u01b3\u020c\7u\2\2\u01b4"+ - "\u01b5\7u\2\2\u01b5\u01b6\7j\2\2\u01b6\u020c\7{\2\2\u01b7\u01b8\7u\2\2"+ - "\u01b8\u01b9\7j\2\2\u01b9\u020c\7z\2\2\u01ba\u01bb\7n\2\2\u01bb\u01bc"+ - "\7f\2\2\u01bc\u020c\7{\2\2\u01bd\u01be\7n\2\2\u01be\u01bf\7f\2\2\u01bf"+ - "\u020c\7c\2\2\u01c0\u01c1\7n\2\2\u01c1\u01c2\7f\2\2\u01c2\u020c\7z\2\2"+ - "\u01c3\u01c4\7n\2\2\u01c4\u01c5\7c\2\2\u01c5\u020c\7z\2\2\u01c6\u01c7"+ - "\7v\2\2\u01c7\u01c8\7c\2\2\u01c8\u020c\7{\2\2\u01c9\u01ca\7v\2\2\u01ca"+ - "\u01cb\7c\2\2\u01cb\u020c\7z\2\2\u01cc\u01cd\7d\2\2\u01cd\u01ce\7e\2\2"+ - "\u01ce\u020c\7u\2\2\u01cf\u01d0\7e\2\2\u01d0\u01d1\7n\2\2\u01d1\u020c"+ - "\7x\2\2\u01d2\u01d3\7v\2\2\u01d3\u01d4\7u\2\2\u01d4\u020c\7z\2\2\u01d5"+ - "\u01d6\7n\2\2\u01d6\u01d7\7c\2\2\u01d7\u020c\7u\2\2\u01d8\u01d9\7e\2\2"+ - "\u01d9\u01da\7r\2\2\u01da\u020c\7{\2\2\u01db\u01dc\7e\2\2\u01dc\u01dd"+ - "\7o\2\2\u01dd\u020c\7r\2\2\u01de\u01df\7e\2\2\u01df\u01e0\7r\2\2\u01e0"+ - "\u020c\7z\2\2\u01e1\u01e2\7f\2\2\u01e2\u01e3\7e\2\2\u01e3\u020c\7r\2\2"+ - "\u01e4\u01e5\7f\2\2\u01e5\u01e6\7g\2\2\u01e6\u020c\7e\2\2\u01e7\u01e8"+ - "\7k\2\2\u01e8\u01e9\7p\2\2\u01e9\u020c\7e\2\2\u01ea\u01eb\7c\2\2\u01eb"+ - "\u01ec\7z\2\2\u01ec\u020c\7u\2\2\u01ed\u01ee\7d\2\2\u01ee\u01ef\7p\2\2"+ - "\u01ef\u020c\7g\2\2\u01f0\u01f1\7e\2\2\u01f1\u01f2\7n\2\2\u01f2\u020c"+ - "\7f\2\2\u01f3\u01f4\7u\2\2\u01f4\u01f5\7d\2\2\u01f5\u020c\7e\2\2\u01f6"+ - "\u01f7\7k\2\2\u01f7\u01f8\7u\2\2\u01f8\u020c\7e\2\2\u01f9\u01fa\7k\2\2"+ - "\u01fa\u01fb\7p\2\2\u01fb\u020c\7z\2\2\u01fc\u01fd\7d\2\2\u01fd\u01fe"+ - "\7g\2\2\u01fe\u020c\7s\2\2\u01ff\u0200\7u\2\2\u0200\u0201\7g\2\2\u0201"+ - "\u020c\7f\2\2\u0202\u0203\7f\2\2\u0203\u0204\7g\2\2\u0204\u020c\7z\2\2"+ - "\u0205\u0206\7k\2\2\u0206\u0207\7p\2\2\u0207\u020c\7{\2\2\u0208\u0209"+ - "\7t\2\2\u0209\u020a\7q\2\2\u020a\u020c\7t\2\2\u020b\u012d\3\2\2\2\u020b"+ - "\u0130\3\2\2\2\u020b\u0133\3\2\2\2\u020b\u0136\3\2\2\2\u020b\u0139\3\2"+ - "\2\2\u020b\u013c\3\2\2\2\u020b\u013f\3\2\2\2\u020b\u0142\3\2\2\2\u020b"+ - "\u0145\3\2\2\2\u020b\u0148\3\2\2\2\u020b\u014b\3\2\2\2\u020b\u014e\3\2"+ - "\2\2\u020b\u0151\3\2\2\2\u020b\u0154\3\2\2\2\u020b\u0157\3\2\2\2\u020b"+ - "\u015a\3\2\2\2\u020b\u015d\3\2\2\2\u020b\u0160\3\2\2\2\u020b\u0163\3\2"+ - "\2\2\u020b\u0166\3\2\2\2\u020b\u0169\3\2\2\2\u020b\u016c\3\2\2\2\u020b"+ - "\u016f\3\2\2\2\u020b\u0172\3\2\2\2\u020b\u0175\3\2\2\2\u020b\u0178\3\2"+ - "\2\2\u020b\u017b\3\2\2\2\u020b\u017e\3\2\2\2\u020b\u0181\3\2\2\2\u020b"+ - "\u0184\3\2\2\2\u020b\u0187\3\2\2\2\u020b\u018a\3\2\2\2\u020b\u018d\3\2"+ - "\2\2\u020b\u0190\3\2\2\2\u020b\u0193\3\2\2\2\u020b\u0196\3\2\2\2\u020b"+ - "\u0199\3\2\2\2\u020b\u019c\3\2\2\2\u020b\u019f\3\2\2\2\u020b\u01a2\3\2"+ - "\2\2\u020b\u01a5\3\2\2\2\u020b\u01a8\3\2\2\2\u020b\u01ab\3\2\2\2\u020b"+ - "\u01ae\3\2\2\2\u020b\u01b1\3\2\2\2\u020b\u01b4\3\2\2\2\u020b\u01b7\3\2"+ - "\2\2\u020b\u01ba\3\2\2\2\u020b\u01bd\3\2\2\2\u020b\u01c0\3\2\2\2\u020b"+ - "\u01c3\3\2\2\2\u020b\u01c6\3\2\2\2\u020b\u01c9\3\2\2\2\u020b\u01cc\3\2"+ - "\2\2\u020b\u01cf\3\2\2\2\u020b\u01d2\3\2\2\2\u020b\u01d5\3\2\2\2\u020b"+ - "\u01d8\3\2\2\2\u020b\u01db\3\2\2\2\u020b\u01de\3\2\2\2\u020b\u01e1\3\2"+ - "\2\2\u020b\u01e4\3\2\2\2\u020b\u01e7\3\2\2\2\u020b\u01ea\3\2\2\2\u020b"+ - "\u01ed\3\2\2\2\u020b\u01f0\3\2\2\2\u020b\u01f3\3\2\2\2\u020b\u01f6\3\2"+ - "\2\2\u020b\u01f9\3\2\2\2\u020b\u01fc\3\2\2\2\u020b\u01ff\3\2\2\2\u020b"+ - "\u0202\3\2\2\2\u020b\u0205\3\2\2\2\u020b\u0208\3\2\2\2\u020cf\3\2\2\2"+ - "\u020d\u020e\7d\2\2\u020e\u020f\7{\2\2\u020f\u0210\7v\2\2\u0210\u0226"+ - "\7g\2\2\u0211\u0212\7y\2\2\u0212\u0213\7q\2\2\u0213\u0214\7t\2\2\u0214"+ - "\u0226\7f\2\2\u0215\u0216\7f\2\2\u0216\u0217\7y\2\2\u0217\u0218\7q\2\2"+ - "\u0218\u0219\7t\2\2\u0219\u0226\7f\2\2\u021a\u021b\7d\2\2\u021b\u021c"+ - "\7q\2\2\u021c\u021d\7q\2\2\u021d\u021e\7n\2\2\u021e\u021f\7g\2\2\u021f"+ - "\u0220\7c\2\2\u0220\u0226\7p\2\2\u0221\u0222\7x\2\2\u0222\u0223\7q\2\2"+ - "\u0223\u0224\7k\2\2\u0224\u0226\7f\2\2\u0225\u020d\3\2\2\2\u0225\u0211"+ - "\3\2\2\2\u0225\u0215\3\2\2\2\u0225\u021a\3\2\2\2\u0225\u0221\3\2\2\2\u0226"+ - "h\3\2\2\2\u0227\u022d\7$\2\2\u0228\u0229\7^\2\2\u0229\u022c\7$\2\2\u022a"+ - "\u022c\n\2\2\2\u022b\u0228\3\2\2\2\u022b\u022a\3\2\2\2\u022c\u022f\3\2"+ - "\2\2\u022d\u022b\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u0230\3\2\2\2\u022f"+ - "\u022d\3\2\2\2\u0230\u0231\7$\2\2\u0231j\3\2\2\2\u0232\u0236\7)\2\2\u0233"+ - "\u0234\7^\2\2\u0234\u0237\7)\2\2\u0235\u0237\n\3\2\2\u0236\u0233\3\2\2"+ - "\2\u0236\u0235\3\2\2\2\u0237\u0238\3\2\2\2\u0238\u0239\7)\2\2\u0239l\3"+ - "\2\2\2\u023a\u023b\7v\2\2\u023b\u023c\7t\2\2\u023c\u023d\7w\2\2\u023d"+ - "\u0244\7g\2\2\u023e\u023f\7h\2\2\u023f\u0240\7c\2\2\u0240\u0241\7n\2\2"+ - "\u0241\u0242\7u\2\2\u0242\u0244\7g\2\2\u0243\u023a\3\2\2\2\u0243\u023e"+ - "\3\2\2\2\u0244n\3\2\2\2\u0245\u0248\5q9\2\u0246\u0248\5y=\2\u0247\u0245"+ - "\3\2\2\2\u0247\u0246\3\2\2\2\u0248p\3\2\2\2\u0249\u024d\5s:\2\u024a\u024d"+ - "\5u;\2\u024b\u024d\5w<\2\u024c\u0249\3\2\2\2\u024c\u024a\3\2\2\2\u024c"+ - "\u024b\3\2\2\2\u024dr\3\2\2\2\u024e\u0254\7\'\2\2\u024f\u0250\7\62\2\2"+ - "\u0250\u0254\7d\2\2\u0251\u0252\7\62\2\2\u0252\u0254\7D\2\2\u0253\u024e"+ - "\3\2\2\2\u0253\u024f\3\2\2\2\u0253\u0251\3\2\2\2\u0254\u0258\3\2\2\2\u0255"+ - "\u0257\5\u0081A\2\u0256\u0255\3\2\2\2\u0257\u025a\3\2\2\2\u0258\u0256"+ - "\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025b\3\2\2\2\u025a\u0258\3\2\2\2\u025b"+ - "\u025d\7\60\2\2\u025c\u025e\5\u0081A\2\u025d\u025c\3\2\2\2\u025e\u025f"+ - "\3\2\2\2\u025f\u025d\3\2\2\2\u025f\u0260\3\2\2\2\u0260t\3\2\2\2\u0261"+ - "\u0263\5\u0083B\2\u0262\u0261\3\2\2\2\u0263\u0266\3\2\2\2\u0264\u0262"+ - "\3\2\2\2\u0264\u0265\3\2\2\2\u0265\u0267\3\2\2\2\u0266\u0264\3\2\2\2\u0267"+ - "\u0269\7\60\2\2\u0268\u026a\5\u0083B\2\u0269\u0268\3\2\2\2\u026a\u026b"+ - "\3\2\2\2\u026b\u0269\3\2\2\2\u026b\u026c\3\2\2\2\u026cv\3\2\2\2\u026d"+ - "\u0273\7&\2\2\u026e\u026f\7\62\2\2\u026f\u0273\7z\2\2\u0270\u0271\7\62"+ - "\2\2\u0271\u0273\7Z\2\2\u0272\u026d\3\2\2\2\u0272\u026e\3\2\2\2\u0272"+ - "\u0270\3\2\2\2\u0273\u0277\3\2\2\2\u0274\u0276\5\u0085C\2\u0275\u0274"+ - "\3\2\2\2\u0276\u0279\3\2\2\2\u0277\u0275\3\2\2\2\u0277\u0278\3\2\2\2\u0278"+ - "\u027a\3\2\2\2\u0279\u0277\3\2\2\2\u027a\u027c\7\60\2\2\u027b\u027d\5"+ - "\u0085C\2\u027c\u027b\3\2\2\2\u027d\u027e\3\2\2\2\u027e\u027c\3\2\2\2"+ - "\u027e\u027f\3\2\2\2\u027fx\3\2\2\2\u0280\u0284\5}?\2\u0281\u0284\5\177"+ - "@\2\u0282\u0284\5{>\2\u0283\u0280\3\2\2\2\u0283\u0281\3\2\2\2\u0283\u0282"+ - "\3\2\2\2\u0284z\3\2\2\2\u0285\u0286\7\62\2\2\u0286\u0288\t\4\2\2\u0287"+ - "\u0289\5\u0081A\2\u0288\u0287\3\2\2\2\u0289\u028a\3\2\2\2\u028a\u0288"+ - "\3\2\2\2\u028a\u028b\3\2\2\2\u028b\u0293\3\2\2\2\u028c\u028e\7\'\2\2\u028d"+ - "\u028f\5\u0081A\2\u028e\u028d\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u028e"+ - "\3\2\2\2\u0290\u0291\3\2\2\2\u0291\u0293\3\2\2\2\u0292\u0285\3\2\2\2\u0292"+ - "\u028c\3\2\2\2\u0293|\3\2\2\2\u0294\u0296\5\u0083B\2\u0295\u0294\3\2\2"+ - "\2\u0296\u0297\3\2\2\2\u0297\u0295\3\2\2\2\u0297\u0298\3\2\2\2\u0298~"+ - "\3\2\2\2\u0299\u029f\7&\2\2\u029a\u029b\7\62\2\2\u029b\u029f\7z\2\2\u029c"+ - "\u029d\7\62\2\2\u029d\u029f\7Z\2\2\u029e\u0299\3\2\2\2\u029e\u029a\3\2"+ - "\2\2\u029e\u029c\3\2\2\2\u029f\u02a1\3\2\2\2\u02a0\u02a2\5\u0085C\2\u02a1"+ - "\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u02a1\3\2\2\2\u02a3\u02a4\3\2"+ - "\2\2\u02a4\u0080\3\2\2\2\u02a5\u02a6\t\5\2\2\u02a6\u0082\3\2\2\2\u02a7"+ - "\u02a8\t\6\2\2\u02a8\u0084\3\2\2\2\u02a9\u02aa\t\7\2\2\u02aa\u0086\3\2"+ - "\2\2\u02ab\u02af\5\u0089E\2\u02ac\u02ae\5\u008bF\2\u02ad\u02ac\3\2\2\2"+ - "\u02ae\u02b1\3\2\2\2\u02af\u02ad\3\2\2\2\u02af\u02b0\3\2\2\2\u02b0\u0088"+ - "\3\2\2\2\u02b1\u02af\3\2\2\2\u02b2\u02b3\t\b\2\2\u02b3\u008a\3\2\2\2\u02b4"+ - "\u02b5\t\t\2\2\u02b5\u008c\3\2\2\2\u02b6\u02ba\7#\2\2\u02b7\u02b9\t\n"+ - "\2\2\u02b8\u02b7\3\2\2\2\u02b9\u02bc\3\2\2\2\u02ba\u02b8\3\2\2\2\u02ba"+ - "\u02bb\3\2\2\2\u02bb\u008e\3\2\2\2\u02bc\u02ba\3\2\2\2\u02bd\u02bf\t\13"+ - "\2\2\u02be\u02bd\3\2\2\2\u02bf\u02c0\3\2\2\2\u02c0\u02be\3\2\2\2\u02c0"+ - "\u02c1\3\2\2\2\u02c1\u02c2\3\2\2\2\u02c2\u02c3\bH\2\2\u02c3\u0090\3\2"+ - "\2\2\u02c4\u02c5\7\61\2\2\u02c5\u02c6\7\61\2\2\u02c6\u02ca\3\2\2\2\u02c7"+ - "\u02c9\n\f\2\2\u02c8\u02c7\3\2\2\2\u02c9\u02cc\3\2\2\2\u02ca\u02c8\3\2"+ - "\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cd"+ - "\u02ce\bI\2\2\u02ce\u0092\3\2\2\2\u02cf\u02d0\7\61\2\2\u02d0\u02d1\7,"+ - "\2\2\u02d1\u02d5\3\2\2\2\u02d2\u02d4\13\2\2\2\u02d3\u02d2\3\2\2\2\u02d4"+ - "\u02d7\3\2\2\2\u02d5\u02d6\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d6\u02d8\3\2"+ - "\2\2\u02d7\u02d5\3\2\2\2\u02d8\u02d9\7,\2\2\u02d9\u02da\7\61\2\2\u02da"+ - "\u02db\3\2\2\2\u02db\u02dc\bJ\2\2\u02dc\u0094\3\2\2\2\37\2\u020b\u0225"+ - "\u022b\u022d\u0236\u0243\u0247\u024c\u0253\u0258\u025f\u0264\u026b\u0272"+ - "\u0277\u027e\u0283\u028a\u0290\u0292\u0297\u029e\u02a3\u02af\u02ba\u02c0"+ - "\u02ca\u02d5\3\b\2\2"; + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64"+ + "\5\64\u0217\n\64\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65"+ + "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\5\65"+ + "\u0231\n\65\3\66\3\66\3\66\3\66\7\66\u0237\n\66\f\66\16\66\u023a\13\66"+ + "\3\66\3\66\3\67\3\67\3\67\3\67\5\67\u0242\n\67\3\67\3\67\38\38\38\38\3"+ + "8\38\38\38\38\58\u024f\n8\39\39\59\u0253\n9\3:\3:\3:\5:\u0258\n:\3;\3"+ + ";\3;\3;\3;\5;\u025f\n;\3;\7;\u0262\n;\f;\16;\u0265\13;\3;\3;\6;\u0269"+ + "\n;\r;\16;\u026a\3<\7<\u026e\n<\f<\16<\u0271\13<\3<\3<\6<\u0275\n<\r<"+ + "\16<\u0276\3=\3=\3=\3=\3=\5=\u027e\n=\3=\7=\u0281\n=\f=\16=\u0284\13="+ + "\3=\3=\6=\u0288\n=\r=\16=\u0289\3>\3>\3>\5>\u028f\n>\3?\3?\3?\6?\u0294"+ + "\n?\r?\16?\u0295\3?\3?\6?\u029a\n?\r?\16?\u029b\5?\u029e\n?\3@\6@\u02a1"+ + "\n@\r@\16@\u02a2\3A\3A\3A\3A\3A\5A\u02aa\nA\3A\6A\u02ad\nA\rA\16A\u02ae"+ + "\3B\3B\3C\3C\3D\3D\3E\3E\7E\u02b9\nE\fE\16E\u02bc\13E\3F\3F\3G\3G\3H\3"+ + "H\7H\u02c4\nH\fH\16H\u02c7\13H\3I\6I\u02ca\nI\rI\16I\u02cb\3I\3I\3J\3"+ + "J\3J\3J\7J\u02d4\nJ\fJ\16J\u02d7\13J\3J\3J\3K\3K\3K\3K\7K\u02df\nK\fK"+ + "\16K\u02e2\13K\3K\3K\3K\3K\3K\3\u02e0\2L\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{?}@\177A\u0081B\u0083"+ + "\2\u0085\2\u0087\2\u0089C\u008b\2\u008d\2\u008fD\u0091E\u0093F\u0095G"+ + "\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\u034e\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\2"+ + "c\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\177\3\2\2\2\2\u0081\3\2\2\2\2\u0089\3\2\2\2\2\u008f\3"+ + "\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\3\u0097\3\2\2\2"+ + "\5\u009e\3\2\2\2\7\u00a0\3\2\2\2\t\u00a2\3\2\2\2\13\u00a4\3\2\2\2\r\u00a6"+ + "\3\2\2\2\17\u00a8\3\2\2\2\21\u00aa\3\2\2\2\23\u00ac\3\2\2\2\25\u00b2\3"+ + "\2\2\2\27\u00b8\3\2\2\2\31\u00c1\3\2\2\2\33\u00c4\3\2\2\2\35\u00c9\3\2"+ + "\2\2\37\u00cf\3\2\2\2!\u00d2\3\2\2\2#\u00d6\3\2\2\2%\u00dd\3\2\2\2\'\u00e1"+ + "\3\2\2\2)\u00e3\3\2\2\2+\u00e6\3\2\2\2-\u00ed\3\2\2\2/\u00ef\3\2\2\2\61"+ + "\u00f1\3\2\2\2\63\u00f3\3\2\2\2\65\u00f6\3\2\2\2\67\u00f9\3\2\2\29\u00fb"+ + "\3\2\2\2;\u00fd\3\2\2\2=\u00ff\3\2\2\2?\u0101\3\2\2\2A\u0103\3\2\2\2C"+ + "\u0106\3\2\2\2E\u0109\3\2\2\2G\u010b\3\2\2\2I\u010d\3\2\2\2K\u010f\3\2"+ + "\2\2M\u0111\3\2\2\2O\u0114\3\2\2\2Q\u0117\3\2\2\2S\u011a\3\2\2\2U\u011d"+ + "\3\2\2\2W\u0120\3\2\2\2Y\u0123\3\2\2\2[\u0126\3\2\2\2]\u0128\3\2\2\2_"+ + "\u012a\3\2\2\2a\u012d\3\2\2\2c\u0130\3\2\2\2e\u0136\3\2\2\2g\u0216\3\2"+ + "\2\2i\u0230\3\2\2\2k\u0232\3\2\2\2m\u023d\3\2\2\2o\u024e\3\2\2\2q\u0252"+ + "\3\2\2\2s\u0257\3\2\2\2u\u025e\3\2\2\2w\u026f\3\2\2\2y\u027d\3\2\2\2{"+ + "\u028e\3\2\2\2}\u029d\3\2\2\2\177\u02a0\3\2\2\2\u0081\u02a9\3\2\2\2\u0083"+ + "\u02b0\3\2\2\2\u0085\u02b2\3\2\2\2\u0087\u02b4\3\2\2\2\u0089\u02b6\3\2"+ + "\2\2\u008b\u02bd\3\2\2\2\u008d\u02bf\3\2\2\2\u008f\u02c1\3\2\2\2\u0091"+ + "\u02c9\3\2\2\2\u0093\u02cf\3\2\2\2\u0095\u02da\3\2\2\2\u0097\u0098\7k"+ + "\2\2\u0098\u0099\7o\2\2\u0099\u009a\7r\2\2\u009a\u009b\7q\2\2\u009b\u009c"+ + "\7t\2\2\u009c\u009d\7v\2\2\u009d\4\3\2\2\2\u009e\u009f\7*\2\2\u009f\6"+ + "\3\2\2\2\u00a0\u00a1\7+\2\2\u00a1\b\3\2\2\2\u00a2\u00a3\7}\2\2\u00a3\n"+ + "\3\2\2\2\u00a4\u00a5\7\177\2\2\u00a5\f\3\2\2\2\u00a6\u00a7\7.\2\2\u00a7"+ + "\16\3\2\2\2\u00a8\u00a9\7?\2\2\u00a9\20\3\2\2\2\u00aa\u00ab\7=\2\2\u00ab"+ + "\22\3\2\2\2\u00ac\u00ad\7e\2\2\u00ad\u00ae\7q\2\2\u00ae\u00af\7p\2\2\u00af"+ + "\u00b0\7u\2\2\u00b0\u00b1\7v\2\2\u00b1\24\3\2\2\2\u00b2\u00b3\7c\2\2\u00b3"+ + "\u00b4\7n\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6\7i\2\2\u00b6\u00b7\7p\2\2"+ + "\u00b7\26\3\2\2\2\u00b8\u00b9\7t\2\2\u00b9\u00ba\7g\2\2\u00ba\u00bb\7"+ + "i\2\2\u00bb\u00bc\7k\2\2\u00bc\u00bd\7u\2\2\u00bd\u00be\7v\2\2\u00be\u00bf"+ + "\7g\2\2\u00bf\u00c0\7t\2\2\u00c0\30\3\2\2\2\u00c1\u00c2\7k\2\2\u00c2\u00c3"+ + "\7h\2\2\u00c3\32\3\2\2\2\u00c4\u00c5\7g\2\2\u00c5\u00c6\7n\2\2\u00c6\u00c7"+ + "\7u\2\2\u00c7\u00c8\7g\2\2\u00c8\34\3\2\2\2\u00c9\u00ca\7y\2\2\u00ca\u00cb"+ + "\7j\2\2\u00cb\u00cc\7k\2\2\u00cc\u00cd\7n\2\2\u00cd\u00ce\7g\2\2\u00ce"+ + "\36\3\2\2\2\u00cf\u00d0\7f\2\2\u00d0\u00d1\7q\2\2\u00d1 \3\2\2\2\u00d2"+ + "\u00d3\7h\2\2\u00d3\u00d4\7q\2\2\u00d4\u00d5\7t\2\2\u00d5\"\3\2\2\2\u00d6"+ + "\u00d7\7t\2\2\u00d7\u00d8\7g\2\2\u00d8\u00d9\7v\2\2\u00d9\u00da\7w\2\2"+ + "\u00da\u00db\7t\2\2\u00db\u00dc\7p\2\2\u00dc$\3\2\2\2\u00dd\u00de\7c\2"+ + "\2\u00de\u00df\7u\2\2\u00df\u00e0\7o\2\2\u00e0&\3\2\2\2\u00e1\u00e2\7"+ + "<\2\2\u00e2(\3\2\2\2\u00e3\u00e4\7\60\2\2\u00e4\u00e5\7\60\2\2\u00e5*"+ + "\3\2\2\2\u00e6\u00e7\7u\2\2\u00e7\u00e8\7k\2\2\u00e8\u00e9\7i\2\2\u00e9"+ + "\u00ea\7p\2\2\u00ea\u00eb\7g\2\2\u00eb\u00ec\7f\2\2\u00ec,\3\2\2\2\u00ed"+ + "\u00ee\7,\2\2\u00ee.\3\2\2\2\u00ef\u00f0\7]\2\2\u00f0\60\3\2\2\2\u00f1"+ + "\u00f2\7_\2\2\u00f2\62\3\2\2\2\u00f3\u00f4\7/\2\2\u00f4\u00f5\7/\2\2\u00f5"+ + "\64\3\2\2\2\u00f6\u00f7\7-\2\2\u00f7\u00f8\7-\2\2\u00f8\66\3\2\2\2\u00f9"+ + "\u00fa\7-\2\2\u00fa8\3\2\2\2\u00fb\u00fc\7/\2\2\u00fc:\3\2\2\2\u00fd\u00fe"+ + "\7#\2\2\u00fe<\3\2\2\2\u00ff\u0100\7(\2\2\u0100>\3\2\2\2\u0101\u0102\7"+ + "\u0080\2\2\u0102@\3\2\2\2\u0103\u0104\7@\2\2\u0104\u0105\7@\2\2\u0105"+ + "B\3\2\2\2\u0106\u0107\7>\2\2\u0107\u0108\7>\2\2\u0108D\3\2\2\2\u0109\u010a"+ + "\7\61\2\2\u010aF\3\2\2\2\u010b\u010c\7\'\2\2\u010cH\3\2\2\2\u010d\u010e"+ + "\7>\2\2\u010eJ\3\2\2\2\u010f\u0110\7@\2\2\u0110L\3\2\2\2\u0111\u0112\7"+ + "?\2\2\u0112\u0113\7?\2\2\u0113N\3\2\2\2\u0114\u0115\7#\2\2\u0115\u0116"+ + "\7?\2\2\u0116P\3\2\2\2\u0117\u0118\7>\2\2\u0118\u0119\7@\2\2\u0119R\3"+ + "\2\2\2\u011a\u011b\7>\2\2\u011b\u011c\7?\2\2\u011cT\3\2\2\2\u011d\u011e"+ + "\7?\2\2\u011e\u011f\7>\2\2\u011fV\3\2\2\2\u0120\u0121\7@\2\2\u0121\u0122"+ + "\7?\2\2\u0122X\3\2\2\2\u0123\u0124\7?\2\2\u0124\u0125\7@\2\2\u0125Z\3"+ + "\2\2\2\u0126\u0127\7`\2\2\u0127\\\3\2\2\2\u0128\u0129\7~\2\2\u0129^\3"+ + "\2\2\2\u012a\u012b\7(\2\2\u012b\u012c\7(\2\2\u012c`\3\2\2\2\u012d\u012e"+ + "\7~\2\2\u012e\u012f\7~\2\2\u012fb\3\2\2\2\u0130\u0131\7\60\2\2\u0131\u0132"+ + "\7d\2\2\u0132\u0133\7{\2\2\u0133\u0134\7v\2\2\u0134\u0135\7g\2\2\u0135"+ + "d\3\2\2\2\u0136\u0137\7%\2\2\u0137f\3\2\2\2\u0138\u0139\7d\2\2\u0139\u013a"+ + "\7t\2\2\u013a\u0217\7m\2\2\u013b\u013c\7q\2\2\u013c\u013d\7t\2\2\u013d"+ + "\u0217\7c\2\2\u013e\u013f\7m\2\2\u013f\u0140\7k\2\2\u0140\u0217\7n\2\2"+ + "\u0141\u0142\7u\2\2\u0142\u0143\7n\2\2\u0143\u0217\7q\2\2\u0144\u0145"+ + "\7p\2\2\u0145\u0146\7q\2\2\u0146\u0217\7r\2\2\u0147\u0148\7c\2\2\u0148"+ + "\u0149\7u\2\2\u0149\u0217\7n\2\2\u014a\u014b\7r\2\2\u014b\u014c\7j\2\2"+ + "\u014c\u0217\7r\2\2\u014d\u014e\7c\2\2\u014e\u014f\7p\2\2\u014f\u0217"+ + "\7e\2\2\u0150\u0151\7d\2\2\u0151\u0152\7r\2\2\u0152\u0217\7n\2\2\u0153"+ + "\u0154\7e\2\2\u0154\u0155\7n\2\2\u0155\u0217\7e\2\2\u0156\u0157\7l\2\2"+ + "\u0157\u0158\7u\2\2\u0158\u0217\7t\2\2\u0159\u015a\7c\2\2\u015a\u015b"+ + "\7p\2\2\u015b\u0217\7f\2\2\u015c\u015d\7t\2\2\u015d\u015e\7n\2\2\u015e"+ + "\u0217\7c\2\2\u015f\u0160\7d\2\2\u0160\u0161\7k\2\2\u0161\u0217\7v\2\2"+ + "\u0162\u0163\7t\2\2\u0163\u0164\7q\2\2\u0164\u0217\7n\2\2\u0165\u0166"+ + "\7r\2\2\u0166\u0167\7n\2\2\u0167\u0217\7c\2\2\u0168\u0169\7r\2\2\u0169"+ + "\u016a\7n\2\2\u016a\u0217\7r\2\2\u016b\u016c\7d\2\2\u016c\u016d\7o\2\2"+ + "\u016d\u0217\7k\2\2\u016e\u016f\7u\2\2\u016f\u0170\7g\2\2\u0170\u0217"+ + "\7e\2\2\u0171\u0172\7t\2\2\u0172\u0173\7v\2\2\u0173\u0217\7k\2\2\u0174"+ + "\u0175\7g\2\2\u0175\u0176\7q\2\2\u0176\u0217\7t\2\2\u0177\u0178\7u\2\2"+ + "\u0178\u0179\7t\2\2\u0179\u0217\7g\2\2\u017a\u017b\7n\2\2\u017b\u017c"+ + "\7u\2\2\u017c\u0217\7t\2\2\u017d\u017e\7r\2\2\u017e\u017f\7j\2\2\u017f"+ + "\u0217\7c\2\2\u0180\u0181\7c\2\2\u0181\u0182\7n\2\2\u0182\u0217\7t\2\2"+ + "\u0183\u0184\7l\2\2\u0184\u0185\7o\2\2\u0185\u0217\7r\2\2\u0186\u0187"+ + "\7d\2\2\u0187\u0188\7x\2\2\u0188\u0217\7e\2\2\u0189\u018a\7e\2\2\u018a"+ + "\u018b\7n\2\2\u018b\u0217\7k\2\2\u018c\u018d\7t\2\2\u018d\u018e\7v\2\2"+ + "\u018e\u0217\7u\2\2\u018f\u0190\7c\2\2\u0190\u0191\7f\2\2\u0191\u0217"+ + "\7e\2\2\u0192\u0193\7t\2\2\u0193\u0194\7t\2\2\u0194\u0217\7c\2\2\u0195"+ + "\u0196\7d\2\2\u0196\u0197\7x\2\2\u0197\u0217\7u\2\2\u0198\u0199\7u\2\2"+ + "\u0199\u019a\7g\2\2\u019a\u0217\7k\2\2\u019b\u019c\7u\2\2\u019c\u019d"+ + "\7c\2\2\u019d\u0217\7z\2\2\u019e\u019f\7u\2\2\u019f\u01a0\7v\2\2\u01a0"+ + "\u0217\7{\2\2\u01a1\u01a2\7u\2\2\u01a2\u01a3\7v\2\2\u01a3\u0217\7c\2\2"+ + "\u01a4\u01a5\7u\2\2\u01a5\u01a6\7v\2\2\u01a6\u0217\7z\2\2\u01a7\u01a8"+ + "\7f\2\2\u01a8\u01a9\7g\2\2\u01a9\u0217\7{\2\2\u01aa\u01ab\7v\2\2\u01ab"+ + "\u01ac\7z\2\2\u01ac\u0217\7c\2\2\u01ad\u01ae\7z\2\2\u01ae\u01af\7c\2\2"+ + "\u01af\u0217\7c\2\2\u01b0\u01b1\7d\2\2\u01b1\u01b2\7e\2\2\u01b2\u0217"+ + "\7e\2\2\u01b3\u01b4\7c\2\2\u01b4\u01b5\7j\2\2\u01b5\u0217\7z\2\2\u01b6"+ + "\u01b7\7v\2\2\u01b7\u01b8\7{\2\2\u01b8\u0217\7c\2\2\u01b9\u01ba\7v\2\2"+ + "\u01ba\u01bb\7z\2\2\u01bb\u0217\7u\2\2\u01bc\u01bd\7v\2\2\u01bd\u01be"+ + "\7c\2\2\u01be\u0217\7u\2\2\u01bf\u01c0\7u\2\2\u01c0\u01c1\7j\2\2\u01c1"+ + "\u0217\7{\2\2\u01c2\u01c3\7u\2\2\u01c3\u01c4\7j\2\2\u01c4\u0217\7z\2\2"+ + "\u01c5\u01c6\7n\2\2\u01c6\u01c7\7f\2\2\u01c7\u0217\7{\2\2\u01c8\u01c9"+ + "\7n\2\2\u01c9\u01ca\7f\2\2\u01ca\u0217\7c\2\2\u01cb\u01cc\7n\2\2\u01cc"+ + "\u01cd\7f\2\2\u01cd\u0217\7z\2\2\u01ce\u01cf\7n\2\2\u01cf\u01d0\7c\2\2"+ + "\u01d0\u0217\7z\2\2\u01d1\u01d2\7v\2\2\u01d2\u01d3\7c\2\2\u01d3\u0217"+ + "\7{\2\2\u01d4\u01d5\7v\2\2\u01d5\u01d6\7c\2\2\u01d6\u0217\7z\2\2\u01d7"+ + "\u01d8\7d\2\2\u01d8\u01d9\7e\2\2\u01d9\u0217\7u\2\2\u01da\u01db\7e\2\2"+ + "\u01db\u01dc\7n\2\2\u01dc\u0217\7x\2\2\u01dd\u01de\7v\2\2\u01de\u01df"+ + "\7u\2\2\u01df\u0217\7z\2\2\u01e0\u01e1\7n\2\2\u01e1\u01e2\7c\2\2\u01e2"+ + "\u0217\7u\2\2\u01e3\u01e4\7e\2\2\u01e4\u01e5\7r\2\2\u01e5\u0217\7{\2\2"+ + "\u01e6\u01e7\7e\2\2\u01e7\u01e8\7o\2\2\u01e8\u0217\7r\2\2\u01e9\u01ea"+ + "\7e\2\2\u01ea\u01eb\7r\2\2\u01eb\u0217\7z\2\2\u01ec\u01ed\7f\2\2\u01ed"+ + "\u01ee\7e\2\2\u01ee\u0217\7r\2\2\u01ef\u01f0\7f\2\2\u01f0\u01f1\7g\2\2"+ + "\u01f1\u0217\7e\2\2\u01f2\u01f3\7k\2\2\u01f3\u01f4\7p\2\2\u01f4\u0217"+ + "\7e\2\2\u01f5\u01f6\7c\2\2\u01f6\u01f7\7z\2\2\u01f7\u0217\7u\2\2\u01f8"+ + "\u01f9\7d\2\2\u01f9\u01fa\7p\2\2\u01fa\u0217\7g\2\2\u01fb\u01fc\7e\2\2"+ + "\u01fc\u01fd\7n\2\2\u01fd\u0217\7f\2\2\u01fe\u01ff\7u\2\2\u01ff\u0200"+ + "\7d\2\2\u0200\u0217\7e\2\2\u0201\u0202\7k\2\2\u0202\u0203\7u\2\2\u0203"+ + "\u0217\7e\2\2\u0204\u0205\7k\2\2\u0205\u0206\7p\2\2\u0206\u0217\7z\2\2"+ + "\u0207\u0208\7d\2\2\u0208\u0209\7g\2\2\u0209\u0217\7s\2\2\u020a\u020b"+ + "\7u\2\2\u020b\u020c\7g\2\2\u020c\u0217\7f\2\2\u020d\u020e\7f\2\2\u020e"+ + "\u020f\7g\2\2\u020f\u0217\7z\2\2\u0210\u0211\7k\2\2\u0211\u0212\7p\2\2"+ + "\u0212\u0217\7{\2\2\u0213\u0214\7t\2\2\u0214\u0215\7q\2\2\u0215\u0217"+ + "\7t\2\2\u0216\u0138\3\2\2\2\u0216\u013b\3\2\2\2\u0216\u013e\3\2\2\2\u0216"+ + "\u0141\3\2\2\2\u0216\u0144\3\2\2\2\u0216\u0147\3\2\2\2\u0216\u014a\3\2"+ + "\2\2\u0216\u014d\3\2\2\2\u0216\u0150\3\2\2\2\u0216\u0153\3\2\2\2\u0216"+ + "\u0156\3\2\2\2\u0216\u0159\3\2\2\2\u0216\u015c\3\2\2\2\u0216\u015f\3\2"+ + "\2\2\u0216\u0162\3\2\2\2\u0216\u0165\3\2\2\2\u0216\u0168\3\2\2\2\u0216"+ + "\u016b\3\2\2\2\u0216\u016e\3\2\2\2\u0216\u0171\3\2\2\2\u0216\u0174\3\2"+ + "\2\2\u0216\u0177\3\2\2\2\u0216\u017a\3\2\2\2\u0216\u017d\3\2\2\2\u0216"+ + "\u0180\3\2\2\2\u0216\u0183\3\2\2\2\u0216\u0186\3\2\2\2\u0216\u0189\3\2"+ + "\2\2\u0216\u018c\3\2\2\2\u0216\u018f\3\2\2\2\u0216\u0192\3\2\2\2\u0216"+ + "\u0195\3\2\2\2\u0216\u0198\3\2\2\2\u0216\u019b\3\2\2\2\u0216\u019e\3\2"+ + "\2\2\u0216\u01a1\3\2\2\2\u0216\u01a4\3\2\2\2\u0216\u01a7\3\2\2\2\u0216"+ + "\u01aa\3\2\2\2\u0216\u01ad\3\2\2\2\u0216\u01b0\3\2\2\2\u0216\u01b3\3\2"+ + "\2\2\u0216\u01b6\3\2\2\2\u0216\u01b9\3\2\2\2\u0216\u01bc\3\2\2\2\u0216"+ + "\u01bf\3\2\2\2\u0216\u01c2\3\2\2\2\u0216\u01c5\3\2\2\2\u0216\u01c8\3\2"+ + "\2\2\u0216\u01cb\3\2\2\2\u0216\u01ce\3\2\2\2\u0216\u01d1\3\2\2\2\u0216"+ + "\u01d4\3\2\2\2\u0216\u01d7\3\2\2\2\u0216\u01da\3\2\2\2\u0216\u01dd\3\2"+ + "\2\2\u0216\u01e0\3\2\2\2\u0216\u01e3\3\2\2\2\u0216\u01e6\3\2\2\2\u0216"+ + "\u01e9\3\2\2\2\u0216\u01ec\3\2\2\2\u0216\u01ef\3\2\2\2\u0216\u01f2\3\2"+ + "\2\2\u0216\u01f5\3\2\2\2\u0216\u01f8\3\2\2\2\u0216\u01fb\3\2\2\2\u0216"+ + "\u01fe\3\2\2\2\u0216\u0201\3\2\2\2\u0216\u0204\3\2\2\2\u0216\u0207\3\2"+ + "\2\2\u0216\u020a\3\2\2\2\u0216\u020d\3\2\2\2\u0216\u0210\3\2\2\2\u0216"+ + "\u0213\3\2\2\2\u0217h\3\2\2\2\u0218\u0219\7d\2\2\u0219\u021a\7{\2\2\u021a"+ + "\u021b\7v\2\2\u021b\u0231\7g\2\2\u021c\u021d\7y\2\2\u021d\u021e\7q\2\2"+ + "\u021e\u021f\7t\2\2\u021f\u0231\7f\2\2\u0220\u0221\7f\2\2\u0221\u0222"+ + "\7y\2\2\u0222\u0223\7q\2\2\u0223\u0224\7t\2\2\u0224\u0231\7f\2\2\u0225"+ + "\u0226\7d\2\2\u0226\u0227\7q\2\2\u0227\u0228\7q\2\2\u0228\u0229\7n\2\2"+ + "\u0229\u022a\7g\2\2\u022a\u022b\7c\2\2\u022b\u0231\7p\2\2\u022c\u022d"+ + "\7x\2\2\u022d\u022e\7q\2\2\u022e\u022f\7k\2\2\u022f\u0231\7f\2\2\u0230"+ + "\u0218\3\2\2\2\u0230\u021c\3\2\2\2\u0230\u0220\3\2\2\2\u0230\u0225\3\2"+ + "\2\2\u0230\u022c\3\2\2\2\u0231j\3\2\2\2\u0232\u0238\7$\2\2\u0233\u0234"+ + "\7^\2\2\u0234\u0237\7$\2\2\u0235\u0237\n\2\2\2\u0236\u0233\3\2\2\2\u0236"+ + "\u0235\3\2\2\2\u0237\u023a\3\2\2\2\u0238\u0236\3\2\2\2\u0238\u0239\3\2"+ + "\2\2\u0239\u023b\3\2\2\2\u023a\u0238\3\2\2\2\u023b\u023c\7$\2\2\u023c"+ + "l\3\2\2\2\u023d\u0241\7)\2\2\u023e\u023f\7^\2\2\u023f\u0242\7)\2\2\u0240"+ + "\u0242\n\3\2\2\u0241\u023e\3\2\2\2\u0241\u0240\3\2\2\2\u0242\u0243\3\2"+ + "\2\2\u0243\u0244\7)\2\2\u0244n\3\2\2\2\u0245\u0246\7v\2\2\u0246\u0247"+ + "\7t\2\2\u0247\u0248\7w\2\2\u0248\u024f\7g\2\2\u0249\u024a\7h\2\2\u024a"+ + "\u024b\7c\2\2\u024b\u024c\7n\2\2\u024c\u024d\7u\2\2\u024d\u024f\7g\2\2"+ + "\u024e\u0245\3\2\2\2\u024e\u0249\3\2\2\2\u024fp\3\2\2\2\u0250\u0253\5"+ + "s:\2\u0251\u0253\5{>\2\u0252\u0250\3\2\2\2\u0252\u0251\3\2\2\2\u0253r"+ + "\3\2\2\2\u0254\u0258\5u;\2\u0255\u0258\5w<\2\u0256\u0258\5y=\2\u0257\u0254"+ + "\3\2\2\2\u0257\u0255\3\2\2\2\u0257\u0256\3\2\2\2\u0258t\3\2\2\2\u0259"+ + "\u025f\7\'\2\2\u025a\u025b\7\62\2\2\u025b\u025f\7d\2\2\u025c\u025d\7\62"+ + "\2\2\u025d\u025f\7D\2\2\u025e\u0259\3\2\2\2\u025e\u025a\3\2\2\2\u025e"+ + "\u025c\3\2\2\2\u025f\u0263\3\2\2\2\u0260\u0262\5\u0083B\2\u0261\u0260"+ + "\3\2\2\2\u0262\u0265\3\2\2\2\u0263\u0261\3\2\2\2\u0263\u0264\3\2\2\2\u0264"+ + "\u0266\3\2\2\2\u0265\u0263\3\2\2\2\u0266\u0268\7\60\2\2\u0267\u0269\5"+ + "\u0083B\2\u0268\u0267\3\2\2\2\u0269\u026a\3\2\2\2\u026a\u0268\3\2\2\2"+ + "\u026a\u026b\3\2\2\2\u026bv\3\2\2\2\u026c\u026e\5\u0085C\2\u026d\u026c"+ + "\3\2\2\2\u026e\u0271\3\2\2\2\u026f\u026d\3\2\2\2\u026f\u0270\3\2\2\2\u0270"+ + "\u0272\3\2\2\2\u0271\u026f\3\2\2\2\u0272\u0274\7\60\2\2\u0273\u0275\5"+ + "\u0085C\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\u0277x\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\u0282\3\2"+ + "\2\2\u027f\u0281\5\u0087D\2\u0280\u027f\3\2\2\2\u0281\u0284\3\2\2\2\u0282"+ + "\u0280\3\2\2\2\u0282\u0283\3\2\2\2\u0283\u0285\3\2\2\2\u0284\u0282\3\2"+ + "\2\2\u0285\u0287\7\60\2\2\u0286\u0288\5\u0087D\2\u0287\u0286\3\2\2\2\u0288"+ + "\u0289\3\2\2\2\u0289\u0287\3\2\2\2\u0289\u028a\3\2\2\2\u028az\3\2\2\2"+ + "\u028b\u028f\5\177@\2\u028c\u028f\5\u0081A\2\u028d\u028f\5}?\2\u028e\u028b"+ + "\3\2\2\2\u028e\u028c\3\2\2\2\u028e\u028d\3\2\2\2\u028f|\3\2\2\2\u0290"+ + "\u0291\7\62\2\2\u0291\u0293\t\4\2\2\u0292\u0294\5\u0083B\2\u0293\u0292"+ + "\3\2\2\2\u0294\u0295\3\2\2\2\u0295\u0293\3\2\2\2\u0295\u0296\3\2\2\2\u0296"+ + "\u029e\3\2\2\2\u0297\u0299\7\'\2\2\u0298\u029a\5\u0083B\2\u0299\u0298"+ + "\3\2\2\2\u029a\u029b\3\2\2\2\u029b\u0299\3\2\2\2\u029b\u029c\3\2\2\2\u029c"+ + "\u029e\3\2\2\2\u029d\u0290\3\2\2\2\u029d\u0297\3\2\2\2\u029e~\3\2\2\2"+ + "\u029f\u02a1\5\u0085C\2\u02a0\u029f\3\2\2\2\u02a1\u02a2\3\2\2\2\u02a2"+ + "\u02a0\3\2\2\2\u02a2\u02a3\3\2\2\2\u02a3\u0080\3\2\2\2\u02a4\u02aa\7&"+ + "\2\2\u02a5\u02a6\7\62\2\2\u02a6\u02aa\7z\2\2\u02a7\u02a8\7\62\2\2\u02a8"+ + "\u02aa\7Z\2\2\u02a9\u02a4\3\2\2\2\u02a9\u02a5\3\2\2\2\u02a9\u02a7\3\2"+ + "\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02ad\5\u0087D\2\u02ac\u02ab\3\2\2\2\u02ad"+ + "\u02ae\3\2\2\2\u02ae\u02ac\3\2\2\2\u02ae\u02af\3\2\2\2\u02af\u0082\3\2"+ + "\2\2\u02b0\u02b1\t\5\2\2\u02b1\u0084\3\2\2\2\u02b2\u02b3\t\6\2\2\u02b3"+ + "\u0086\3\2\2\2\u02b4\u02b5\t\7\2\2\u02b5\u0088\3\2\2\2\u02b6\u02ba\5\u008b"+ + "F\2\u02b7\u02b9\5\u008dG\2\u02b8\u02b7\3\2\2\2\u02b9\u02bc\3\2\2\2\u02ba"+ + "\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb\u008a\3\2\2\2\u02bc\u02ba\3\2"+ + "\2\2\u02bd\u02be\t\b\2\2\u02be\u008c\3\2\2\2\u02bf\u02c0\t\t\2\2\u02c0"+ + "\u008e\3\2\2\2\u02c1\u02c5\7#\2\2\u02c2\u02c4\t\n\2\2\u02c3\u02c2\3\2"+ + "\2\2\u02c4\u02c7\3\2\2\2\u02c5\u02c3\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6"+ + "\u0090\3\2\2\2\u02c7\u02c5\3\2\2\2\u02c8\u02ca\t\13\2\2\u02c9\u02c8\3"+ + "\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02c9\3\2\2\2\u02cb\u02cc\3\2\2\2\u02cc"+ + "\u02cd\3\2\2\2\u02cd\u02ce\bI\2\2\u02ce\u0092\3\2\2\2\u02cf\u02d0\7\61"+ + "\2\2\u02d0\u02d1\7\61\2\2\u02d1\u02d5\3\2\2\2\u02d2\u02d4\n\f\2\2\u02d3"+ + "\u02d2\3\2\2\2\u02d4\u02d7\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d5\u02d6\3\2"+ + "\2\2\u02d6\u02d8\3\2\2\2\u02d7\u02d5\3\2\2\2\u02d8\u02d9\bJ\2\2\u02d9"+ + "\u0094\3\2\2\2\u02da\u02db\7\61\2\2\u02db\u02dc\7,\2\2\u02dc\u02e0\3\2"+ + "\2\2\u02dd\u02df\13\2\2\2\u02de\u02dd\3\2\2\2\u02df\u02e2\3\2\2\2\u02e0"+ + "\u02e1\3\2\2\2\u02e0\u02de\3\2\2\2\u02e1\u02e3\3\2\2\2\u02e2\u02e0\3\2"+ + "\2\2\u02e3\u02e4\7,\2\2\u02e4\u02e5\7\61\2\2\u02e5\u02e6\3\2\2\2\u02e6"+ + "\u02e7\bK\2\2\u02e7\u0096\3\2\2\2\37\2\u0216\u0230\u0236\u0238\u0241\u024e"+ + "\u0252\u0257\u025e\u0263\u026a\u026f\u0276\u027d\u0282\u0289\u028e\u0295"+ + "\u029b\u029d\u02a2\u02a9\u02ae\u02ba\u02c5\u02cb\u02d5\u02e0\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 33a7fd43f..e315b1de1 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -47,25 +47,26 @@ T__45=46 T__46=47 T__47=48 T__48=49 -MNEMONIC=50 -SIMPLETYPE=51 -STRING=52 -CHAR=53 -BOOLEAN=54 -NUMBER=55 -NUMFLOAT=56 -BINFLOAT=57 -DECFLOAT=58 -HEXFLOAT=59 -NUMINT=60 -BININTEGER=61 -DECINTEGER=62 -HEXINTEGER=63 -NAME=64 -ASMREL=65 -WS=66 -COMMENT_LINE=67 -COMMENT_BLOCK=68 +T__49=50 +MNEMONIC=51 +SIMPLETYPE=52 +STRING=53 +CHAR=54 +BOOLEAN=55 +NUMBER=56 +NUMFLOAT=57 +BINFLOAT=58 +DECFLOAT=59 +HEXFLOAT=60 +NUMINT=61 +BININTEGER=62 +DECINTEGER=63 +HEXINTEGER=64 +NAME=65 +ASMREL=66 +WS=67 +COMMENT_LINE=68 +COMMENT_BLOCK=69 'import'=1 '('=2 ')'=3 @@ -76,42 +77,43 @@ COMMENT_BLOCK=68 ';'=8 'const'=9 'align'=10 -'if'=11 -'else'=12 -'while'=13 -'do'=14 -'for'=15 -'return'=16 -'asm'=17 -':'=18 -'..'=19 -'signed'=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 -'.byte'=48 -'#'=49 +'register'=11 +'if'=12 +'else'=13 +'while'=14 +'do'=15 +'for'=16 +'return'=17 +'asm'=18 +':'=19 +'..'=20 +'signed'=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 +'||'=48 +'.byte'=49 +'#'=50 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java index a8cd7fae3..98ef1bf66 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java @@ -145,6 +145,18 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitDirectiveAlign(KickCParser.DirectiveAlignContext ctx); + /** + * Enter a parse tree produced by the {@code directiveRegister} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + */ + void enterDirectiveRegister(KickCParser.DirectiveRegisterContext ctx); + /** + * Exit a parse tree produced by the {@code directiveRegister} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + */ + void exitDirectiveRegister(KickCParser.DirectiveRegisterContext ctx); /** * Enter a parse tree produced by {@link KickCParser#stmtSeq}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index eb3df3a53..5c535a2de 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -23,10 +23,10 @@ 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, T__46=47, T__47=48, T__48=49, MNEMONIC=50, SIMPLETYPE=51, STRING=52, - CHAR=53, BOOLEAN=54, NUMBER=55, NUMFLOAT=56, BINFLOAT=57, DECFLOAT=58, - HEXFLOAT=59, NUMINT=60, BININTEGER=61, DECINTEGER=62, HEXINTEGER=63, NAME=64, - ASMREL=65, WS=66, COMMENT_LINE=67, COMMENT_BLOCK=68; + T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, MNEMONIC=51, SIMPLETYPE=52, + STRING=53, CHAR=54, BOOLEAN=55, NUMBER=56, NUMFLOAT=57, BINFLOAT=58, DECFLOAT=59, + HEXFLOAT=60, NUMINT=61, BININTEGER=62, DECINTEGER=63, HEXINTEGER=64, NAME=65, + ASMREL=66, WS=67, COMMENT_LINE=68, COMMENT_BLOCK=69; public static final int RULE_file = 0, RULE_asmFile = 1, RULE_importSeq = 2, RULE_importDecl = 3, RULE_declSeq = 4, RULE_decl = 5, RULE_parameterListDecl = 6, RULE_parameterDecl = 7, @@ -45,19 +45,19 @@ public class KickCParser extends Parser { private static final String[] _LITERAL_NAMES = { null, "'import'", "'('", "')'", "'{'", "'}'", "','", "'='", "';'", "'const'", - "'align'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", - "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", - "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", - "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", "'^'", "'|'", - "'&&'", "'||'", "'.byte'", "'#'" + "'align'", "'register'", "'if'", "'else'", "'while'", "'do'", "'for'", + "'return'", "'asm'", "':'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", + "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", + "'<'", "'>'", "'=='", "'!='", "'<>'", "'<='", "'=<'", "'>='", "'=>'", + "'^'", "'|'", "'&&'", "'||'", "'.byte'", "'#'" }; 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, null, - null, null, "MNEMONIC", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", - "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", + 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); @@ -358,7 +358,7 @@ public class KickCParser extends Parser { setState(69); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__19) | (1L << SIMPLETYPE))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__20) | (1L << SIMPLETYPE))) != 0) ); } } catch (RecognitionException re) { @@ -450,7 +450,7 @@ public class KickCParser extends Parser { setState(75); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__19 || _la==SIMPLETYPE) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__20) | (1L << SIMPLETYPE))) != 0)) { { setState(74); parameterListDecl(); @@ -464,7 +464,7 @@ public class KickCParser extends Parser { setState(80); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__12 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__19 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { + if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__11 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__17 - 2)) | (1L << (T__20 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { { setState(79); stmtSeq(); @@ -565,6 +565,9 @@ public class KickCParser extends Parser { return getRuleContext(TypeDeclContext.class,0); } public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } public ParameterDeclContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -587,12 +590,23 @@ public class KickCParser extends Parser { public final ParameterDeclContext parameterDecl() throws RecognitionException { ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState()); enterRule(_localctx, 14, RULE_parameterDecl); + int _la; try { enterOuterAlt(_localctx, 1); { - setState(95); - typeDecl(0); setState(96); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10))) != 0)) { + { + setState(95); + directives(); + } + } + + setState(98); + typeDecl(0); + setState(99); match(NAME); } } @@ -647,43 +661,43 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(99); + setState(102); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__8 || _la==T__9) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10))) != 0)) { { - setState(98); + setState(101); directives(); } } - setState(101); + setState(104); typeDecl(0); - setState(103); + setState(106); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__8 || _la==T__9) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10))) != 0)) { { - setState(102); + setState(105); directives(); } } - setState(105); - match(NAME); setState(108); + match(NAME); + setState(111); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__6) { { - setState(106); + setState(109); match(T__6); - setState(107); + setState(110); expr(0); } } - setState(110); + setState(113); match(T__7); } } @@ -731,20 +745,20 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(113); + setState(116); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(112); + setState(115); directive(); } } - setState(115); + setState(118); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__8 || _la==T__9 ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10))) != 0) ); } } catch (RecognitionException re) { @@ -802,19 +816,36 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } + public static class DirectiveRegisterContext extends DirectiveContext { + public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DirectiveRegisterContext(DirectiveContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterDirectiveRegister(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitDirectiveRegister(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitDirectiveRegister(this); + else return visitor.visitChildren(this); + } + } public final DirectiveContext directive() throws RecognitionException { DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); enterRule(_localctx, 20, RULE_directive); try { - setState(122); + setState(129); _errHandler.sync(this); switch (_input.LA(1)) { case T__8: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(117); + setState(120); match(T__8); } break; @@ -822,13 +853,27 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(118); - match(T__9); - setState(119); - match(T__1); - setState(120); - match(NUMBER); setState(121); + match(T__9); + setState(122); + match(T__1); + setState(123); + match(NUMBER); + setState(124); + match(T__2); + } + break; + case T__10: + _localctx = new DirectiveRegisterContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(125); + match(T__10); + setState(126); + match(T__1); + setState(127); + match(NAME); + setState(128); match(T__2); } break; @@ -880,20 +925,20 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(125); + setState(132); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(124); + setState(131); stmt(); } } - setState(127); + setState(134); _errHandler.sync(this); _la = _input.LA(1); - } while ( ((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__12 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__19 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0) ); + } while ( ((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__11 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__17 - 2)) | (1L << (T__20 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0) ); } } catch (RecognitionException re) { @@ -1113,14 +1158,14 @@ public class KickCParser extends Parser { enterRule(_localctx, 24, RULE_stmt); int _la; try { - setState(180); + setState(187); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(129); + setState(136); declVar(); } break; @@ -1128,19 +1173,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(130); + setState(137); match(T__3); - setState(132); + setState(139); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__12 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__19 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { + if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__8 - 2)) | (1L << (T__9 - 2)) | (1L << (T__10 - 2)) | (1L << (T__11 - 2)) | (1L << (T__13 - 2)) | (1L << (T__14 - 2)) | (1L << (T__15 - 2)) | (1L << (T__16 - 2)) | (1L << (T__17 - 2)) | (1L << (T__20 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (SIMPLETYPE - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { { - setState(131); + setState(138); stmtSeq(); } } - setState(134); + setState(141); match(T__4); } break; @@ -1148,9 +1193,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(135); + setState(142); expr(0); - setState(136); + setState(143); match(T__7); } break; @@ -1158,24 +1203,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(138); - match(T__10); - setState(139); - match(T__1); - setState(140); - expr(0); - setState(141); - match(T__2); - setState(142); - stmt(); setState(145); + match(T__11); + setState(146); + match(T__1); + setState(147); + expr(0); + setState(148); + match(T__2); + setState(149); + stmt(); + setState(152); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(143); - match(T__11); - setState(144); + setState(150); + match(T__12); + setState(151); stmt(); } break; @@ -1186,15 +1231,15 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(147); - match(T__12); - setState(148); + setState(154); + match(T__13); + setState(155); match(T__1); - setState(149); + setState(156); expr(0); - setState(150); + setState(157); match(T__2); - setState(151); + setState(158); stmt(); } break; @@ -1202,19 +1247,19 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(153); - match(T__13); - setState(154); + setState(160); + match(T__14); + setState(161); stmt(); - setState(155); - match(T__12); - setState(156); + setState(162); + match(T__13); + setState(163); match(T__1); - setState(157); + setState(164); expr(0); - setState(158); + setState(165); match(T__2); - setState(159); + setState(166); match(T__7); } break; @@ -1222,25 +1267,25 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(161); - match(T__14); - setState(162); + setState(168); + match(T__15); + setState(169); match(T__1); - setState(164); + setState(171); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 20)) & ~0x3f) == 0 && ((1L << (_la - 20)) & ((1L << (T__19 - 20)) | (1L << (SIMPLETYPE - 20)) | (1L << (NAME - 20)))) != 0)) { + if (((((_la - 9)) & ~0x3f) == 0 && ((1L << (_la - 9)) & ((1L << (T__8 - 9)) | (1L << (T__9 - 9)) | (1L << (T__10 - 9)) | (1L << (T__20 - 9)) | (1L << (SIMPLETYPE - 9)) | (1L << (NAME - 9)))) != 0)) { { - setState(163); + setState(170); forDeclaration(); } } - setState(166); + setState(173); forIteration(); - setState(167); + setState(174); match(T__2); - setState(168); + setState(175); stmt(); } break; @@ -1248,19 +1293,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(170); - match(T__15); - setState(172); + setState(177); + match(T__16); + setState(179); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { + if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { { - setState(171); + setState(178); expr(0); } } - setState(174); + setState(181); match(T__7); } break; @@ -1268,13 +1313,13 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(175); - match(T__16); - setState(176); + setState(182); + match(T__17); + setState(183); match(T__3); - setState(177); + setState(184); asmLines(); - setState(178); + setState(185); match(T__4); } break; @@ -1304,6 +1349,9 @@ public class KickCParser extends Parser { } public static class ForDeclContext extends ForDeclarationContext { public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } public TypeDeclContext typeDecl() { return getRuleContext(TypeDeclContext.class,0); } @@ -1334,26 +1382,36 @@ public class KickCParser extends Parser { _localctx = new ForDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(183); + setState(190); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__19 || _la==SIMPLETYPE) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__8) | (1L << T__9) | (1L << T__10))) != 0)) { { - setState(182); + setState(189); + directives(); + } + } + + setState(193); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__20 || _la==SIMPLETYPE) { + { + setState(192); typeDecl(0); } } - setState(185); + setState(195); match(NAME); - setState(188); + setState(198); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__6) { { - setState(186); + setState(196); match(T__6); - setState(187); + setState(197); expr(0); } } @@ -1431,36 +1489,36 @@ public class KickCParser extends Parser { ForIterationContext _localctx = new ForIterationContext(_ctx, getState()); enterRule(_localctx, 28, RULE_forIteration); try { - setState(200); + setState(210); _errHandler.sync(this); switch (_input.LA(1)) { case T__7: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(190); + setState(200); match(T__7); - setState(191); + setState(201); expr(0); - setState(192); + setState(202); match(T__7); - setState(193); + setState(203); expr(0); } break; - case T__17: + case T__18: _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(195); - match(T__17); - setState(196); + setState(205); + match(T__18); + setState(206); expr(0); { - setState(197); - match(T__18); + setState(207); + match(T__19); } - setState(198); + setState(208); expr(0); } break; @@ -1582,7 +1640,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(206); + setState(216); _errHandler.sync(this); switch (_input.LA(1)) { case SIMPLETYPE: @@ -1591,18 +1649,18 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(203); + setState(213); match(SIMPLETYPE); } break; - case T__19: + case T__20: { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(204); - match(T__19); - setState(205); + setState(214); + match(T__20); + setState(215); match(SIMPLETYPE); } break; @@ -1610,55 +1668,55 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(218); + setState(228); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,23,_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(); _prevctx = _localctx; { - setState(216); + setState(226); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: { _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(208); + setState(218); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(209); - match(T__20); + setState(219); + match(T__21); } break; case 2: { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(210); + setState(220); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(211); - match(T__21); - setState(213); + setState(221); + match(T__22); + setState(223); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { + if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { { - setState(212); + setState(222); expr(0); } } - setState(215); - match(T__22); + setState(225); + match(T__23); } break; } } } - setState(220); + setState(230); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,23,_ctx); + _alt = getInterpreter().adaptivePredict(_input,25,_ctx); } } } @@ -2011,20 +2069,20 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(261); + setState(271); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { case 1: { _localctx = new ExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(222); + setState(232); match(T__1); - setState(223); + setState(233); expr(0); - setState(224); + setState(234); match(T__2); } break; @@ -2033,21 +2091,21 @@ public class KickCParser extends Parser { _localctx = new ExprCallContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(226); + setState(236); match(NAME); - setState(227); + setState(237); match(T__1); - setState(229); + setState(239); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__20 - 2)) | (1L << (T__23 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__34 - 2)) | (1L << (T__35 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { + if (((((_la - 2)) & ~0x3f) == 0 && ((1L << (_la - 2)) & ((1L << (T__1 - 2)) | (1L << (T__3 - 2)) | (1L << (T__21 - 2)) | (1L << (T__24 - 2)) | (1L << (T__25 - 2)) | (1L << (T__26 - 2)) | (1L << (T__27 - 2)) | (1L << (T__28 - 2)) | (1L << (T__29 - 2)) | (1L << (T__30 - 2)) | (1L << (T__35 - 2)) | (1L << (T__36 - 2)) | (1L << (STRING - 2)) | (1L << (CHAR - 2)) | (1L << (BOOLEAN - 2)) | (1L << (NUMBER - 2)) | (1L << (NAME - 2)))) != 0)) { { - setState(228); + setState(238); parameterList(); } } - setState(231); + setState(241); match(T__2); } break; @@ -2056,13 +2114,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(232); + setState(242); match(T__1); - setState(233); + setState(243); typeDecl(0); - setState(234); + setState(244); match(T__2); - setState(235); + setState(245); expr(22); } break; @@ -2071,9 +2129,9 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(237); + setState(247); _la = _input.LA(1); - if ( !(_la==T__23 || _la==T__24) ) { + if ( !(_la==T__24 || _la==T__25) ) { _errHandler.recoverInline(this); } else { @@ -2081,7 +2139,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(238); + setState(248); expr(21); } break; @@ -2090,9 +2148,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(239); - match(T__20); - setState(240); + setState(249); + match(T__21); + setState(250); expr(19); } break; @@ -2101,9 +2159,9 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(241); + setState(251); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2111,7 +2169,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(242); + setState(252); expr(18); } break; @@ -2120,9 +2178,9 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(243); + setState(253); _la = _input.LA(1); - if ( !(_la==T__34 || _la==T__35) ) { + if ( !(_la==T__35 || _la==T__36) ) { _errHandler.recoverInline(this); } else { @@ -2130,7 +2188,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(244); + setState(254); expr(14); } break; @@ -2139,27 +2197,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(245); + setState(255); match(T__3); - setState(246); + setState(256); expr(0); - setState(251); + setState(261); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__5) { { { - setState(247); + setState(257); match(T__5); - setState(248); + setState(258); expr(0); } } - setState(253); + setState(263); _errHandler.sync(this); _la = _input.LA(1); } - setState(254); + setState(264); match(T__4); } break; @@ -2168,7 +2226,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(256); + setState(266); match(NAME); } break; @@ -2177,7 +2235,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(257); + setState(267); match(NUMBER); } break; @@ -2186,7 +2244,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(258); + setState(268); match(STRING); } break; @@ -2195,7 +2253,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(259); + setState(269); match(CHAR); } break; @@ -2204,32 +2262,32 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(260); + setState(270); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(302); + setState(312); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + _alt = getInterpreter().adaptivePredict(_input,30,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(300); + setState(310); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(263); + setState(273); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(264); + setState(274); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__31) ) { + if ( !(_la==T__31 || _la==T__32) ) { _errHandler.recoverInline(this); } else { @@ -2237,7 +2295,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(265); + setState(275); expr(18); } break; @@ -2245,11 +2303,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(266); + setState(276); if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(267); + setState(277); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__20) | (1L << T__32) | (1L << T__33))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__21) | (1L << T__33) | (1L << T__34))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2257,7 +2315,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(268); + setState(278); expr(17); } break; @@ -2265,11 +2323,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(269); + setState(279); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(270); + setState(280); _la = _input.LA(1); - if ( !(_la==T__25 || _la==T__26) ) { + if ( !(_la==T__26 || _la==T__27) ) { _errHandler.recoverInline(this); } else { @@ -2277,7 +2335,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(271); + setState(281); expr(16); } break; @@ -2285,11 +2343,11 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(272); + setState(282); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(273); + setState(283); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2297,7 +2355,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(274); + setState(284); expr(14); } break; @@ -2305,13 +2363,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(275); + setState(285); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(276); - match(T__28); + setState(286); + match(T__29); } - setState(277); + setState(287); expr(13); } break; @@ -2319,13 +2377,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(278); + setState(288); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(279); - match(T__43); + setState(289); + match(T__44); } - setState(280); + setState(290); expr(12); } break; @@ -2333,13 +2391,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(281); + setState(291); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(282); - match(T__44); + setState(292); + match(T__45); } - setState(283); + setState(293); expr(11); } break; @@ -2347,13 +2405,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(284); + setState(294); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); { - setState(285); - match(T__45); + setState(295); + match(T__46); } - setState(286); + setState(296); expr(10); } break; @@ -2361,13 +2419,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(287); + setState(297); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); { - setState(288); - match(T__46); + setState(298); + match(T__47); } - setState(289); + setState(299); expr(9); } break; @@ -2375,11 +2433,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(290); + setState(300); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(291); + setState(301); match(T__6); - setState(292); + setState(302); expr(7); } break; @@ -2387,25 +2445,25 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(293); + setState(303); if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)"); - setState(294); - match(T__21); - setState(295); - expr(0); - setState(296); + setState(304); match(T__22); + setState(305); + expr(0); + setState(306); + match(T__23); } break; case 12: { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(298); + setState(308); if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(299); + setState(309); _la = _input.LA(1); - if ( !(_la==T__23 || _la==T__24) ) { + if ( !(_la==T__24 || _la==T__25) ) { _errHandler.recoverInline(this); } else { @@ -2418,9 +2476,9 @@ public class KickCParser extends Parser { } } } - setState(304); + setState(314); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + _alt = getInterpreter().adaptivePredict(_input,30,_ctx); } } } @@ -2468,21 +2526,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(305); + setState(315); expr(0); - setState(310); + setState(320); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__5) { { { - setState(306); + setState(316); match(T__5); - setState(307); + setState(317); expr(0); } } - setState(312); + setState(322); _errHandler.sync(this); _la = _input.LA(1); } @@ -2532,17 +2590,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(316); + setState(326); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 28)) & ~0x3f) == 0 && ((1L << (_la - 28)) & ((1L << (T__27 - 28)) | (1L << (T__47 - 28)) | (1L << (MNEMONIC - 28)) | (1L << (NAME - 28)))) != 0)) { + while (((((_la - 29)) & ~0x3f) == 0 && ((1L << (_la - 29)) & ((1L << (T__28 - 29)) | (1L << (T__48 - 29)) | (1L << (MNEMONIC - 29)) | (1L << (NAME - 29)))) != 0)) { { { - setState(313); + setState(323); asmLine(); } } - setState(318); + setState(328); _errHandler.sync(this); _la = _input.LA(1); } @@ -2592,28 +2650,28 @@ public class KickCParser extends Parser { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); enterRule(_localctx, 38, RULE_asmLine); try { - setState(322); + setState(332); _errHandler.sync(this); switch (_input.LA(1)) { - case T__27: + case T__28: case NAME: enterOuterAlt(_localctx, 1); { - setState(319); + setState(329); asmLabel(); } break; case MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(320); + setState(330); asmInstruction(); } break; - case T__47: + case T__48: enterOuterAlt(_localctx, 3); { - setState(321); + setState(331); asmBytes(); } break; @@ -2657,25 +2715,25 @@ public class KickCParser extends Parser { AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState()); enterRule(_localctx, 40, RULE_asmLabel); try { - setState(328); + setState(338); _errHandler.sync(this); switch (_input.LA(1)) { case NAME: enterOuterAlt(_localctx, 1); { - setState(324); + setState(334); match(NAME); - setState(325); - match(T__17); + setState(335); + match(T__18); } break; - case T__27: + case T__28: enterOuterAlt(_localctx, 2); { - setState(326); - match(T__27); - setState(327); - match(T__17); + setState(336); + match(T__28); + setState(337); + match(T__18); } break; default: @@ -2723,14 +2781,14 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(330); + setState(340); match(MNEMONIC); - setState(332); + setState(342); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { case 1: { - setState(331); + setState(341); asmParamMode(); } break; @@ -2781,23 +2839,23 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(334); - match(T__47); - setState(335); + setState(344); + match(T__48); + setState(345); asmExpr(0); - setState(340); + setState(350); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__5) { { { - setState(336); + setState(346); match(T__5); - setState(337); + setState(347); asmExpr(0); } } - setState(342); + setState(352); _errHandler.sync(this); _la = _input.LA(1); } @@ -2947,14 +3005,14 @@ public class KickCParser extends Parser { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); enterRule(_localctx, 46, RULE_asmParamMode); try { - setState(366); + setState(376); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(343); + setState(353); asmExpr(0); } break; @@ -2962,9 +3020,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(344); - match(T__48); - setState(345); + setState(354); + match(T__49); + setState(355); asmExpr(0); } break; @@ -2972,11 +3030,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(346); + setState(356); asmExpr(0); - setState(347); + setState(357); match(T__5); - setState(348); + setState(358); match(NAME); } break; @@ -2984,15 +3042,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(350); + setState(360); match(T__1); - setState(351); + setState(361); asmExpr(0); - setState(352); + setState(362); match(T__2); - setState(353); + setState(363); match(T__5); - setState(354); + setState(364); match(NAME); } break; @@ -3000,15 +3058,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(356); + setState(366); match(T__1); - setState(357); + setState(367); asmExpr(0); - setState(358); + setState(368); match(T__5); - setState(359); + setState(369); match(NAME); - setState(360); + setState(370); match(T__2); } break; @@ -3016,11 +3074,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(362); + setState(372); match(T__1); - setState(363); + setState(373); asmExpr(0); - setState(364); + setState(374); match(T__2); } break; @@ -3210,34 +3268,34 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(382); + setState(392); _errHandler.sync(this); switch (_input.LA(1)) { - case T__21: + case T__22: { _localctx = new AsmExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(369); - match(T__21); - setState(370); - asmExpr(0); - setState(371); + setState(379); match(T__22); + setState(380); + asmExpr(0); + setState(381); + match(T__23); } break; - case T__25: case T__26: - case T__34: + case T__27: case T__35: + case T__36: { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(373); + setState(383); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__25) | (1L << T__26) | (1L << T__34) | (1L << T__35))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__26) | (1L << T__27) | (1L << T__35) | (1L << T__36))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -3245,7 +3303,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(374); + setState(384); asmExpr(8); } break; @@ -3254,7 +3312,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(375); + setState(385); match(NAME); } break; @@ -3263,7 +3321,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(376); + setState(386); match(ASMREL); } break; @@ -3272,11 +3330,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(377); + setState(387); match(T__3); - setState(378); + setState(388); match(NAME); - setState(379); + setState(389); match(T__4); } break; @@ -3285,7 +3343,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(380); + setState(390); match(NUMBER); } break; @@ -3294,7 +3352,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(381); + setState(391); match(CHAR); } break; @@ -3302,26 +3360,26 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(395); + setState(405); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(393); + setState(403); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(384); + setState(394); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(385); + setState(395); _la = _input.LA(1); - if ( !(_la==T__30 || _la==T__31) ) { + if ( !(_la==T__31 || _la==T__32) ) { _errHandler.recoverInline(this); } else { @@ -3329,7 +3387,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(386); + setState(396); asmExpr(10); } break; @@ -3337,11 +3395,11 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(387); + setState(397); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(388); + setState(398); _la = _input.LA(1); - if ( !(_la==T__20 || _la==T__32) ) { + if ( !(_la==T__21 || _la==T__33) ) { _errHandler.recoverInline(this); } else { @@ -3349,7 +3407,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(389); + setState(399); asmExpr(8); } break; @@ -3357,11 +3415,11 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(390); + setState(400); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(391); + setState(401); _la = _input.LA(1); - if ( !(_la==T__25 || _la==T__26) ) { + if ( !(_la==T__26 || _la==T__27) ) { _errHandler.recoverInline(this); } else { @@ -3369,16 +3427,16 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(392); + setState(402); asmExpr(7); } break; } } } - setState(397); + setState(407); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } } } @@ -3455,157 +3513,162 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3F\u0191\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3G\u019b\4\2\t\2\4"+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4=\n\4\f\4\16\4@\13\4\3\5"+ "\3\5\3\5\3\6\6\6F\n\6\r\6\16\6G\3\7\3\7\3\7\3\7\5\7N\n\7\3\7\3\7\3\7\5"+ - "\7S\n\7\3\7\3\7\3\7\5\7X\n\7\3\b\3\b\3\b\7\b]\n\b\f\b\16\b`\13\b\3\t\3"+ - "\t\3\t\3\n\5\nf\n\n\3\n\3\n\5\nj\n\n\3\n\3\n\3\n\5\no\n\n\3\n\3\n\3\13"+ - "\6\13t\n\13\r\13\16\13u\3\f\3\f\3\f\3\f\3\f\5\f}\n\f\3\r\6\r\u0080\n\r"+ - "\r\r\16\r\u0081\3\16\3\16\3\16\5\16\u0087\n\16\3\16\3\16\3\16\3\16\3\16"+ - "\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0094\n\16\3\16\3\16\3\16\3\16\3\16"+ - "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00a7"+ - "\n\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00af\n\16\3\16\3\16\3\16\3\16"+ - "\3\16\3\16\5\16\u00b7\n\16\3\17\5\17\u00ba\n\17\3\17\3\17\3\17\5\17\u00bf"+ - "\n\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00cb\n\20"+ - "\3\21\3\21\3\21\3\21\5\21\u00d1\n\21\3\21\3\21\3\21\3\21\3\21\5\21\u00d8"+ - "\n\21\3\21\7\21\u00db\n\21\f\21\16\21\u00de\13\21\3\22\3\22\3\22\3\22"+ - "\3\22\3\22\3\22\3\22\5\22\u00e8\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\7\22\u00fc\n\22"+ - "\f\22\16\22\u00ff\13\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0108"+ - "\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"+ + "\7S\n\7\3\7\3\7\3\7\5\7X\n\7\3\b\3\b\3\b\7\b]\n\b\f\b\16\b`\13\b\3\t\5"+ + "\tc\n\t\3\t\3\t\3\t\3\n\5\ni\n\n\3\n\3\n\5\nm\n\n\3\n\3\n\3\n\5\nr\n\n"+ + "\3\n\3\n\3\13\6\13w\n\13\r\13\16\13x\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3"+ + "\f\5\f\u0084\n\f\3\r\6\r\u0087\n\r\r\r\16\r\u0088\3\16\3\16\3\16\5\16"+ + "\u008e\n\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16"+ + "\u009b\n\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+ + "\3\16\3\16\3\16\3\16\3\16\5\16\u00ae\n\16\3\16\3\16\3\16\3\16\3\16\3\16"+ + "\5\16\u00b6\n\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00be\n\16\3\17\5"+ + "\17\u00c1\n\17\3\17\5\17\u00c4\n\17\3\17\3\17\3\17\5\17\u00c9\n\17\3\20"+ + "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00d5\n\20\3\21\3\21"+ + "\3\21\3\21\5\21\u00db\n\21\3\21\3\21\3\21\3\21\3\21\5\21\u00e2\n\21\3"+ + "\21\7\21\u00e5\n\21\f\21\16\21\u00e8\13\21\3\22\3\22\3\22\3\22\3\22\3"+ + "\22\3\22\3\22\5\22\u00f2\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\7\22\u0106\n\22\f\22"+ + "\16\22\u0109\13\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\7\22\u012f\n\22\f\22"+ - "\16\22\u0132\13\22\3\23\3\23\3\23\7\23\u0137\n\23\f\23\16\23\u013a\13"+ - "\23\3\24\7\24\u013d\n\24\f\24\16\24\u0140\13\24\3\25\3\25\3\25\5\25\u0145"+ - "\n\25\3\26\3\26\3\26\3\26\5\26\u014b\n\26\3\27\3\27\5\27\u014f\n\27\3"+ - "\30\3\30\3\30\3\30\7\30\u0155\n\30\f\30\16\30\u0158\13\30\3\31\3\31\3"+ + "\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\u0139\n\22\f\22\16"+ + "\22\u013c\13\22\3\23\3\23\3\23\7\23\u0141\n\23\f\23\16\23\u0144\13\23"+ + "\3\24\7\24\u0147\n\24\f\24\16\24\u014a\13\24\3\25\3\25\3\25\5\25\u014f"+ + "\n\25\3\26\3\26\3\26\3\26\5\26\u0155\n\26\3\27\3\27\5\27\u0159\n\27\3"+ + "\30\3\30\3\30\3\30\7\30\u015f\n\30\f\30\16\30\u0162\13\30\3\31\3\31\3"+ "\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3"+ - "\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u0171\n\31\3\32\3\32\3\32\3\32"+ - "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u0181\n\32\3\32"+ - "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u018c\n\32\f\32\16\32\u018f"+ + "\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u017b\n\31\3\32\3\32\3\32\3\32"+ + "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u018b\n\32\3\32"+ + "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\7\32\u0196\n\32\f\32\16\32\u0199"+ "\13\32\3\32\2\5 \"\62\33\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&("+ - "*,.\60\62\2\13\3\2\32\33\3\2\34 \3\2%&\3\2!\"\4\2\27\27#$\3\2\34\35\3"+ - "\2%-\4\2\34\35%&\4\2\27\27##\2\u01c5\2\64\3\2\2\2\48\3\2\2\2\6>\3\2\2"+ - "\2\bA\3\2\2\2\nE\3\2\2\2\fW\3\2\2\2\16Y\3\2\2\2\20a\3\2\2\2\22e\3\2\2"+ - "\2\24s\3\2\2\2\26|\3\2\2\2\30\177\3\2\2\2\32\u00b6\3\2\2\2\34\u00b9\3"+ - "\2\2\2\36\u00ca\3\2\2\2 \u00d0\3\2\2\2\"\u0107\3\2\2\2$\u0133\3\2\2\2"+ - "&\u013e\3\2\2\2(\u0144\3\2\2\2*\u014a\3\2\2\2,\u014c\3\2\2\2.\u0150\3"+ - "\2\2\2\60\u0170\3\2\2\2\62\u0180\3\2\2\2\64\65\5\6\4\2\65\66\5\n\6\2\66"+ - "\67\7\2\2\3\67\3\3\2\2\289\5&\24\29:\7\2\2\3:\5\3\2\2\2;=\5\b\5\2<;\3"+ - "\2\2\2=@\3\2\2\2><\3\2\2\2>?\3\2\2\2?\7\3\2\2\2@>\3\2\2\2AB\7\3\2\2BC"+ - "\7\66\2\2C\t\3\2\2\2DF\5\f\7\2ED\3\2\2\2FG\3\2\2\2GE\3\2\2\2GH\3\2\2\2"+ - "H\13\3\2\2\2IJ\5 \21\2JK\7B\2\2KM\7\4\2\2LN\5\16\b\2ML\3\2\2\2MN\3\2\2"+ - "\2NO\3\2\2\2OP\7\5\2\2PR\7\6\2\2QS\5\30\r\2RQ\3\2\2\2RS\3\2\2\2ST\3\2"+ - "\2\2TU\7\7\2\2UX\3\2\2\2VX\5\22\n\2WI\3\2\2\2WV\3\2\2\2X\r\3\2\2\2Y^\5"+ - "\20\t\2Z[\7\b\2\2[]\5\20\t\2\\Z\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2"+ - "_\17\3\2\2\2`^\3\2\2\2ab\5 \21\2bc\7B\2\2c\21\3\2\2\2df\5\24\13\2ed\3"+ - "\2\2\2ef\3\2\2\2fg\3\2\2\2gi\5 \21\2hj\5\24\13\2ih\3\2\2\2ij\3\2\2\2j"+ - "k\3\2\2\2kn\7B\2\2lm\7\t\2\2mo\5\"\22\2nl\3\2\2\2no\3\2\2\2op\3\2\2\2"+ - "pq\7\n\2\2q\23\3\2\2\2rt\5\26\f\2sr\3\2\2\2tu\3\2\2\2us\3\2\2\2uv\3\2"+ - "\2\2v\25\3\2\2\2w}\7\13\2\2xy\7\f\2\2yz\7\4\2\2z{\79\2\2{}\7\5\2\2|w\3"+ - "\2\2\2|x\3\2\2\2}\27\3\2\2\2~\u0080\5\32\16\2\177~\3\2\2\2\u0080\u0081"+ - "\3\2\2\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082\31\3\2\2\2\u0083"+ - "\u00b7\5\22\n\2\u0084\u0086\7\6\2\2\u0085\u0087\5\30\r\2\u0086\u0085\3"+ - "\2\2\2\u0086\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u00b7\7\7\2\2\u0089"+ - "\u008a\5\"\22\2\u008a\u008b\7\n\2\2\u008b\u00b7\3\2\2\2\u008c\u008d\7"+ - "\r\2\2\u008d\u008e\7\4\2\2\u008e\u008f\5\"\22\2\u008f\u0090\7\5\2\2\u0090"+ - "\u0093\5\32\16\2\u0091\u0092\7\16\2\2\u0092\u0094\5\32\16\2\u0093\u0091"+ - "\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u00b7\3\2\2\2\u0095\u0096\7\17\2\2"+ - "\u0096\u0097\7\4\2\2\u0097\u0098\5\"\22\2\u0098\u0099\7\5\2\2\u0099\u009a"+ - "\5\32\16\2\u009a\u00b7\3\2\2\2\u009b\u009c\7\20\2\2\u009c\u009d\5\32\16"+ - "\2\u009d\u009e\7\17\2\2\u009e\u009f\7\4\2\2\u009f\u00a0\5\"\22\2\u00a0"+ - "\u00a1\7\5\2\2\u00a1\u00a2\7\n\2\2\u00a2\u00b7\3\2\2\2\u00a3\u00a4\7\21"+ - "\2\2\u00a4\u00a6\7\4\2\2\u00a5\u00a7\5\34\17\2\u00a6\u00a5\3\2\2\2\u00a6"+ - "\u00a7\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8\u00a9\5\36\20\2\u00a9\u00aa\7"+ - "\5\2\2\u00aa\u00ab\5\32\16\2\u00ab\u00b7\3\2\2\2\u00ac\u00ae\7\22\2\2"+ - "\u00ad\u00af\5\"\22\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00b0"+ - "\3\2\2\2\u00b0\u00b7\7\n\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b3\7\6\2\2"+ - "\u00b3\u00b4\5&\24\2\u00b4\u00b5\7\7\2\2\u00b5\u00b7\3\2\2\2\u00b6\u0083"+ - "\3\2\2\2\u00b6\u0084\3\2\2\2\u00b6\u0089\3\2\2\2\u00b6\u008c\3\2\2\2\u00b6"+ - "\u0095\3\2\2\2\u00b6\u009b\3\2\2\2\u00b6\u00a3\3\2\2\2\u00b6\u00ac\3\2"+ - "\2\2\u00b6\u00b1\3\2\2\2\u00b7\33\3\2\2\2\u00b8\u00ba\5 \21\2\u00b9\u00b8"+ - "\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00be\7B\2\2\u00bc"+ - "\u00bd\7\t\2\2\u00bd\u00bf\5\"\22\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3"+ - "\2\2\2\u00bf\35\3\2\2\2\u00c0\u00c1\7\n\2\2\u00c1\u00c2\5\"\22\2\u00c2"+ - "\u00c3\7\n\2\2\u00c3\u00c4\5\"\22\2\u00c4\u00cb\3\2\2\2\u00c5\u00c6\7"+ - "\24\2\2\u00c6\u00c7\5\"\22\2\u00c7\u00c8\7\25\2\2\u00c8\u00c9\5\"\22\2"+ - "\u00c9\u00cb\3\2\2\2\u00ca\u00c0\3\2\2\2\u00ca\u00c5\3\2\2\2\u00cb\37"+ - "\3\2\2\2\u00cc\u00cd\b\21\1\2\u00cd\u00d1\7\65\2\2\u00ce\u00cf\7\26\2"+ - "\2\u00cf\u00d1\7\65\2\2\u00d0\u00cc\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d1"+ - "\u00dc\3\2\2\2\u00d2\u00d3\f\4\2\2\u00d3\u00db\7\27\2\2\u00d4\u00d5\f"+ - "\3\2\2\u00d5\u00d7\7\30\2\2\u00d6\u00d8\5\"\22\2\u00d7\u00d6\3\2\2\2\u00d7"+ - "\u00d8\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00db\7\31\2\2\u00da\u00d2\3"+ - "\2\2\2\u00da\u00d4\3\2\2\2\u00db\u00de\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc"+ - "\u00dd\3\2\2\2\u00dd!\3\2\2\2\u00de\u00dc\3\2\2\2\u00df\u00e0\b\22\1\2"+ - "\u00e0\u00e1\7\4\2\2\u00e1\u00e2\5\"\22\2\u00e2\u00e3\7\5\2\2\u00e3\u0108"+ - "\3\2\2\2\u00e4\u00e5\7B\2\2\u00e5\u00e7\7\4\2\2\u00e6\u00e8\5$\23\2\u00e7"+ - "\u00e6\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u0108\7\5"+ - "\2\2\u00ea\u00eb\7\4\2\2\u00eb\u00ec\5 \21\2\u00ec\u00ed\7\5\2\2\u00ed"+ - "\u00ee\5\"\22\30\u00ee\u0108\3\2\2\2\u00ef\u00f0\t\2\2\2\u00f0\u0108\5"+ - "\"\22\27\u00f1\u00f2\7\27\2\2\u00f2\u0108\5\"\22\25\u00f3\u00f4\t\3\2"+ - "\2\u00f4\u0108\5\"\22\24\u00f5\u00f6\t\4\2\2\u00f6\u0108\5\"\22\20\u00f7"+ - "\u00f8\7\6\2\2\u00f8\u00fd\5\"\22\2\u00f9\u00fa\7\b\2\2\u00fa\u00fc\5"+ - "\"\22\2\u00fb\u00f9\3\2\2\2\u00fc\u00ff\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd"+ - "\u00fe\3\2\2\2\u00fe\u0100\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0101\7\7"+ - "\2\2\u0101\u0108\3\2\2\2\u0102\u0108\7B\2\2\u0103\u0108\79\2\2\u0104\u0108"+ - "\7\66\2\2\u0105\u0108\7\67\2\2\u0106\u0108\78\2\2\u0107\u00df\3\2\2\2"+ - "\u0107\u00e4\3\2\2\2\u0107\u00ea\3\2\2\2\u0107\u00ef\3\2\2\2\u0107\u00f1"+ - "\3\2\2\2\u0107\u00f3\3\2\2\2\u0107\u00f5\3\2\2\2\u0107\u00f7\3\2\2\2\u0107"+ - "\u0102\3\2\2\2\u0107\u0103\3\2\2\2\u0107\u0104\3\2\2\2\u0107\u0105\3\2"+ - "\2\2\u0107\u0106\3\2\2\2\u0108\u0130\3\2\2\2\u0109\u010a\f\23\2\2\u010a"+ - "\u010b\t\5\2\2\u010b\u012f\5\"\22\24\u010c\u010d\f\22\2\2\u010d\u010e"+ - "\t\6\2\2\u010e\u012f\5\"\22\23\u010f\u0110\f\21\2\2\u0110\u0111\t\7\2"+ - "\2\u0111\u012f\5\"\22\22\u0112\u0113\f\17\2\2\u0113\u0114\t\b\2\2\u0114"+ - "\u012f\5\"\22\20\u0115\u0116\f\16\2\2\u0116\u0117\7\37\2\2\u0117\u012f"+ - "\5\"\22\17\u0118\u0119\f\r\2\2\u0119\u011a\7.\2\2\u011a\u012f\5\"\22\16"+ - "\u011b\u011c\f\f\2\2\u011c\u011d\7/\2\2\u011d\u012f\5\"\22\r\u011e\u011f"+ - "\f\13\2\2\u011f\u0120\7\60\2\2\u0120\u012f\5\"\22\f\u0121\u0122\f\n\2"+ - "\2\u0122\u0123\7\61\2\2\u0123\u012f\5\"\22\13\u0124\u0125\f\t\2\2\u0125"+ - "\u0126\7\t\2\2\u0126\u012f\5\"\22\t\u0127\u0128\f\31\2\2\u0128\u0129\7"+ - "\30\2\2\u0129\u012a\5\"\22\2\u012a\u012b\7\31\2\2\u012b\u012f\3\2\2\2"+ - "\u012c\u012d\f\26\2\2\u012d\u012f\t\2\2\2\u012e\u0109\3\2\2\2\u012e\u010c"+ - "\3\2\2\2\u012e\u010f\3\2\2\2\u012e\u0112\3\2\2\2\u012e\u0115\3\2\2\2\u012e"+ - "\u0118\3\2\2\2\u012e\u011b\3\2\2\2\u012e\u011e\3\2\2\2\u012e\u0121\3\2"+ - "\2\2\u012e\u0124\3\2\2\2\u012e\u0127\3\2\2\2\u012e\u012c\3\2\2\2\u012f"+ - "\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2\u0131#\3\2\2\2"+ - "\u0132\u0130\3\2\2\2\u0133\u0138\5\"\22\2\u0134\u0135\7\b\2\2\u0135\u0137"+ - "\5\"\22\2\u0136\u0134\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\u013d\5"+ - "(\25\2\u013c\u013b\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2\2\2\u013e"+ - "\u013f\3\2\2\2\u013f\'\3\2\2\2\u0140\u013e\3\2\2\2\u0141\u0145\5*\26\2"+ - "\u0142\u0145\5,\27\2\u0143\u0145\5.\30\2\u0144\u0141\3\2\2\2\u0144\u0142"+ - "\3\2\2\2\u0144\u0143\3\2\2\2\u0145)\3\2\2\2\u0146\u0147\7B\2\2\u0147\u014b"+ - "\7\24\2\2\u0148\u0149\7\36\2\2\u0149\u014b\7\24\2\2\u014a\u0146\3\2\2"+ - "\2\u014a\u0148\3\2\2\2\u014b+\3\2\2\2\u014c\u014e\7\64\2\2\u014d\u014f"+ - "\5\60\31\2\u014e\u014d\3\2\2\2\u014e\u014f\3\2\2\2\u014f-\3\2\2\2\u0150"+ - "\u0151\7\62\2\2\u0151\u0156\5\62\32\2\u0152\u0153\7\b\2\2\u0153\u0155"+ - "\5\62\32\2\u0154\u0152\3\2\2\2\u0155\u0158\3\2\2\2\u0156\u0154\3\2\2\2"+ - "\u0156\u0157\3\2\2\2\u0157/\3\2\2\2\u0158\u0156\3\2\2\2\u0159\u0171\5"+ - "\62\32\2\u015a\u015b\7\63\2\2\u015b\u0171\5\62\32\2\u015c\u015d\5\62\32"+ - "\2\u015d\u015e\7\b\2\2\u015e\u015f\7B\2\2\u015f\u0171\3\2\2\2\u0160\u0161"+ - "\7\4\2\2\u0161\u0162\5\62\32\2\u0162\u0163\7\5\2\2\u0163\u0164\7\b\2\2"+ - "\u0164\u0165\7B\2\2\u0165\u0171\3\2\2\2\u0166\u0167\7\4\2\2\u0167\u0168"+ - "\5\62\32\2\u0168\u0169\7\b\2\2\u0169\u016a\7B\2\2\u016a\u016b\7\5\2\2"+ - "\u016b\u0171\3\2\2\2\u016c\u016d\7\4\2\2\u016d\u016e\5\62\32\2\u016e\u016f"+ - "\7\5\2\2\u016f\u0171\3\2\2\2\u0170\u0159\3\2\2\2\u0170\u015a\3\2\2\2\u0170"+ - "\u015c\3\2\2\2\u0170\u0160\3\2\2\2\u0170\u0166\3\2\2\2\u0170\u016c\3\2"+ - "\2\2\u0171\61\3\2\2\2\u0172\u0173\b\32\1\2\u0173\u0174\7\30\2\2\u0174"+ - "\u0175\5\62\32\2\u0175\u0176\7\31\2\2\u0176\u0181\3\2\2\2\u0177\u0178"+ - "\t\t\2\2\u0178\u0181\5\62\32\n\u0179\u0181\7B\2\2\u017a\u0181\7C\2\2\u017b"+ - "\u017c\7\6\2\2\u017c\u017d\7B\2\2\u017d\u0181\7\7\2\2\u017e\u0181\79\2"+ - "\2\u017f\u0181\7\67\2\2\u0180\u0172\3\2\2\2\u0180\u0177\3\2\2\2\u0180"+ - "\u0179\3\2\2\2\u0180\u017a\3\2\2\2\u0180\u017b\3\2\2\2\u0180\u017e\3\2"+ - "\2\2\u0180\u017f\3\2\2\2\u0181\u018d\3\2\2\2\u0182\u0183\f\13\2\2\u0183"+ - "\u0184\t\5\2\2\u0184\u018c\5\62\32\f\u0185\u0186\f\t\2\2\u0186\u0187\t"+ - "\n\2\2\u0187\u018c\5\62\32\n\u0188\u0189\f\b\2\2\u0189\u018a\t\7\2\2\u018a"+ - "\u018c\5\62\32\t\u018b\u0182\3\2\2\2\u018b\u0185\3\2\2\2\u018b\u0188\3"+ - "\2\2\2\u018c\u018f\3\2\2\2\u018d\u018b\3\2\2\2\u018d\u018e\3\2\2\2\u018e"+ - "\63\3\2\2\2\u018f\u018d\3\2\2\2)>GMRW^einu|\u0081\u0086\u0093\u00a6\u00ae"+ - "\u00b6\u00b9\u00be\u00ca\u00d0\u00d7\u00da\u00dc\u00e7\u00fd\u0107\u012e"+ - "\u0130\u0138\u013e\u0144\u014a\u014e\u0156\u0170\u0180\u018b\u018d"; + "*,.\60\62\2\13\3\2\33\34\3\2\35!\3\2&\'\3\2\"#\4\2\30\30$%\3\2\35\36\3"+ + "\2&.\4\2\35\36&\'\4\2\30\30$$\2\u01d2\2\64\3\2\2\2\48\3\2\2\2\6>\3\2\2"+ + "\2\bA\3\2\2\2\nE\3\2\2\2\fW\3\2\2\2\16Y\3\2\2\2\20b\3\2\2\2\22h\3\2\2"+ + "\2\24v\3\2\2\2\26\u0083\3\2\2\2\30\u0086\3\2\2\2\32\u00bd\3\2\2\2\34\u00c0"+ + "\3\2\2\2\36\u00d4\3\2\2\2 \u00da\3\2\2\2\"\u0111\3\2\2\2$\u013d\3\2\2"+ + "\2&\u0148\3\2\2\2(\u014e\3\2\2\2*\u0154\3\2\2\2,\u0156\3\2\2\2.\u015a"+ + "\3\2\2\2\60\u017a\3\2\2\2\62\u018a\3\2\2\2\64\65\5\6\4\2\65\66\5\n\6\2"+ + "\66\67\7\2\2\3\67\3\3\2\2\289\5&\24\29:\7\2\2\3:\5\3\2\2\2;=\5\b\5\2<"+ + ";\3\2\2\2=@\3\2\2\2><\3\2\2\2>?\3\2\2\2?\7\3\2\2\2@>\3\2\2\2AB\7\3\2\2"+ + "BC\7\67\2\2C\t\3\2\2\2DF\5\f\7\2ED\3\2\2\2FG\3\2\2\2GE\3\2\2\2GH\3\2\2"+ + "\2H\13\3\2\2\2IJ\5 \21\2JK\7C\2\2KM\7\4\2\2LN\5\16\b\2ML\3\2\2\2MN\3\2"+ + "\2\2NO\3\2\2\2OP\7\5\2\2PR\7\6\2\2QS\5\30\r\2RQ\3\2\2\2RS\3\2\2\2ST\3"+ + "\2\2\2TU\7\7\2\2UX\3\2\2\2VX\5\22\n\2WI\3\2\2\2WV\3\2\2\2X\r\3\2\2\2Y"+ + "^\5\20\t\2Z[\7\b\2\2[]\5\20\t\2\\Z\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2"+ + "\2\2_\17\3\2\2\2`^\3\2\2\2ac\5\24\13\2ba\3\2\2\2bc\3\2\2\2cd\3\2\2\2d"+ + "e\5 \21\2ef\7C\2\2f\21\3\2\2\2gi\5\24\13\2hg\3\2\2\2hi\3\2\2\2ij\3\2\2"+ + "\2jl\5 \21\2km\5\24\13\2lk\3\2\2\2lm\3\2\2\2mn\3\2\2\2nq\7C\2\2op\7\t"+ + "\2\2pr\5\"\22\2qo\3\2\2\2qr\3\2\2\2rs\3\2\2\2st\7\n\2\2t\23\3\2\2\2uw"+ + "\5\26\f\2vu\3\2\2\2wx\3\2\2\2xv\3\2\2\2xy\3\2\2\2y\25\3\2\2\2z\u0084\7"+ + "\13\2\2{|\7\f\2\2|}\7\4\2\2}~\7:\2\2~\u0084\7\5\2\2\177\u0080\7\r\2\2"+ + "\u0080\u0081\7\4\2\2\u0081\u0082\7C\2\2\u0082\u0084\7\5\2\2\u0083z\3\2"+ + "\2\2\u0083{\3\2\2\2\u0083\177\3\2\2\2\u0084\27\3\2\2\2\u0085\u0087\5\32"+ + "\16\2\u0086\u0085\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0086\3\2\2\2\u0088"+ + "\u0089\3\2\2\2\u0089\31\3\2\2\2\u008a\u00be\5\22\n\2\u008b\u008d\7\6\2"+ + "\2\u008c\u008e\5\30\r\2\u008d\u008c\3\2\2\2\u008d\u008e\3\2\2\2\u008e"+ + "\u008f\3\2\2\2\u008f\u00be\7\7\2\2\u0090\u0091\5\"\22\2\u0091\u0092\7"+ + "\n\2\2\u0092\u00be\3\2\2\2\u0093\u0094\7\16\2\2\u0094\u0095\7\4\2\2\u0095"+ + "\u0096\5\"\22\2\u0096\u0097\7\5\2\2\u0097\u009a\5\32\16\2\u0098\u0099"+ + "\7\17\2\2\u0099\u009b\5\32\16\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2"+ + "\2\u009b\u00be\3\2\2\2\u009c\u009d\7\20\2\2\u009d\u009e\7\4\2\2\u009e"+ + "\u009f\5\"\22\2\u009f\u00a0\7\5\2\2\u00a0\u00a1\5\32\16\2\u00a1\u00be"+ + "\3\2\2\2\u00a2\u00a3\7\21\2\2\u00a3\u00a4\5\32\16\2\u00a4\u00a5\7\20\2"+ + "\2\u00a5\u00a6\7\4\2\2\u00a6\u00a7\5\"\22\2\u00a7\u00a8\7\5\2\2\u00a8"+ + "\u00a9\7\n\2\2\u00a9\u00be\3\2\2\2\u00aa\u00ab\7\22\2\2\u00ab\u00ad\7"+ + "\4\2\2\u00ac\u00ae\5\34\17\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae"+ + "\u00af\3\2\2\2\u00af\u00b0\5\36\20\2\u00b0\u00b1\7\5\2\2\u00b1\u00b2\5"+ + "\32\16\2\u00b2\u00be\3\2\2\2\u00b3\u00b5\7\23\2\2\u00b4\u00b6\5\"\22\2"+ + "\u00b5\u00b4\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00be"+ + "\7\n\2\2\u00b8\u00b9\7\24\2\2\u00b9\u00ba\7\6\2\2\u00ba\u00bb\5&\24\2"+ + "\u00bb\u00bc\7\7\2\2\u00bc\u00be\3\2\2\2\u00bd\u008a\3\2\2\2\u00bd\u008b"+ + "\3\2\2\2\u00bd\u0090\3\2\2\2\u00bd\u0093\3\2\2\2\u00bd\u009c\3\2\2\2\u00bd"+ + "\u00a2\3\2\2\2\u00bd\u00aa\3\2\2\2\u00bd\u00b3\3\2\2\2\u00bd\u00b8\3\2"+ + "\2\2\u00be\33\3\2\2\2\u00bf\u00c1\5\24\13\2\u00c0\u00bf\3\2\2\2\u00c0"+ + "\u00c1\3\2\2\2\u00c1\u00c3\3\2\2\2\u00c2\u00c4\5 \21\2\u00c3\u00c2\3\2"+ + "\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c8\7C\2\2\u00c6"+ + "\u00c7\7\t\2\2\u00c7\u00c9\5\"\22\2\u00c8\u00c6\3\2\2\2\u00c8\u00c9\3"+ + "\2\2\2\u00c9\35\3\2\2\2\u00ca\u00cb\7\n\2\2\u00cb\u00cc\5\"\22\2\u00cc"+ + "\u00cd\7\n\2\2\u00cd\u00ce\5\"\22\2\u00ce\u00d5\3\2\2\2\u00cf\u00d0\7"+ + "\25\2\2\u00d0\u00d1\5\"\22\2\u00d1\u00d2\7\26\2\2\u00d2\u00d3\5\"\22\2"+ + "\u00d3\u00d5\3\2\2\2\u00d4\u00ca\3\2\2\2\u00d4\u00cf\3\2\2\2\u00d5\37"+ + "\3\2\2\2\u00d6\u00d7\b\21\1\2\u00d7\u00db\7\66\2\2\u00d8\u00d9\7\27\2"+ + "\2\u00d9\u00db\7\66\2\2\u00da\u00d6\3\2\2\2\u00da\u00d8\3\2\2\2\u00db"+ + "\u00e6\3\2\2\2\u00dc\u00dd\f\4\2\2\u00dd\u00e5\7\30\2\2\u00de\u00df\f"+ + "\3\2\2\u00df\u00e1\7\31\2\2\u00e0\u00e2\5\"\22\2\u00e1\u00e0\3\2\2\2\u00e1"+ + "\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e5\7\32\2\2\u00e4\u00dc\3"+ + "\2\2\2\u00e4\u00de\3\2\2\2\u00e5\u00e8\3\2\2\2\u00e6\u00e4\3\2\2\2\u00e6"+ + "\u00e7\3\2\2\2\u00e7!\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e9\u00ea\b\22\1\2"+ + "\u00ea\u00eb\7\4\2\2\u00eb\u00ec\5\"\22\2\u00ec\u00ed\7\5\2\2\u00ed\u0112"+ + "\3\2\2\2\u00ee\u00ef\7C\2\2\u00ef\u00f1\7\4\2\2\u00f0\u00f2\5$\23\2\u00f1"+ + "\u00f0\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3\u0112\7\5"+ + "\2\2\u00f4\u00f5\7\4\2\2\u00f5\u00f6\5 \21\2\u00f6\u00f7\7\5\2\2\u00f7"+ + "\u00f8\5\"\22\30\u00f8\u0112\3\2\2\2\u00f9\u00fa\t\2\2\2\u00fa\u0112\5"+ + "\"\22\27\u00fb\u00fc\7\30\2\2\u00fc\u0112\5\"\22\25\u00fd\u00fe\t\3\2"+ + "\2\u00fe\u0112\5\"\22\24\u00ff\u0100\t\4\2\2\u0100\u0112\5\"\22\20\u0101"+ + "\u0102\7\6\2\2\u0102\u0107\5\"\22\2\u0103\u0104\7\b\2\2\u0104\u0106\5"+ + "\"\22\2\u0105\u0103\3\2\2\2\u0106\u0109\3\2\2\2\u0107\u0105\3\2\2\2\u0107"+ + "\u0108\3\2\2\2\u0108\u010a\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010b\7\7"+ + "\2\2\u010b\u0112\3\2\2\2\u010c\u0112\7C\2\2\u010d\u0112\7:\2\2\u010e\u0112"+ + "\7\67\2\2\u010f\u0112\78\2\2\u0110\u0112\79\2\2\u0111\u00e9\3\2\2\2\u0111"+ + "\u00ee\3\2\2\2\u0111\u00f4\3\2\2\2\u0111\u00f9\3\2\2\2\u0111\u00fb\3\2"+ + "\2\2\u0111\u00fd\3\2\2\2\u0111\u00ff\3\2\2\2\u0111\u0101\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\u013a\3\2\2\2\u0113\u0114\f\23\2\2\u0114"+ + "\u0115\t\5\2\2\u0115\u0139\5\"\22\24\u0116\u0117\f\22\2\2\u0117\u0118"+ + "\t\6\2\2\u0118\u0139\5\"\22\23\u0119\u011a\f\21\2\2\u011a\u011b\t\7\2"+ + "\2\u011b\u0139\5\"\22\22\u011c\u011d\f\17\2\2\u011d\u011e\t\b\2\2\u011e"+ + "\u0139\5\"\22\20\u011f\u0120\f\16\2\2\u0120\u0121\7 \2\2\u0121\u0139\5"+ + "\"\22\17\u0122\u0123\f\r\2\2\u0123\u0124\7/\2\2\u0124\u0139\5\"\22\16"+ + "\u0125\u0126\f\f\2\2\u0126\u0127\7\60\2\2\u0127\u0139\5\"\22\r\u0128\u0129"+ + "\f\13\2\2\u0129\u012a\7\61\2\2\u012a\u0139\5\"\22\f\u012b\u012c\f\n\2"+ + "\2\u012c\u012d\7\62\2\2\u012d\u0139\5\"\22\13\u012e\u012f\f\t\2\2\u012f"+ + "\u0130\7\t\2\2\u0130\u0139\5\"\22\t\u0131\u0132\f\31\2\2\u0132\u0133\7"+ + "\31\2\2\u0133\u0134\5\"\22\2\u0134\u0135\7\32\2\2\u0135\u0139\3\2\2\2"+ + "\u0136\u0137\f\26\2\2\u0137\u0139\t\2\2\2\u0138\u0113\3\2\2\2\u0138\u0116"+ + "\3\2\2\2\u0138\u0119\3\2\2\2\u0138\u011c\3\2\2\2\u0138\u011f\3\2\2\2\u0138"+ + "\u0122\3\2\2\2\u0138\u0125\3\2\2\2\u0138\u0128\3\2\2\2\u0138\u012b\3\2"+ + "\2\2\u0138\u012e\3\2\2\2\u0138\u0131\3\2\2\2\u0138\u0136\3\2\2\2\u0139"+ + "\u013c\3\2\2\2\u013a\u0138\3\2\2\2\u013a\u013b\3\2\2\2\u013b#\3\2\2\2"+ + "\u013c\u013a\3\2\2\2\u013d\u0142\5\"\22\2\u013e\u013f\7\b\2\2\u013f\u0141"+ + "\5\"\22\2\u0140\u013e\3\2\2\2\u0141\u0144\3\2\2\2\u0142\u0140\3\2\2\2"+ + "\u0142\u0143\3\2\2\2\u0143%\3\2\2\2\u0144\u0142\3\2\2\2\u0145\u0147\5"+ + "(\25\2\u0146\u0145\3\2\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0148"+ + "\u0149\3\2\2\2\u0149\'\3\2\2\2\u014a\u0148\3\2\2\2\u014b\u014f\5*\26\2"+ + "\u014c\u014f\5,\27\2\u014d\u014f\5.\30\2\u014e\u014b\3\2\2\2\u014e\u014c"+ + "\3\2\2\2\u014e\u014d\3\2\2\2\u014f)\3\2\2\2\u0150\u0151\7C\2\2\u0151\u0155"+ + "\7\25\2\2\u0152\u0153\7\37\2\2\u0153\u0155\7\25\2\2\u0154\u0150\3\2\2"+ + "\2\u0154\u0152\3\2\2\2\u0155+\3\2\2\2\u0156\u0158\7\65\2\2\u0157\u0159"+ + "\5\60\31\2\u0158\u0157\3\2\2\2\u0158\u0159\3\2\2\2\u0159-\3\2\2\2\u015a"+ + "\u015b\7\63\2\2\u015b\u0160\5\62\32\2\u015c\u015d\7\b\2\2\u015d\u015f"+ + "\5\62\32\2\u015e\u015c\3\2\2\2\u015f\u0162\3\2\2\2\u0160\u015e\3\2\2\2"+ + "\u0160\u0161\3\2\2\2\u0161/\3\2\2\2\u0162\u0160\3\2\2\2\u0163\u017b\5"+ + "\62\32\2\u0164\u0165\7\64\2\2\u0165\u017b\5\62\32\2\u0166\u0167\5\62\32"+ + "\2\u0167\u0168\7\b\2\2\u0168\u0169\7C\2\2\u0169\u017b\3\2\2\2\u016a\u016b"+ + "\7\4\2\2\u016b\u016c\5\62\32\2\u016c\u016d\7\5\2\2\u016d\u016e\7\b\2\2"+ + "\u016e\u016f\7C\2\2\u016f\u017b\3\2\2\2\u0170\u0171\7\4\2\2\u0171\u0172"+ + "\5\62\32\2\u0172\u0173\7\b\2\2\u0173\u0174\7C\2\2\u0174\u0175\7\5\2\2"+ + "\u0175\u017b\3\2\2\2\u0176\u0177\7\4\2\2\u0177\u0178\5\62\32\2\u0178\u0179"+ + "\7\5\2\2\u0179\u017b\3\2\2\2\u017a\u0163\3\2\2\2\u017a\u0164\3\2\2\2\u017a"+ + "\u0166\3\2\2\2\u017a\u016a\3\2\2\2\u017a\u0170\3\2\2\2\u017a\u0176\3\2"+ + "\2\2\u017b\61\3\2\2\2\u017c\u017d\b\32\1\2\u017d\u017e\7\31\2\2\u017e"+ + "\u017f\5\62\32\2\u017f\u0180\7\32\2\2\u0180\u018b\3\2\2\2\u0181\u0182"+ + "\t\t\2\2\u0182\u018b\5\62\32\n\u0183\u018b\7C\2\2\u0184\u018b\7D\2\2\u0185"+ + "\u0186\7\6\2\2\u0186\u0187\7C\2\2\u0187\u018b\7\7\2\2\u0188\u018b\7:\2"+ + "\2\u0189\u018b\78\2\2\u018a\u017c\3\2\2\2\u018a\u0181\3\2\2\2\u018a\u0183"+ + "\3\2\2\2\u018a\u0184\3\2\2\2\u018a\u0185\3\2\2\2\u018a\u0188\3\2\2\2\u018a"+ + "\u0189\3\2\2\2\u018b\u0197\3\2\2\2\u018c\u018d\f\13\2\2\u018d\u018e\t"+ + "\5\2\2\u018e\u0196\5\62\32\f\u018f\u0190\f\t\2\2\u0190\u0191\t\n\2\2\u0191"+ + "\u0196\5\62\32\n\u0192\u0193\f\b\2\2\u0193\u0194\t\7\2\2\u0194\u0196\5"+ + "\62\32\t\u0195\u018c\3\2\2\2\u0195\u018f\3\2\2\2\u0195\u0192\3\2\2\2\u0196"+ + "\u0199\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198\63\3\2\2"+ + "\2\u0199\u0197\3\2\2\2+>GMRW^bhlqx\u0083\u0088\u008d\u009a\u00ad\u00b5"+ + "\u00bd\u00c0\u00c3\u00c8\u00d4\u00da\u00e1\u00e4\u00e6\u00f1\u0107\u0111"+ + "\u0138\u013a\u0142\u0148\u014e\u0154\u0158\u0160\u017a\u018a\u0195\u0197"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java index 6801f007a..2d6ca130f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java @@ -92,6 +92,13 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDirectiveAlign(KickCParser.DirectiveAlignContext ctx); + /** + * Visit a parse tree produced by the {@code directiveRegister} + * labeled alternative in {@link KickCParser#directive}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectiveRegister(KickCParser.DirectiveRegisterContext ctx); /** * Visit a parse tree produced by {@link KickCParser#stmtSeq}. * @param ctx the parse tree diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index f9192f056..723feda5d 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -42,6 +42,11 @@ public class TestPrograms { AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false); } + @Test + public void testVarRegister() throws IOException, URISyntaxException { + compileAndCompare("var-register"); + } + @Test public void testDword() throws IOException, URISyntaxException { compileAndCompare("dword"); diff --git a/src/test/java/dk/camelot64/kickc/test/kc/var-register.kc b/src/test/java/dk/camelot64/kickc/test/kc/var-register.kc new file mode 100644 index 000000000..5d183f76c --- /dev/null +++ b/src/test/java/dk/camelot64/kickc/test/kc/var-register.kc @@ -0,0 +1,16 @@ + + +void main() { + for( register(X) byte x: 0..100 ) { + for( byte y: 0..100 ) { + for( byte a: 0..100 ) { + print(y, a+x); + } + } + } +} + +void print(byte idx, register(y) byte val) { + byte* SCREEN = $0400; + SCREEN[idx] = val; +} \ No newline at end of file