1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-29 18:49:42 +00:00

Fixed import parsing by introducing another lexer mode.

This commit is contained in:
jespergravgaard 2020-04-10 01:25:08 +02:00
parent 8c5500822c
commit b36a8b087c
9 changed files with 905 additions and 838 deletions

View File

@ -10,8 +10,6 @@ tokens { TYPEDEFNAME }
/** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */ /** The C-Parser. Used for importing C-files and communicating with the Parser about typedefs. */
CParser cParser; CParser cParser;
/** True of the next string is the name of a C-file to import*/
boolean importEnter = false;
/** True if the next CURLY starts ASM_MODE */ /** True if the next CURLY starts ASM_MODE */
boolean asmEnter = false; boolean asmEnter = false;
/** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */ /** Counts the nested curlies inside ASM_MODE to determine when to exit ASM_MODE */
@ -118,8 +116,8 @@ BOOLEAN : 'true' | 'false';
KICKASM_BODY: '{{' .*? '}}'; KICKASM_BODY: '{{' .*? '}}';
// Preprocessor // Preprocessor
IMPORT: '#import' { importEnter=true; } ; IMPORT: '#import' { pushMode(IMPORT_MODE); } ;
INCLUDE: '#include' { importEnter=true; } ; INCLUDE: '#include' { pushMode(IMPORT_MODE); } ;
PRAGMA: '#pragma' ; PRAGMA: '#pragma' ;
DEFINE: '#define' ; DEFINE: '#define' ;
DEFINE_CONTINUE: '\\\n' | '\\\r\n'; DEFINE_CONTINUE: '\\\n' | '\\\r\n';
@ -150,9 +148,8 @@ NAME : NAME_START NAME_CHAR* {if(cParser.isTypedef(getText())) setType(TYPEDEFNA
fragment NAME_START : [a-zA-Z_]; fragment NAME_START : [a-zA-Z_];
fragment NAME_CHAR : [a-zA-Z0-9_]; fragment NAME_CHAR : [a-zA-Z0-9_];
// Strings and chars - with special handling of imports // Strings and chars
SYSTEMFILE : '<' [a-zA-Z0-9_./\\\-]+ '>' { if(importEnter) { importEnter=false; cParser.loadCFile(getText(), true); } } ; STRING : '"' ('\\"' | ~'"')* '"' [z]?([ps][mu]?)?[z]? ;
STRING : '"' ('\\"' | ~'"')* '"' [z]?([ps][mu]?)?[z]? { if(importEnter) { importEnter=false; cParser.loadCFile(getText(), false); } } ;
CHAR : '\'' ('\\'['"rfn] | ~'\'' ) '\''; CHAR : '\'' ('\\'['"rfn] | ~'\'' ) '\'';
// White space on hidden channel 1 // White space on hidden channel 1
@ -221,3 +218,14 @@ ASM_WS : [ \t\r\n\u00a0]+ -> channel(1);
// Comments on hidden channel 2 // Comments on hidden channel 2
ASM_COMMENT_LINE : '//' ~[\r\n]* -> channel(2); ASM_COMMENT_LINE : '//' ~[\r\n]* -> channel(2);
ASM_COMMENT_BLOCK : '/*' .*? '*/' -> channel(2); ASM_COMMENT_BLOCK : '/*' .*? '*/' -> channel(2);
// MODE FOR INCLUDE FILES
mode IMPORT_MODE;
IMPORT_SYSTEMFILE : '<' [a-zA-Z0-9_./\\\-]+ '>' { popMode();cParser.loadCFile(getText(), true); } ;
IMPORT_LOCALFILE : '"' ('\\"' | ~'"')* '"' { popMode(); cParser.loadCFile(getText(), false); } ;
// White space on hidden channel 1
IMPORT_WS : [ \t\r\n\u00a0]+ -> channel(1);
// Comments on hidden channel 2
IMPORT_COMMENT_LINE : '//' ~[\r\n]* -> channel(2);
IMPORT_COMMENT_BLOCK : '/*' .*? '*/' -> channel(2);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -111,48 +111,52 @@ BININTEGER=110
DECINTEGER=111 DECINTEGER=111
HEXINTEGER=112 HEXINTEGER=112
NAME=113 NAME=113
SYSTEMFILE=114 STRING=114
STRING=115 CHAR=115
CHAR=116 WS=116
WS=117 COMMENT_LINE=117
COMMENT_LINE=118 COMMENT_BLOCK=118
COMMENT_BLOCK=119 ASM_BYTE=119
ASM_BYTE=120 ASM_MNEMONIC=120
ASM_MNEMONIC=121 ASM_IMM=121
ASM_IMM=122 ASM_COLON=122
ASM_COLON=123 ASM_COMMA=123
ASM_COMMA=124 ASM_PAR_BEGIN=124
ASM_PAR_BEGIN=125 ASM_PAR_END=125
ASM_PAR_END=126 ASM_BRACKET_BEGIN=126
ASM_BRACKET_BEGIN=127 ASM_BRACKET_END=127
ASM_BRACKET_END=128 ASM_DOT=128
ASM_DOT=129 ASM_SHIFT_LEFT=129
ASM_SHIFT_LEFT=130 ASM_SHIFT_RIGHT=130
ASM_SHIFT_RIGHT=131 ASM_PLUS=131
ASM_PLUS=132 ASM_MINUS=132
ASM_MINUS=133 ASM_LESS_THAN=133
ASM_LESS_THAN=134 ASM_GREATER_THAN=134
ASM_GREATER_THAN=135 ASM_MULTIPLY=135
ASM_MULTIPLY=136 ASM_DIVIDE=136
ASM_DIVIDE=137 ASM_CURLY_BEGIN=137
ASM_CURLY_BEGIN=138 ASM_CURLY_END=138
ASM_CURLY_END=139 ASM_NUMBER=139
ASM_NUMBER=140 ASM_NUMFLOAT=140
ASM_NUMFLOAT=141 ASM_BINFLOAT=141
ASM_BINFLOAT=142 ASM_DECFLOAT=142
ASM_DECFLOAT=143 ASM_HEXFLOAT=143
ASM_HEXFLOAT=144 ASM_NUMINT=144
ASM_NUMINT=145 ASM_BININTEGER=145
ASM_BININTEGER=146 ASM_DECINTEGER=146
ASM_DECINTEGER=147 ASM_HEXINTEGER=147
ASM_HEXINTEGER=148 ASM_CHAR=148
ASM_CHAR=149 ASM_MULTI_REL=149
ASM_MULTI_REL=150 ASM_MULTI_NAME=150
ASM_MULTI_NAME=151 ASM_NAME=151
ASM_NAME=152 ASM_WS=152
ASM_WS=153 ASM_COMMENT_LINE=153
ASM_COMMENT_LINE=154 ASM_COMMENT_BLOCK=154
ASM_COMMENT_BLOCK=155 IMPORT_SYSTEMFILE=155
IMPORT_LOCALFILE=156
IMPORT_WS=157
IMPORT_COMMENT_LINE=158
IMPORT_COMMENT_BLOCK=159
';'=8 ';'=8
'..'=11 '..'=11
'?'=12 '?'=12
@ -231,5 +235,5 @@ ASM_COMMENT_BLOCK=155
'#elif'=101 '#elif'=101
'#else'=102 '#else'=102
'#endif'=103 '#endif'=103
'.byte'=120 '.byte'=119
'#'=122 '#'=121

View File

@ -35,9 +35,9 @@ declOrImport
; ;
importDecl importDecl
: IMPORT STRING #importFile : IMPORT IMPORT_LOCALFILE #importFile
| INCLUDE STRING #includeFile | INCLUDE IMPORT_LOCALFILE #includeFile
| INCLUDE SYSTEMFILE #includeSystem | INCLUDE IMPORT_SYSTEMFILE #includeSystem
; ;
decl decl

File diff suppressed because one or more lines are too long

View File

@ -37,16 +37,18 @@ public class KickCParser extends Parser {
INCLUDE=93, PRAGMA=94, DEFINE=95, DEFINE_CONTINUE=96, UNDEF=97, IFDEF=98, INCLUDE=93, PRAGMA=94, DEFINE=95, DEFINE_CONTINUE=96, UNDEF=97, IFDEF=98,
IFNDEF=99, IFIF=100, ELIF=101, IFELSE=102, ENDIF=103, NUMBER=104, NUMFLOAT=105, IFNDEF=99, IFIF=100, ELIF=101, IFELSE=102, ENDIF=103, NUMBER=104, NUMFLOAT=105,
BINFLOAT=106, DECFLOAT=107, HEXFLOAT=108, NUMINT=109, BININTEGER=110, BINFLOAT=106, DECFLOAT=107, HEXFLOAT=108, NUMINT=109, BININTEGER=110,
DECINTEGER=111, HEXINTEGER=112, NAME=113, SYSTEMFILE=114, STRING=115, DECINTEGER=111, HEXINTEGER=112, NAME=113, STRING=114, CHAR=115, WS=116,
CHAR=116, WS=117, COMMENT_LINE=118, COMMENT_BLOCK=119, ASM_BYTE=120, ASM_MNEMONIC=121, COMMENT_LINE=117, COMMENT_BLOCK=118, ASM_BYTE=119, ASM_MNEMONIC=120, ASM_IMM=121,
ASM_IMM=122, ASM_COLON=123, ASM_COMMA=124, ASM_PAR_BEGIN=125, ASM_PAR_END=126, ASM_COLON=122, ASM_COMMA=123, ASM_PAR_BEGIN=124, ASM_PAR_END=125, ASM_BRACKET_BEGIN=126,
ASM_BRACKET_BEGIN=127, ASM_BRACKET_END=128, ASM_DOT=129, ASM_SHIFT_LEFT=130, ASM_BRACKET_END=127, ASM_DOT=128, ASM_SHIFT_LEFT=129, ASM_SHIFT_RIGHT=130,
ASM_SHIFT_RIGHT=131, ASM_PLUS=132, ASM_MINUS=133, ASM_LESS_THAN=134, ASM_GREATER_THAN=135, ASM_PLUS=131, ASM_MINUS=132, ASM_LESS_THAN=133, ASM_GREATER_THAN=134,
ASM_MULTIPLY=136, ASM_DIVIDE=137, ASM_CURLY_BEGIN=138, ASM_CURLY_END=139, ASM_MULTIPLY=135, ASM_DIVIDE=136, ASM_CURLY_BEGIN=137, ASM_CURLY_END=138,
ASM_NUMBER=140, ASM_NUMFLOAT=141, ASM_BINFLOAT=142, ASM_DECFLOAT=143, ASM_NUMBER=139, ASM_NUMFLOAT=140, ASM_BINFLOAT=141, ASM_DECFLOAT=142,
ASM_HEXFLOAT=144, ASM_NUMINT=145, ASM_BININTEGER=146, ASM_DECINTEGER=147, ASM_HEXFLOAT=143, ASM_NUMINT=144, ASM_BININTEGER=145, ASM_DECINTEGER=146,
ASM_HEXINTEGER=148, ASM_CHAR=149, ASM_MULTI_REL=150, ASM_MULTI_NAME=151, ASM_HEXINTEGER=147, ASM_CHAR=148, ASM_MULTI_REL=149, ASM_MULTI_NAME=150,
ASM_NAME=152, ASM_WS=153, ASM_COMMENT_LINE=154, ASM_COMMENT_BLOCK=155; ASM_NAME=151, ASM_WS=152, ASM_COMMENT_LINE=153, ASM_COMMENT_BLOCK=154,
IMPORT_SYSTEMFILE=155, IMPORT_LOCALFILE=156, IMPORT_WS=157, IMPORT_COMMENT_LINE=158,
IMPORT_COMMENT_BLOCK=159;
public static final int public static final int
RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3, RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3,
RULE_importDecl = 4, RULE_decl = 5, RULE_declVariables = 6, RULE_declVariableList = 7, RULE_importDecl = 4, RULE_decl = 5, RULE_declVariables = 6, RULE_declVariableList = 7,
@ -92,7 +94,7 @@ public class KickCParser extends Parser {
"'cycles'", "'!'", null, null, null, null, "'#import'", "'#include'", "'cycles'", "'!'", null, null, null, null, "'#import'", "'#include'",
"'#pragma'", "'#define'", null, "'#undef'", "'#ifdef'", "'#ifndef'", "'#pragma'", "'#define'", null, "'#undef'", "'#ifdef'", "'#ifndef'",
"'#if'", "'#elif'", "'#else'", "'#endif'", null, null, null, null, null, "'#if'", "'#elif'", "'#else'", "'#endif'", null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, "'.byte'", null, null, null, null, null, null, null, null, null, null, "'.byte'",
null, "'#'" null, "'#'"
}; };
} }
@ -116,14 +118,16 @@ public class KickCParser extends Parser {
"PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF", "PRAGMA", "DEFINE", "DEFINE_CONTINUE", "UNDEF", "IFDEF", "IFNDEF", "IFIF",
"ELIF", "IFELSE", "ENDIF", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "ELIF", "IFELSE", "ENDIF", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT",
"HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME",
"SYSTEMFILE", "STRING", "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "STRING", "CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK", "ASM_BYTE",
"ASM_BYTE", "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN", "ASM_MNEMONIC", "ASM_IMM", "ASM_COLON", "ASM_COMMA", "ASM_PAR_BEGIN",
"ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT", "ASM_PAR_END", "ASM_BRACKET_BEGIN", "ASM_BRACKET_END", "ASM_DOT", "ASM_SHIFT_LEFT",
"ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN", "ASM_SHIFT_RIGHT", "ASM_PLUS", "ASM_MINUS", "ASM_LESS_THAN", "ASM_GREATER_THAN",
"ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER", "ASM_MULTIPLY", "ASM_DIVIDE", "ASM_CURLY_BEGIN", "ASM_CURLY_END", "ASM_NUMBER",
"ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT", "ASM_NUMFLOAT", "ASM_BINFLOAT", "ASM_DECFLOAT", "ASM_HEXFLOAT", "ASM_NUMINT",
"ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL", "ASM_BININTEGER", "ASM_DECINTEGER", "ASM_HEXINTEGER", "ASM_CHAR", "ASM_MULTI_REL",
"ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK" "ASM_MULTI_NAME", "ASM_NAME", "ASM_WS", "ASM_COMMENT_LINE", "ASM_COMMENT_BLOCK",
"IMPORT_SYSTEMFILE", "IMPORT_LOCALFILE", "IMPORT_WS", "IMPORT_COMMENT_LINE",
"IMPORT_COMMENT_BLOCK"
}; };
} }
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@ -440,7 +444,7 @@ public class KickCParser extends Parser {
} }
public static class IncludeFileContext extends ImportDeclContext { public static class IncludeFileContext extends ImportDeclContext {
public TerminalNode INCLUDE() { return getToken(KickCParser.INCLUDE, 0); } public TerminalNode INCLUDE() { return getToken(KickCParser.INCLUDE, 0); }
public TerminalNode STRING() { return getToken(KickCParser.STRING, 0); } public TerminalNode IMPORT_LOCALFILE() { return getToken(KickCParser.IMPORT_LOCALFILE, 0); }
public IncludeFileContext(ImportDeclContext ctx) { copyFrom(ctx); } public IncludeFileContext(ImportDeclContext ctx) { copyFrom(ctx); }
@Override @Override
public void enterRule(ParseTreeListener listener) { public void enterRule(ParseTreeListener listener) {
@ -458,7 +462,7 @@ public class KickCParser extends Parser {
} }
public static class IncludeSystemContext extends ImportDeclContext { public static class IncludeSystemContext extends ImportDeclContext {
public TerminalNode INCLUDE() { return getToken(KickCParser.INCLUDE, 0); } public TerminalNode INCLUDE() { return getToken(KickCParser.INCLUDE, 0); }
public TerminalNode SYSTEMFILE() { return getToken(KickCParser.SYSTEMFILE, 0); } public TerminalNode IMPORT_SYSTEMFILE() { return getToken(KickCParser.IMPORT_SYSTEMFILE, 0); }
public IncludeSystemContext(ImportDeclContext ctx) { copyFrom(ctx); } public IncludeSystemContext(ImportDeclContext ctx) { copyFrom(ctx); }
@Override @Override
public void enterRule(ParseTreeListener listener) { public void enterRule(ParseTreeListener listener) {
@ -476,7 +480,7 @@ public class KickCParser extends Parser {
} }
public static class ImportFileContext extends ImportDeclContext { public static class ImportFileContext extends ImportDeclContext {
public TerminalNode IMPORT() { return getToken(KickCParser.IMPORT, 0); } public TerminalNode IMPORT() { return getToken(KickCParser.IMPORT, 0); }
public TerminalNode STRING() { return getToken(KickCParser.STRING, 0); } public TerminalNode IMPORT_LOCALFILE() { return getToken(KickCParser.IMPORT_LOCALFILE, 0); }
public ImportFileContext(ImportDeclContext ctx) { copyFrom(ctx); } public ImportFileContext(ImportDeclContext ctx) { copyFrom(ctx); }
@Override @Override
public void enterRule(ParseTreeListener listener) { public void enterRule(ParseTreeListener listener) {
@ -507,7 +511,7 @@ public class KickCParser extends Parser {
setState(110); setState(110);
match(IMPORT); match(IMPORT);
setState(111); setState(111);
match(STRING); match(IMPORT_LOCALFILE);
} }
break; break;
case 2: case 2:
@ -517,7 +521,7 @@ public class KickCParser extends Parser {
setState(112); setState(112);
match(INCLUDE); match(INCLUDE);
setState(113); setState(113);
match(STRING); match(IMPORT_LOCALFILE);
} }
break; break;
case 3: case 3:
@ -527,7 +531,7 @@ public class KickCParser extends Parser {
setState(114); setState(114);
match(INCLUDE); match(INCLUDE);
setState(115); setState(115);
match(SYSTEMFILE); match(IMPORT_SYSTEMFILE);
} }
break; break;
} }
@ -6367,7 +6371,7 @@ public class KickCParser extends Parser {
setState(803); setState(803);
_errHandler.sync(this); _errHandler.sync(this);
_la = _input.LA(1); _la = _input.LA(1);
while (((((_la - 120)) & ~0x3f) == 0 && ((1L << (_la - 120)) & ((1L << (ASM_BYTE - 120)) | (1L << (ASM_MNEMONIC - 120)) | (1L << (ASM_MULTI_NAME - 120)) | (1L << (ASM_NAME - 120)))) != 0)) { while (((((_la - 119)) & ~0x3f) == 0 && ((1L << (_la - 119)) & ((1L << (ASM_BYTE - 119)) | (1L << (ASM_MNEMONIC - 119)) | (1L << (ASM_MULTI_NAME - 119)) | (1L << (ASM_NAME - 119)))) != 0)) {
{ {
{ {
setState(800); setState(800);
@ -7128,7 +7132,7 @@ public class KickCParser extends Parser {
_prevctx = _localctx; _prevctx = _localctx;
setState(860); setState(860);
_la = _input.LA(1); _la = _input.LA(1);
if ( !(((((_la - 132)) & ~0x3f) == 0 && ((1L << (_la - 132)) & ((1L << (ASM_PLUS - 132)) | (1L << (ASM_MINUS - 132)) | (1L << (ASM_LESS_THAN - 132)) | (1L << (ASM_GREATER_THAN - 132)))) != 0)) ) { if ( !(((((_la - 131)) & ~0x3f) == 0 && ((1L << (_la - 131)) & ((1L << (ASM_PLUS - 131)) | (1L << (ASM_MINUS - 131)) | (1L << (ASM_LESS_THAN - 131)) | (1L << (ASM_GREATER_THAN - 131)))) != 0)) ) {
_errHandler.recoverInline(this); _errHandler.recoverInline(this);
} }
else { else {
@ -7410,7 +7414,7 @@ public class KickCParser extends Parser {
} }
public static final String _serializedATN = public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u009d\u037b\4\2\t"+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u00a1\u037b\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"+ "\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"+ "\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\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"+
@ -7477,8 +7481,8 @@ public class KickCParser extends Parser {
"\3\60\3\60\3\60\3\60\3\60\3\60\7\60\u0376\n\60\f\60\16\60\u0379\13\60"+ "\3\60\3\60\3\60\3\60\3\60\3\60\7\60\u0376\n\60\f\60\16\60\u0379\13\60"+
"\3\60\2\t\20\34\36*FH^\61\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&"+ "\3\60\2\t\20\34\36*FH^\61\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&"+
"(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^\2\r\3\2\26\27\5\2\21\22\30\31YY"+ "(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^\2\r\3\2\26\27\5\2\21\22\30\31YY"+
"\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3\2\u0086\u0089\3\2\u0084"+ "\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3\2\u0085\u0088\3\2\u0083"+
"\u0085\3\2\u008a\u008b\3\2\u0086\u0087\2\u03fc\2`\3\2\2\2\4c\3\2\2\2\6"+ "\u0084\3\2\u0089\u008a\3\2\u0085\u0086\2\u03fc\2`\3\2\2\2\4c\3\2\2\2\6"+
"i\3\2\2\2\bn\3\2\2\2\nv\3\2\2\2\f\u0087\3\2\2\2\16\u0089\3\2\2\2\20\u008c"+ "i\3\2\2\2\bn\3\2\2\2\nv\3\2\2\2\f\u0087\3\2\2\2\16\u0089\3\2\2\2\20\u008c"+
"\3\2\2\2\22\u00a3\3\2\2\2\24\u00c8\3\2\2\2\26\u00cd\3\2\2\2\30\u00d7\3"+ "\3\2\2\2\22\u00a3\3\2\2\2\24\u00c8\3\2\2\2\26\u00cd\3\2\2\2\30\u00d7\3"+
"\2\2\2\32\u00de\3\2\2\2\34\u00e4\3\2\2\2\36\u0103\3\2\2\2 \u0113\3\2\2"+ "\2\2\2\32\u00de\3\2\2\2\34\u00e4\3\2\2\2\36\u0103\3\2\2\2 \u0113\3\2\2"+
@ -7491,62 +7495,62 @@ public class KickCParser extends Parser {
"\3\2\2\2Z\u0337\3\2\2\2\\\u0357\3\2\2\2^\u0367\3\2\2\2`a\5\6\4\2ab\7\2"+ "\3\2\2\2Z\u0337\3\2\2\2\\\u0357\3\2\2\2^\u0367\3\2\2\2`a\5\6\4\2ab\7\2"+
"\2\3b\3\3\2\2\2cd\5R*\2de\7\2\2\3e\5\3\2\2\2fh\5\b\5\2gf\3\2\2\2hk\3\2"+ "\2\3b\3\3\2\2\2cd\5R*\2de\7\2\2\3e\5\3\2\2\2fh\5\b\5\2gf\3\2\2\2hk\3\2"+
"\2\2ig\3\2\2\2ij\3\2\2\2j\7\3\2\2\2ki\3\2\2\2lo\5\f\7\2mo\5\n\6\2nl\3"+ "\2\2ig\3\2\2\2ij\3\2\2\2j\7\3\2\2\2ki\3\2\2\2lo\5\f\7\2mo\5\n\6\2nl\3"+
"\2\2\2nm\3\2\2\2o\t\3\2\2\2pq\7^\2\2qw\7u\2\2rs\7_\2\2sw\7u\2\2tu\7_\2"+ "\2\2\2nm\3\2\2\2o\t\3\2\2\2pq\7^\2\2qw\7\u009e\2\2rs\7_\2\2sw\7\u009e"+
"\2uw\7t\2\2vp\3\2\2\2vr\3\2\2\2vt\3\2\2\2w\13\3\2\2\2xy\5\16\b\2yz\7\n"+ "\2\2tu\7_\2\2uw\7\u009d\2\2vp\3\2\2\2vr\3\2\2\2vt\3\2\2\2w\13\3\2\2\2"+
"\2\2z\u0088\3\2\2\2{|\5\"\22\2|}\7\n\2\2}\u0088\3\2\2\2~\177\5(\25\2\177"+ "xy\5\16\b\2yz\7\n\2\2z\u0088\3\2\2\2{|\5\"\22\2|}\7\n\2\2}\u0088\3\2\2"+
"\u0080\7\n\2\2\u0080\u0088\3\2\2\2\u0081\u0088\5.\30\2\u0082\u0088\5L"+ "\2~\177\5(\25\2\177\u0080\7\n\2\2\u0080\u0088\3\2\2\2\u0081\u0088\5.\30"+
"\'\2\u0083\u0088\5\66\34\2\u0084\u0085\5\22\n\2\u0085\u0086\7\n\2\2\u0086"+ "\2\u0082\u0088\5L\'\2\u0083\u0088\5\66\34\2\u0084\u0085\5\22\n\2\u0085"+
"\u0088\3\2\2\2\u0087x\3\2\2\2\u0087{\3\2\2\2\u0087~\3\2\2\2\u0087\u0081"+ "\u0086\7\n\2\2\u0086\u0088\3\2\2\2\u0087x\3\2\2\2\u0087{\3\2\2\2\u0087"+
"\3\2\2\2\u0087\u0082\3\2\2\2\u0087\u0083\3\2\2\2\u0087\u0084\3\2\2\2\u0088"+ "~\3\2\2\2\u0087\u0081\3\2\2\2\u0087\u0082\3\2\2\2\u0087\u0083\3\2\2\2"+
"\r\3\2\2\2\u0089\u008a\5\26\f\2\u008a\u008b\5\20\t\2\u008b\17\3\2\2\2"+ "\u0087\u0084\3\2\2\2\u0088\r\3\2\2\2\u0089\u008a\5\26\f\2\u008a\u008b"+
"\u008c\u0090\b\t\1\2\u008d\u008f\5\30\r\2\u008e\u008d\3\2\2\2\u008f\u0092"+ "\5\20\t\2\u008b\17\3\2\2\2\u008c\u0090\b\t\1\2\u008d\u008f\5\30\r\2\u008e"+
"\3\2\2\2\u0090\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0093\3\2\2\2\u0092"+ "\u008d\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090\u0091\3\2"+
"\u0090\3\2\2\2\u0093\u0094\5\24\13\2\u0094\u00a0\3\2\2\2\u0095\u0096\f"+ "\2\2\u0091\u0093\3\2\2\2\u0092\u0090\3\2\2\2\u0093\u0094\5\24\13\2\u0094"+
"\3\2\2\u0096\u009a\7\f\2\2\u0097\u0099\5\30\r\2\u0098\u0097\3\2\2\2\u0099"+ "\u00a0\3\2\2\2\u0095\u0096\f\3\2\2\u0096\u009a\7\f\2\2\u0097\u0099\5\30"+
"\u009c\3\2\2\2\u009a\u0098\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009d\3\2"+ "\r\2\u0098\u0097\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3\2\2\2\u009a"+
"\2\2\u009c\u009a\3\2\2\2\u009d\u009f\5\24\13\2\u009e\u0095\3\2\2\2\u009f"+ "\u009b\3\2\2\2\u009b\u009d\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u009f\5\24"+
"\u00a2\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\21\3\2\2"+ "\13\2\u009e\u0095\3\2\2\2\u009f\u00a2\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0"+
"\2\u00a2\u00a0\3\2\2\2\u00a3\u00a4\7(\2\2\u00a4\u00a8\5\26\f\2\u00a5\u00a7"+ "\u00a1\3\2\2\2\u00a1\21\3\2\2\2\u00a2\u00a0\3\2\2\2\u00a3\u00a4\7(\2\2"+
"\5\30\r\2\u00a6\u00a5\3\2\2\2\u00a7\u00aa\3\2\2\2\u00a8\u00a6\3\2\2\2"+ "\u00a4\u00a8\5\26\f\2\u00a5\u00a7\5\30\r\2\u00a6\u00a5\3\2\2\2\u00a7\u00aa"+
"\u00a8\u00a9\3\2\2\2\u00a9\u00ab\3\2\2\2\u00aa\u00a8\3\2\2\2\u00ab\u00af"+ "\3\2\2\2\u00a8\u00a6\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00ab\3\2\2\2\u00aa"+
"\7s\2\2\u00ac\u00ae\5\32\16\2\u00ad\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2"+ "\u00a8\3\2\2\2\u00ab\u00af\7s\2\2\u00ac\u00ae\5\32\16\2\u00ad\u00ac\3"+
"\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00b2\3\2\2\2\u00b1\u00af"+ "\2\2\2\u00ae\u00b1\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0"+
"\3\2\2\2\u00b2\u00b3\b\n\1\2\u00b3\23\3\2\2\2\u00b4\u00b8\7s\2\2\u00b5"+ "\u00b2\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b3\b\n\1\2\u00b3\23\3\2\2"+
"\u00b7\5\32\16\2\u00b6\u00b5\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3"+ "\2\u00b4\u00b8\7s\2\2\u00b5\u00b7\5\32\16\2\u00b6\u00b5\3\2\2\2\u00b7"+
"\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bd\3\2\2\2\u00ba\u00b8\3\2\2\2\u00bb"+ "\u00ba\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bd\3\2"+
"\u00bc\7&\2\2\u00bc\u00be\5H%\2\u00bd\u00bb\3\2\2\2\u00bd\u00be\3\2\2"+ "\2\2\u00ba\u00b8\3\2\2\2\u00bb\u00bc\7&\2\2\u00bc\u00be\5H%\2\u00bd\u00bb"+
"\2\u00be\u00c9\3\2\2\2\u00bf\u00c3\7s\2\2\u00c0\u00c2\5\32\16\2\u00c1"+ "\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00c9\3\2\2\2\u00bf\u00c3\7s\2\2\u00c0"+
"\u00c0\3\2\2\2\u00c2\u00c5\3\2\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c4\3\2"+ "\u00c2\5\32\16\2\u00c1\u00c0\3\2\2\2\u00c2\u00c5\3\2\2\2\u00c3\u00c1\3"+
"\2\2\u00c4\u00c6\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u00c7\7&\2\2\u00c7"+ "\2\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c6\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6"+
"\u00c9\5L\'\2\u00c8\u00b4\3\2\2\2\u00c8\u00bf\3\2\2\2\u00c9\25\3\2\2\2"+ "\u00c7\7&\2\2\u00c7\u00c9\5L\'\2\u00c8\u00b4\3\2\2\2\u00c8\u00bf\3\2\2"+
"\u00ca\u00cc\58\35\2\u00cb\u00ca\3\2\2\2\u00cc\u00cf\3\2\2\2\u00cd\u00cb"+ "\2\u00c9\25\3\2\2\2\u00ca\u00cc\58\35\2\u00cb\u00ca\3\2\2\2\u00cc\u00cf"+
"\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\3\2\2\2\u00cf\u00cd\3\2\2\2\u00d0"+ "\3\2\2\2\u00cd\u00cb\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\3\2\2\2\u00cf"+
"\u00d4\5\36\20\2\u00d1\u00d3\58\35\2\u00d2\u00d1\3\2\2\2\u00d3\u00d6\3"+ "\u00cd\3\2\2\2\u00d0\u00d4\5\36\20\2\u00d1\u00d3\58\35\2\u00d2\u00d1\3"+
"\2\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\27\3\2\2\2\u00d6"+ "\2\2\2\u00d3\u00d6\3\2\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5"+
"\u00d4\3\2\2\2\u00d7\u00db\7\23\2\2\u00d8\u00da\58\35\2\u00d9\u00d8\3"+ "\27\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d7\u00db\7\23\2\2\u00d8\u00da\58\35"+
"\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+ "\2\u00d9\u00d8\3\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc"+
"\31\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u00e0\7\6\2\2\u00df\u00e1\5H%\2"+ "\3\2\2\2\u00dc\31\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u00e0\7\6\2\2\u00df"+
"\u00e0\u00df\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3"+ "\u00e1\5H%\2\u00e0\u00df\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e2\3\2\2"+
"\7\7\2\2\u00e3\33\3\2\2\2\u00e4\u00e5\b\17\1\2\u00e5\u00e6\5\36\20\2\u00e6"+ "\2\u00e2\u00e3\7\7\2\2\u00e3\33\3\2\2\2\u00e4\u00e5\b\17\1\2\u00e5\u00e6"+
"\u00f1\3\2\2\2\u00e7\u00e8\f\4\2\2\u00e8\u00f0\7\23\2\2\u00e9\u00ea\f"+ "\5\36\20\2\u00e6\u00f1\3\2\2\2\u00e7\u00e8\f\4\2\2\u00e8\u00f0\7\23\2"+
"\3\2\2\u00ea\u00ec\7\6\2\2\u00eb\u00ed\5H%\2\u00ec\u00eb\3\2\2\2\u00ec"+ "\2\u00e9\u00ea\f\3\2\2\u00ea\u00ec\7\6\2\2\u00eb\u00ed\5H%\2\u00ec\u00eb"+
"\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f0\7\7\2\2\u00ef\u00e7\3\2"+ "\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00f0\7\7\2\2\u00ef"+
"\2\2\u00ef\u00e9\3\2\2\2\u00f0\u00f3\3\2\2\2\u00f1\u00ef\3\2\2\2\u00f1"+ "\u00e7\3\2\2\2\u00ef\u00e9\3\2\2\2\u00f0\u00f3\3\2\2\2\u00f1\u00ef\3\2"+
"\u00f2\3\2\2\2\u00f2\35\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\u00f5\b\20\1"+ "\2\2\u00f1\u00f2\3\2\2\2\u00f2\35\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\u00f5"+
"\2\u00f5\u00f6\7\b\2\2\u00f6\u00f7\5\36\20\2\u00f7\u00f8\7\t\2\2\u00f8"+ "\b\20\1\2\u00f5\u00f6\7\b\2\2\u00f6\u00f7\5\36\20\2\u00f7\u00f8\7\t\2"+
"\u0104\3\2\2\2\u00f9\u0104\7[\2\2\u00fa\u00fc\7Z\2\2\u00fb\u00fd\7[\2"+ "\2\u00f8\u0104\3\2\2\2\u00f9\u0104\7[\2\2\u00fa\u00fc\7Z\2\2\u00fb\u00fd"+
"\2\u00fc\u00fb\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u0104\3\2\2\2\u00fe\u0104"+ "\7[\2\2\u00fc\u00fb\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u0104\3\2\2\2\u00fe"+
"\5\"\22\2\u00ff\u0104\5 \21\2\u0100\u0104\5(\25\2\u0101\u0104\5&\24\2"+ "\u0104\5\"\22\2\u00ff\u0104\5 \21\2\u0100\u0104\5(\25\2\u0101\u0104\5"+
"\u0102\u0104\7\3\2\2\u0103\u00f4\3\2\2\2\u0103\u00f9\3\2\2\2\u0103\u00fa"+ "&\24\2\u0102\u0104\7\3\2\2\u0103\u00f4\3\2\2\2\u0103\u00f9\3\2\2\2\u0103"+
"\3\2\2\2\u0103\u00fe\3\2\2\2\u0103\u00ff\3\2\2\2\u0103\u0100\3\2\2\2\u0103"+ "\u00fa\3\2\2\2\u0103\u00fe\3\2\2\2\u0103\u00ff\3\2\2\2\u0103\u0100\3\2"+
"\u0101\3\2\2\2\u0103\u0102\3\2\2\2\u0104\u0110\3\2\2\2\u0105\u0106\f\t"+ "\2\2\u0103\u0101\3\2\2\2\u0103\u0102\3\2\2\2\u0104\u0110\3\2\2\2\u0105"+
"\2\2\u0106\u0108\7\6\2\2\u0107\u0109\5H%\2\u0108\u0107\3\2\2\2\u0108\u0109"+ "\u0106\f\t\2\2\u0106\u0108\7\6\2\2\u0107\u0109\5H%\2\u0108\u0107\3\2\2"+
"\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010f\7\7\2\2\u010b\u010c\f\b\2\2\u010c"+ "\2\u0108\u0109\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010f\7\7\2\2\u010b\u010c"+
"\u010d\7\b\2\2\u010d\u010f\7\t\2\2\u010e\u0105\3\2\2\2\u010e\u010b\3\2"+ "\f\b\2\2\u010c\u010d\7\b\2\2\u010d\u010f\7\t\2\2\u010e\u0105\3\2\2\2\u010e"+
"\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111"+ "\u010b\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2"+
"\37\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0114\7N\2\2\u0114\u0115\7s\2\2"+ "\2\2\u0111\37\3\2\2\2\u0112\u0110\3\2\2\2\u0113\u0114\7N\2\2\u0114\u0115"+
"\u0115!\3\2\2\2\u0116\u0118\7N\2\2\u0117\u0119\7s\2\2\u0118\u0117\3\2"+ "\7s\2\2\u0115!\3\2\2\2\u0116\u0118\7N\2\2\u0117\u0119\7s\2\2\u0118\u0117"+
"\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011c\7\4\2\2\u011b"+ "\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011c\7\4\2\2\u011b"+
"\u011d\5$\23\2\u011c\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011c\3\2"+ "\u011d\5$\23\2\u011c\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e\u011c\3\2"+
"\2\2\u011e\u011f\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0121\7\5\2\2\u0121"+ "\2\2\u011e\u011f\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0121\7\5\2\2\u0121"+
"#\3\2\2\2\u0122\u0123\5\16\b\2\u0123\u0124\7\n\2\2\u0124%\3\2\2\2\u0125"+ "#\3\2\2\2\u0122\u0123\5\16\b\2\u0123\u0124\7\n\2\2\u0124%\3\2\2\2\u0125"+
@ -7582,7 +7586,7 @@ public class KickCParser extends Parser {
"\u01b6\7\t\2\2\u0184\u0185\7`\2\2\u0185\u0186\7-\2\2\u0186\u0187\3\2\2"+ "\u01b6\7\t\2\2\u0184\u0185\7`\2\2\u0185\u0186\7-\2\2\u0186\u0187\3\2\2"+
"\2\u0187\u0188\7\b\2\2\u0188\u0189\7s\2\2\u0189\u01b6\7\t\2\2\u018a\u018b"+ "\2\u0187\u0188\7\b\2\2\u0188\u0189\7s\2\2\u0189\u01b6\7\t\2\2\u018a\u018b"+
"\7`\2\2\u018b\u018c\7,\2\2\u018c\u018d\3\2\2\2\u018d\u018e\7\b\2\2\u018e"+ "\7`\2\2\u018b\u018c\7,\2\2\u018c\u018d\3\2\2\2\u018d\u018e\7\b\2\2\u018e"+
"\u018f\7u\2\2\u018f\u01b6\7\t\2\2\u0190\u0191\7`\2\2\u0191\u0192\7.\2"+ "\u018f\7t\2\2\u018f\u01b6\7\t\2\2\u0190\u0191\7`\2\2\u0191\u0192\7.\2"+
"\2\u0192\u0193\3\2\2\2\u0193\u0194\7\b\2\2\u0194\u0195\7s\2\2\u0195\u01b6"+ "\2\u0192\u0193\3\2\2\2\u0193\u0194\7\b\2\2\u0194\u0195\7s\2\2\u0195\u01b6"+
"\7\t\2\2\u0196\u0197\7`\2\2\u0197\u0198\7/\2\2\u0198\u0199\3\2\2\2\u0199"+ "\7\t\2\2\u0196\u0197\7`\2\2\u0197\u0198\7/\2\2\u0198\u0199\3\2\2\2\u0199"+
"\u019a\7\b\2\2\u019a\u019b\7s\2\2\u019b\u01b6\7\t\2\2\u019c\u019d\7`\2"+ "\u019a\7\b\2\2\u019a\u019b\7s\2\2\u019b\u01b6\7\t\2\2\u019c\u019d\7`\2"+
@ -7639,7 +7643,7 @@ public class KickCParser extends Parser {
"\2\u022e\u023d\7\n\2\2\u022f\u0230\7I\2\2\u0230\u023d\7\n\2\2\u0231\u0232"+ "\2\u022e\u023d\7\n\2\2\u022f\u0230\7I\2\2\u0230\u023d\7\n\2\2\u0231\u0232"+
"\7J\2\2\u0232\u023d\7\n\2\2\u0233\u0235\7K\2\2\u0234\u0236\5N(\2\u0235"+ "\7J\2\2\u0232\u023d\7\n\2\2\u0233\u0235\7K\2\2\u0234\u0236\5N(\2\u0235"+
"\u0234\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0238\7\4"+ "\u0234\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0238\7\4"+
"\2\2\u0238\u0239\5R*\2\u0239\u023a\7\u008d\2\2\u023a\u023d\3\2\2\2\u023b"+ "\2\2\u0238\u0239\5R*\2\u0239\u023a\7\u008c\2\2\u023a\u023d\3\2\2\2\u023b"+
"\u023d\5L\'\2\u023c\u01e8\3\2\2\2\u023c\u01eb\3\2\2\2\u023c\u01f0\3\2"+ "\u023d\5L\'\2\u023c\u01e8\3\2\2\2\u023c\u01eb\3\2\2\2\u023c\u01f0\3\2"+
"\2\2\u023c\u01f3\3\2\2\2\u023c\u01ff\3\2\2\2\u023c\u020b\3\2\2\2\u023c"+ "\2\2\u023c\u01f3\3\2\2\2\u023c\u01ff\3\2\2\2\u023c\u020b\3\2\2\2\u023c"+
"\u0219\3\2\2\2\u023c\u0222\3\2\2\2\u023c\u022a\3\2\2\2\u023c\u022f\3\2"+ "\u0219\3\2\2\2\u023c\u0222\3\2\2\2\u023c\u022a\3\2\2\2\u023c\u022f\3\2"+
@ -7680,9 +7684,9 @@ public class KickCParser extends Parser {
"\7\f\2\2\u02a6\u02a8\5H%\2\u02a7\u02a5\3\2\2\2\u02a8\u02ab\3\2\2\2\u02a9"+ "\7\f\2\2\u02a6\u02a8\5H%\2\u02a7\u02a5\3\2\2\2\u02a8\u02ab\3\2\2\2\u02a9"+
"\u02a7\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02a9\3\2"+ "\u02a7\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02a9\3\2"+
"\2\2\u02ac\u02ad\7\5\2\2\u02ad\u02b8\3\2\2\2\u02ae\u02b8\7s\2\2\u02af"+ "\2\2\u02ac\u02ad\7\5\2\2\u02ad\u02b8\3\2\2\2\u02ae\u02b8\7s\2\2\u02af"+
"\u02b8\7j\2\2\u02b0\u02b2\7u\2\2\u02b1\u02b0\3\2\2\2\u02b2\u02b3\3\2\2"+ "\u02b8\7j\2\2\u02b0\u02b2\7t\2\2\u02b1\u02b0\3\2\2\2\u02b2\u02b3\3\2\2"+
"\2\u02b3\u02b1\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b8\3\2\2\2\u02b5\u02b8"+ "\2\u02b3\u02b1\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b8\3\2\2\2\u02b5\u02b8"+
"\7v\2\2\u02b6\u02b8\7\\\2\2\u02b7\u0279\3\2\2\2\u02b7\u027e\3\2\2\2\u02b7"+ "\7u\2\2\u02b6\u02b8\7\\\2\2\u02b7\u0279\3\2\2\2\u02b7\u027e\3\2\2\2\u02b7"+
"\u0286\3\2\2\2\u02b7\u028e\3\2\2\2\u02b7\u0296\3\2\2\2\u02b7\u029b\3\2"+ "\u0286\3\2\2\2\u02b7\u028e\3\2\2\2\u02b7\u0296\3\2\2\2\u02b7\u029b\3\2"+
"\2\2\u02b7\u029d\3\2\2\2\u02b7\u029f\3\2\2\2\u02b7\u02a1\3\2\2\2\u02b7"+ "\2\2\u02b7\u029d\3\2\2\2\u02b7\u029f\3\2\2\2\u02b7\u02a1\3\2\2\2\u02b7"+
"\u02a3\3\2\2\2\u02b7\u02ae\3\2\2\2\u02b7\u02af\3\2\2\2\u02b7\u02b1\3\2"+ "\u02a3\3\2\2\2\u02b7\u02ae\3\2\2\2\u02b7\u02af\3\2\2\2\u02b7\u02b1\3\2"+
@ -7717,8 +7721,8 @@ public class KickCParser extends Parser {
"\u0307\7\b\2\2\u0307\u030c\5P)\2\u0308\u0309\7\f\2\2\u0309\u030b\5P)\2"+ "\u0307\7\b\2\2\u0307\u030c\5P)\2\u0308\u0309\7\f\2\2\u0309\u030b\5P)\2"+
"\u030a\u0308\3\2\2\2\u030b\u030e\3\2\2\2\u030c\u030a\3\2\2\2\u030c\u030d"+ "\u030a\u0308\3\2\2\2\u030b\u030e\3\2\2\2\u030c\u030a\3\2\2\2\u030c\u030d"+
"\3\2\2\2\u030d\u030f\3\2\2\2\u030e\u030c\3\2\2\2\u030f\u0310\7\t\2\2\u0310"+ "\3\2\2\2\u030d\u030f\3\2\2\2\u030e\u030c\3\2\2\2\u030f\u0310\7\t\2\2\u0310"+
"O\3\2\2\2\u0311\u0312\7T\2\2\u0312\u0321\7u\2\2\u0313\u0314\7U\2\2\u0314"+ "O\3\2\2\2\u0311\u0312\7T\2\2\u0312\u0321\7t\2\2\u0313\u0314\7U\2\2\u0314"+
"\u0321\7s\2\2\u0315\u0316\7V\2\2\u0316\u0321\7u\2\2\u0317\u0318\7W\2\2"+ "\u0321\7s\2\2\u0315\u0316\7V\2\2\u0316\u0321\7t\2\2\u0317\u0318\7W\2\2"+
"\u0318\u0321\5H%\2\u0319\u031a\7X\2\2\u031a\u0321\5H%\2\u031b\u031e\7"+ "\u0318\u0321\5H%\2\u0319\u031a\7X\2\2\u031a\u0321\5H%\2\u031b\u031e\7"+
"*\2\2\u031c\u031f\7\65\2\2\u031d\u031f\5H%\2\u031e\u031c\3\2\2\2\u031e"+ "*\2\2\u031c\u031f\7\65\2\2\u031d\u031f\5H%\2\u031e\u031c\3\2\2\2\u031e"+
"\u031d\3\2\2\2\u031f\u0321\3\2\2\2\u0320\u0311\3\2\2\2\u0320\u0313\3\2"+ "\u031d\3\2\2\2\u031f\u0321\3\2\2\2\u0320\u0311\3\2\2\2\u0320\u0313\3\2"+
@ -7727,41 +7731,41 @@ public class KickCParser extends Parser {
"\u0327\3\2\2\2\u0325\u0323\3\2\2\2\u0325\u0326\3\2\2\2\u0326S\3\2\2\2"+ "\u0327\3\2\2\2\u0325\u0323\3\2\2\2\u0325\u0326\3\2\2\2\u0326S\3\2\2\2"+
"\u0327\u0325\3\2\2\2\u0328\u032c\5V,\2\u0329\u032c\5X-\2\u032a\u032c\5"+ "\u0327\u0325\3\2\2\2\u0328\u032c\5V,\2\u0329\u032c\5X-\2\u032a\u032c\5"+
"Z.\2\u032b\u0328\3\2\2\2\u032b\u0329\3\2\2\2\u032b\u032a\3\2\2\2\u032c"+ "Z.\2\u032b\u0328\3\2\2\2\u032b\u0329\3\2\2\2\u032b\u032a\3\2\2\2\u032c"+
"U\3\2\2\2\u032d\u032e\7\u009a\2\2\u032e\u0332\7}\2\2\u032f\u0330\7\u0099"+ "U\3\2\2\2\u032d\u032e\7\u0099\2\2\u032e\u0332\7|\2\2\u032f\u0330\7\u0098"+
"\2\2\u0330\u0332\7}\2\2\u0331\u032d\3\2\2\2\u0331\u032f\3\2\2\2\u0332"+ "\2\2\u0330\u0332\7|\2\2\u0331\u032d\3\2\2\2\u0331\u032f\3\2\2\2\u0332"+
"W\3\2\2\2\u0333\u0335\7{\2\2\u0334\u0336\5\\/\2\u0335\u0334\3\2\2\2\u0335"+ "W\3\2\2\2\u0333\u0335\7z\2\2\u0334\u0336\5\\/\2\u0335\u0334\3\2\2\2\u0335"+
"\u0336\3\2\2\2\u0336Y\3\2\2\2\u0337\u0338\7z\2\2\u0338\u033d\5^\60\2\u0339"+ "\u0336\3\2\2\2\u0336Y\3\2\2\2\u0337\u0338\7y\2\2\u0338\u033d\5^\60\2\u0339"+
"\u033a\7~\2\2\u033a\u033c\5^\60\2\u033b\u0339\3\2\2\2\u033c\u033f\3\2"+ "\u033a\7}\2\2\u033a\u033c\5^\60\2\u033b\u0339\3\2\2\2\u033c\u033f\3\2"+
"\2\2\u033d\u033b\3\2\2\2\u033d\u033e\3\2\2\2\u033e[\3\2\2\2\u033f\u033d"+ "\2\2\u033d\u033b\3\2\2\2\u033d\u033e\3\2\2\2\u033e[\3\2\2\2\u033f\u033d"+
"\3\2\2\2\u0340\u0358\5^\60\2\u0341\u0342\7|\2\2\u0342\u0358\5^\60\2\u0343"+ "\3\2\2\2\u0340\u0358\5^\60\2\u0341\u0342\7{\2\2\u0342\u0358\5^\60\2\u0343"+
"\u0344\5^\60\2\u0344\u0345\7~\2\2\u0345\u0346\7\u009a\2\2\u0346\u0358"+ "\u0344\5^\60\2\u0344\u0345\7}\2\2\u0345\u0346\7\u0099\2\2\u0346\u0358"+
"\3\2\2\2\u0347\u0348\7\177\2\2\u0348\u0349\5^\60\2\u0349\u034a\7\u0080"+ "\3\2\2\2\u0347\u0348\7~\2\2\u0348\u0349\5^\60\2\u0349\u034a\7\177\2\2"+
"\2\2\u034a\u034b\7~\2\2\u034b\u034c\7\u009a\2\2\u034c\u0358\3\2\2\2\u034d"+ "\u034a\u034b\7}\2\2\u034b\u034c\7\u0099\2\2\u034c\u0358\3\2\2\2\u034d"+
"\u034e\7\177\2\2\u034e\u034f\5^\60\2\u034f\u0350\7~\2\2\u0350\u0351\7"+ "\u034e\7~\2\2\u034e\u034f\5^\60\2\u034f\u0350\7}\2\2\u0350\u0351\7\u0099"+
"\u009a\2\2\u0351\u0352\7\u0080\2\2\u0352\u0358\3\2\2\2\u0353\u0354\7\177"+ "\2\2\u0351\u0352\7\177\2\2\u0352\u0358\3\2\2\2\u0353\u0354\7~\2\2\u0354"+
"\2\2\u0354\u0355\5^\60\2\u0355\u0356\7\u0080\2\2\u0356\u0358\3\2\2\2\u0357"+ "\u0355\5^\60\2\u0355\u0356\7\177\2\2\u0356\u0358\3\2\2\2\u0357\u0340\3"+
"\u0340\3\2\2\2\u0357\u0341\3\2\2\2\u0357\u0343\3\2\2\2\u0357\u0347\3\2"+ "\2\2\2\u0357\u0341\3\2\2\2\u0357\u0343\3\2\2\2\u0357\u0347\3\2\2\2\u0357"+
"\2\2\u0357\u034d\3\2\2\2\u0357\u0353\3\2\2\2\u0358]\3\2\2\2\u0359\u035a"+ "\u034d\3\2\2\2\u0357\u0353\3\2\2\2\u0358]\3\2\2\2\u0359\u035a\b\60\1\2"+
"\b\60\1\2\u035a\u035b\7\u0081\2\2\u035b\u035c\5^\60\2\u035c\u035d\7\u0082"+ "\u035a\u035b\7\u0080\2\2\u035b\u035c\5^\60\2\u035c\u035d\7\u0081\2\2\u035d"+
"\2\2\u035d\u0368\3\2\2\2\u035e\u035f\t\t\2\2\u035f\u0368\5^\60\n\u0360"+ "\u0368\3\2\2\2\u035e\u035f\t\t\2\2\u035f\u0368\5^\60\n\u0360\u0368\7\u0099"+
"\u0368\7\u009a\2\2\u0361\u0368\7\u0098\2\2\u0362\u0363\7\u008c\2\2\u0363"+ "\2\2\u0361\u0368\7\u0097\2\2\u0362\u0363\7\u008b\2\2\u0363\u0364\7\u0099"+
"\u0364\7\u009a\2\2\u0364\u0368\7\u008d\2\2\u0365\u0368\7\u008e\2\2\u0366"+ "\2\2\u0364\u0368\7\u008c\2\2\u0365\u0368\7\u008d\2\2\u0366\u0368\7\u0096"+
"\u0368\7\u0097\2\2\u0367\u0359\3\2\2\2\u0367\u035e\3\2\2\2\u0367\u0360"+ "\2\2\u0367\u0359\3\2\2\2\u0367\u035e\3\2\2\2\u0367\u0360\3\2\2\2\u0367"+
"\3\2\2\2\u0367\u0361\3\2\2\2\u0367\u0362\3\2\2\2\u0367\u0365\3\2\2\2\u0367"+ "\u0361\3\2\2\2\u0367\u0362\3\2\2\2\u0367\u0365\3\2\2\2\u0367\u0366\3\2"+
"\u0366\3\2\2\2\u0368\u0377\3\2\2\2\u0369\u036a\f\f\2\2\u036a\u036b\7\u0083"+ "\2\2\u0368\u0377\3\2\2\2\u0369\u036a\f\f\2\2\u036a\u036b\7\u0082\2\2\u036b"+
"\2\2\u036b\u0376\5^\60\r\u036c\u036d\f\13\2\2\u036d\u036e\t\n\2\2\u036e"+ "\u0376\5^\60\r\u036c\u036d\f\13\2\2\u036d\u036e\t\n\2\2\u036e\u0376\5"+
"\u0376\5^\60\f\u036f\u0370\f\t\2\2\u0370\u0371\t\13\2\2\u0371\u0376\5"+ "^\60\f\u036f\u0370\f\t\2\2\u0370\u0371\t\13\2\2\u0371\u0376\5^\60\n\u0372"+
"^\60\n\u0372\u0373\f\b\2\2\u0373\u0374\t\f\2\2\u0374\u0376\5^\60\t\u0375"+ "\u0373\f\b\2\2\u0373\u0374\t\f\2\2\u0374\u0376\5^\60\t\u0375\u0369\3\2"+
"\u0369\3\2\2\2\u0375\u036c\3\2\2\2\u0375\u036f\3\2\2\2\u0375\u0372\3\2"+ "\2\2\u0375\u036c\3\2\2\2\u0375\u036f\3\2\2\2\u0375\u0372\3\2\2\2\u0376"+
"\2\2\u0376\u0379\3\2\2\2\u0377\u0375\3\2\2\2\u0377\u0378\3\2\2\2\u0378"+ "\u0379\3\2\2\2\u0377\u0375\3\2\2\2\u0377\u0378\3\2\2\2\u0378_\3\2\2\2"+
"_\3\2\2\2\u0379\u0377\3\2\2\2Zinv\u0087\u0090\u009a\u00a0\u00a8\u00af"+ "\u0379\u0377\3\2\2\2Zinv\u0087\u0090\u009a\u00a0\u00a8\u00af\u00b8\u00bd"+
"\u00b8\u00bd\u00c3\u00c8\u00cd\u00d4\u00db\u00e0\u00ec\u00ef\u00f1\u00fc"+ "\u00c3\u00c8\u00cd\u00d4\u00db\u00e0\u00ec\u00ef\u00f1\u00fc\u0103\u0108"+
"\u0103\u0108\u010e\u0110\u0118\u011e\u012a\u0138\u013e\u0144\u014a\u014f"+ "\u010e\u0110\u0118\u011e\u012a\u0138\u013e\u0144\u014a\u014f\u0153\u015c"+
"\u0153\u015c\u0163\u0169\u0174\u01b1\u01b5\u01c0\u01d3\u01dc\u01e1\u01e6"+ "\u0163\u0169\u0174\u01b1\u01b5\u01c0\u01d3\u01dc\u01e1\u01e6\u01ed\u01fa"+
"\u01ed\u01fa\u01ff\u020b\u0219\u022c\u0235\u023c\u0241\u0246\u0248\u024e"+ "\u01ff\u020b\u0219\u022c\u0235\u023c\u0241\u0246\u0248\u024e\u0255\u025b"+
"\u0255\u025b\u025e\u0266\u0269\u026c\u0276\u0282\u028a\u0290\u0294\u02a9"+ "\u025e\u0266\u0269\u026c\u0276\u0282\u028a\u0290\u0294\u02a9\u02b3\u02b7"+
"\u02b3\u02b7\u02e9\u02f3\u02f5\u02fd\u0302\u030c\u031e\u0320\u0325\u032b"+ "\u02e9\u02f3\u02f5\u02fd\u0302\u030c\u031e\u0320\u0325\u032b\u0331\u0335"+
"\u0331\u0335\u033d\u0357\u0367\u0375\u0377"; "\u033d\u0357\u0367\u0375\u0377";
public static final ATN _ATN = public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray()); new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static { static {

View File

@ -111,48 +111,52 @@ BININTEGER=110
DECINTEGER=111 DECINTEGER=111
HEXINTEGER=112 HEXINTEGER=112
NAME=113 NAME=113
SYSTEMFILE=114 STRING=114
STRING=115 CHAR=115
CHAR=116 WS=116
WS=117 COMMENT_LINE=117
COMMENT_LINE=118 COMMENT_BLOCK=118
COMMENT_BLOCK=119 ASM_BYTE=119
ASM_BYTE=120 ASM_MNEMONIC=120
ASM_MNEMONIC=121 ASM_IMM=121
ASM_IMM=122 ASM_COLON=122
ASM_COLON=123 ASM_COMMA=123
ASM_COMMA=124 ASM_PAR_BEGIN=124
ASM_PAR_BEGIN=125 ASM_PAR_END=125
ASM_PAR_END=126 ASM_BRACKET_BEGIN=126
ASM_BRACKET_BEGIN=127 ASM_BRACKET_END=127
ASM_BRACKET_END=128 ASM_DOT=128
ASM_DOT=129 ASM_SHIFT_LEFT=129
ASM_SHIFT_LEFT=130 ASM_SHIFT_RIGHT=130
ASM_SHIFT_RIGHT=131 ASM_PLUS=131
ASM_PLUS=132 ASM_MINUS=132
ASM_MINUS=133 ASM_LESS_THAN=133
ASM_LESS_THAN=134 ASM_GREATER_THAN=134
ASM_GREATER_THAN=135 ASM_MULTIPLY=135
ASM_MULTIPLY=136 ASM_DIVIDE=136
ASM_DIVIDE=137 ASM_CURLY_BEGIN=137
ASM_CURLY_BEGIN=138 ASM_CURLY_END=138
ASM_CURLY_END=139 ASM_NUMBER=139
ASM_NUMBER=140 ASM_NUMFLOAT=140
ASM_NUMFLOAT=141 ASM_BINFLOAT=141
ASM_BINFLOAT=142 ASM_DECFLOAT=142
ASM_DECFLOAT=143 ASM_HEXFLOAT=143
ASM_HEXFLOAT=144 ASM_NUMINT=144
ASM_NUMINT=145 ASM_BININTEGER=145
ASM_BININTEGER=146 ASM_DECINTEGER=146
ASM_DECINTEGER=147 ASM_HEXINTEGER=147
ASM_HEXINTEGER=148 ASM_CHAR=148
ASM_CHAR=149 ASM_MULTI_REL=149
ASM_MULTI_REL=150 ASM_MULTI_NAME=150
ASM_MULTI_NAME=151 ASM_NAME=151
ASM_NAME=152 ASM_WS=152
ASM_WS=153 ASM_COMMENT_LINE=153
ASM_COMMENT_LINE=154 ASM_COMMENT_BLOCK=154
ASM_COMMENT_BLOCK=155 IMPORT_SYSTEMFILE=155
IMPORT_LOCALFILE=156
IMPORT_WS=157
IMPORT_COMMENT_LINE=158
IMPORT_COMMENT_BLOCK=159
';'=8 ';'=8
'..'=11 '..'=11
'?'=12 '?'=12
@ -231,5 +235,5 @@ ASM_COMMENT_BLOCK=155
'#elif'=101 '#elif'=101
'#else'=102 '#else'=102
'#endif'=103 '#endif'=103
'.byte'=120 '.byte'=119
'#'=122 '#'=121

View File

@ -93,7 +93,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override @Override
public Object visitImportFile(KickCParser.ImportFileContext ctx) { public Object visitImportFile(KickCParser.ImportFileContext ctx) {
String importName = ctx.STRING().getText(); String importName = ctx.IMPORT_LOCALFILE().getText();
String importFileName = importName.substring(1, importName.length() - 1); String importFileName = importName.substring(1, importName.length() - 1);
if(program.getLog().isVerboseParse()) { if(program.getLog().isVerboseParse()) {
program.getLog().append("Importing " + importFileName); program.getLog().append("Importing " + importFileName);
@ -103,7 +103,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override @Override
public Object visitIncludeFile(KickCParser.IncludeFileContext ctx) { public Object visitIncludeFile(KickCParser.IncludeFileContext ctx) {
String includeName = ctx.STRING().getText(); String includeName = ctx.IMPORT_LOCALFILE().getText();
String includeFileName = includeName.substring(1, includeName.length() - 1); String includeFileName = includeName.substring(1, includeName.length() - 1);
if(program.getLog().isVerboseParse()) { if(program.getLog().isVerboseParse()) {
program.getLog().append("Including " + includeFileName); program.getLog().append("Including " + includeFileName);
@ -113,7 +113,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override @Override
public Object visitIncludeSystem(KickCParser.IncludeSystemContext ctx) { public Object visitIncludeSystem(KickCParser.IncludeSystemContext ctx) {
String includeName = ctx.SYSTEMFILE().getText(); String includeName = ctx.IMPORT_SYSTEMFILE().getText();
String includeFileName = includeName.substring(1, includeName.length() - 1); String includeFileName = includeName.substring(1, includeName.length() - 1);
if(program.getLog().isVerboseParse()) { if(program.getLog().isVerboseParse()) {
program.getLog().append("Including system" + includeFileName); program.getLog().append("Including system" + includeFileName);