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 extends T> visitor) {
+ if ( visitor instanceof KickCVisitor ) return ((KickCVisitor extends T>)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