diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 index 50ae80833..a7c09d06f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 @@ -48,10 +48,6 @@ decl | typeDef ';' ; -typeDef - : TYPEDEF typeDecl NAME {cParser.addTypedef($NAME.text);} - ; - declTypes : directive* typeDecl directive* ; @@ -61,8 +57,16 @@ declVariables ; declVariableList - : declVariableInit - | declVariableList COMMA declVariableInit + : declPointer* declVariableInit + | declVariableList COMMA declPointer* declVariableInit + ; + +declPointer + : ASTERISK directive* + ; + +typeDef + : TYPEDEF declTypes declPointer* NAME {cParser.addTypedef($NAME.text);} ; declVariableInit @@ -76,14 +80,14 @@ declVariable ; declFunction - : declTypes NAME PAR_BEGIN parameterListDecl? PAR_END CURLY_BEGIN stmtSeq? CURLY_END + : declTypes declPointer* NAME PAR_BEGIN parameterListDecl? PAR_END CURLY_BEGIN stmtSeq? CURLY_END ; parameterListDecl : parameterDecl (COMMA parameterDecl)* ; parameterDecl - : declTypes NAME #parameterDeclType + : declTypes declPointer* NAME #parameterDeclType | SIMPLETYPE #parameterDeclVoid ; @@ -149,7 +153,7 @@ switchCase: forLoop : forClassicInit ';' commaExpr ';' commaExpr? #forClassic - | declTypes? NAME COLON expr '..' expr #forRange + | (declTypes declPointer*)? NAME COLON expr '..' expr #forRange ; forClassicInit @@ -161,7 +165,6 @@ typeDecl : PAR_BEGIN typeDecl PAR_END #typePar | SIMPLETYPE #typeSimple | SIGNEDNESS SIMPLETYPE? #typeSignedSimple - | typeDecl ASTERISK #typePtr | typeDecl BRACKET_BEGIN (expr)? BRACKET_END #typeArray | typeDecl PAR_BEGIN PAR_END #typeProcedure | structDef #typeStructDef @@ -171,6 +174,12 @@ typeDecl | TYPEDEFNAME #typeNamedRef ; +typeSpecifier + : typeDecl #typeSpecifierSimple + | typeSpecifier ASTERISK #typeSpecifierPointer + | typeSpecifier BRACKET_BEGIN (expr)? BRACKET_END #typeSpecifierArray + ; + structRef : STRUCT NAME ; @@ -210,10 +219,10 @@ expr | expr DOT NAME #exprDot | expr '->' NAME #exprArrow | expr PAR_BEGIN parameterList? PAR_END #exprCall - | SIZEOF PAR_BEGIN ( expr | typeDecl ) PAR_END #exprSizeOf - | TYPEID PAR_BEGIN ( expr | typeDecl ) PAR_END #exprTypeId + | SIZEOF PAR_BEGIN ( expr | typeSpecifier ) PAR_END #exprSizeOf + | TYPEID PAR_BEGIN ( expr | typeSpecifier ) PAR_END #exprTypeId | expr BRACKET_BEGIN commaExpr BRACKET_END #exprArray - | PAR_BEGIN typeDecl PAR_END expr #exprCast + | PAR_BEGIN typeSpecifier PAR_END expr #exprCast | ('--' | '++' ) expr #exprPreMod | expr ('--' | '++' ) #exprPostMod | ASTERISK expr #exprPtr diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index c9a5df8ff..f83c64fc7 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -47,29 +47,29 @@ public class KickCParser extends Parser { ASM_NAME=140, ASM_WS=141, ASM_COMMENT_LINE=142, ASM_COMMENT_BLOCK=143; public static final int RULE_file = 0, RULE_asmFile = 1, RULE_declSeq = 2, RULE_declOrImport = 3, - RULE_importDecl = 4, RULE_decl = 5, RULE_typeDef = 6, RULE_declTypes = 7, - RULE_declVariables = 8, RULE_declVariableList = 9, RULE_declVariableInit = 10, - RULE_declVariable = 11, RULE_declFunction = 12, RULE_parameterListDecl = 13, - RULE_parameterDecl = 14, RULE_globalDirective = 15, RULE_directive = 16, - RULE_stmtSeq = 17, RULE_stmt = 18, RULE_switchCases = 19, RULE_switchCase = 20, - RULE_forLoop = 21, RULE_forClassicInit = 22, RULE_typeDecl = 23, RULE_structRef = 24, - RULE_structDef = 25, RULE_structMembers = 26, RULE_enumRef = 27, RULE_enumDef = 28, - RULE_enumMemberList = 29, RULE_enumMember = 30, RULE_commaExpr = 31, RULE_expr = 32, - RULE_parameterList = 33, RULE_declKasm = 34, RULE_asmDirectives = 35, - RULE_asmDirective = 36, RULE_asmLines = 37, RULE_asmLine = 38, RULE_asmLabel = 39, - RULE_asmInstruction = 40, RULE_asmBytes = 41, RULE_asmParamMode = 42, - RULE_asmExpr = 43; + RULE_importDecl = 4, RULE_decl = 5, RULE_declTypes = 6, RULE_declVariables = 7, + RULE_declVariableList = 8, RULE_declPointer = 9, RULE_typeDef = 10, RULE_declVariableInit = 11, + RULE_declVariable = 12, RULE_declFunction = 13, RULE_parameterListDecl = 14, + RULE_parameterDecl = 15, RULE_globalDirective = 16, RULE_directive = 17, + RULE_stmtSeq = 18, RULE_stmt = 19, RULE_switchCases = 20, RULE_switchCase = 21, + RULE_forLoop = 22, RULE_forClassicInit = 23, RULE_typeDecl = 24, RULE_typeSpecifier = 25, + RULE_structRef = 26, RULE_structDef = 27, RULE_structMembers = 28, RULE_enumRef = 29, + RULE_enumDef = 30, RULE_enumMemberList = 31, RULE_enumMember = 32, RULE_commaExpr = 33, + RULE_expr = 34, RULE_parameterList = 35, RULE_declKasm = 36, RULE_asmDirectives = 37, + RULE_asmDirective = 38, RULE_asmLines = 39, RULE_asmLine = 40, RULE_asmLabel = 41, + RULE_asmInstruction = 42, RULE_asmBytes = 43, RULE_asmParamMode = 44, + RULE_asmExpr = 45; private static String[] makeRuleNames() { return new String[] { - "file", "asmFile", "declSeq", "declOrImport", "importDecl", "decl", "typeDef", - "declTypes", "declVariables", "declVariableList", "declVariableInit", + "file", "asmFile", "declSeq", "declOrImport", "importDecl", "decl", "declTypes", + "declVariables", "declVariableList", "declPointer", "typeDef", "declVariableInit", "declVariable", "declFunction", "parameterListDecl", "parameterDecl", "globalDirective", "directive", "stmtSeq", "stmt", "switchCases", "switchCase", - "forLoop", "forClassicInit", "typeDecl", "structRef", "structDef", "structMembers", - "enumRef", "enumDef", "enumMemberList", "enumMember", "commaExpr", "expr", - "parameterList", "declKasm", "asmDirectives", "asmDirective", "asmLines", - "asmLine", "asmLabel", "asmInstruction", "asmBytes", "asmParamMode", - "asmExpr" + "forLoop", "forClassicInit", "typeDecl", "typeSpecifier", "structRef", + "structDef", "structMembers", "enumRef", "enumDef", "enumMemberList", + "enumMember", "commaExpr", "expr", "parameterList", "declKasm", "asmDirectives", + "asmDirective", "asmLines", "asmLine", "asmLabel", "asmInstruction", + "asmBytes", "asmParamMode", "asmExpr" }; } public static final String[] ruleNames = makeRuleNames(); @@ -210,9 +210,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(88); + setState(92); declSeq(); - setState(89); + setState(93); match(EOF); } } @@ -257,9 +257,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(91); + setState(95); asmLines(); - setState(92); + setState(96); match(EOF); } } @@ -307,17 +307,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(97); + setState(101); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << IMPORT) | (1L << TYPEDEF) | (1L << PRAGMA) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (KICKASM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { { - setState(94); + setState(98); declOrImport(); } } - setState(99); + setState(103); _errHandler.sync(this); _la = _input.LA(1); } @@ -364,7 +364,7 @@ public class KickCParser extends Parser { DeclOrImportContext _localctx = new DeclOrImportContext(_ctx, getState()); enterRule(_localctx, 6, RULE_declOrImport); try { - setState(102); + setState(106); _errHandler.sync(this); switch (_input.LA(1)) { case TYPEDEFNAME: @@ -394,14 +394,14 @@ public class KickCParser extends Parser { case SIMPLETYPE: enterOuterAlt(_localctx, 1); { - setState(100); + setState(104); decl(); } break; case IMPORT: enterOuterAlt(_localctx, 2); { - setState(101); + setState(105); importDecl(); } break; @@ -448,9 +448,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(104); + setState(108); match(IMPORT); - setState(105); + setState(109); match(STRING); } } @@ -511,63 +511,63 @@ public class KickCParser extends Parser { DeclContext _localctx = new DeclContext(_ctx, getState()); enterRule(_localctx, 10, RULE_decl); try { - setState(122); + setState(126); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(107); + setState(111); declVariables(); - setState(108); + setState(112); match(SEMICOLON); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(110); + setState(114); structDef(); - setState(111); + setState(115); match(SEMICOLON); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(113); + setState(117); enumDef(); - setState(114); + setState(118); match(SEMICOLON); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(116); + setState(120); declFunction(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(117); + setState(121); declKasm(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(118); + setState(122); globalDirective(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(119); + setState(123); typeDef(); - setState(120); + setState(124); match(SEMICOLON); } break; @@ -584,58 +584,6 @@ public class KickCParser extends Parser { return _localctx; } - public static class TypeDefContext extends ParserRuleContext { - public Token NAME; - public TerminalNode TYPEDEF() { return getToken(KickCParser.TYPEDEF, 0); } - public TypeDeclContext typeDecl() { - return getRuleContext(TypeDeclContext.class,0); - } - public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } - public TypeDefContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_typeDef; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypeDef(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypeDef(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypeDef(this); - else return visitor.visitChildren(this); - } - } - - public final TypeDefContext typeDef() throws RecognitionException { - TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_typeDef); - try { - enterOuterAlt(_localctx, 1); - { - setState(124); - match(TYPEDEF); - setState(125); - typeDecl(0); - setState(126); - ((TypeDefContext)_localctx).NAME = match(NAME); - cParser.addTypedef((((TypeDefContext)_localctx).NAME!=null?((TypeDefContext)_localctx).NAME.getText():null)); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - public static class DeclTypesContext extends ParserRuleContext { public TypeDeclContext typeDecl() { return getRuleContext(TypeDeclContext.class,0); @@ -667,38 +615,38 @@ public class KickCParser extends Parser { public final DeclTypesContext declTypes() throws RecognitionException { DeclTypesContext _localctx = new DeclTypesContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_declTypes); + enterRule(_localctx, 12, RULE_declTypes); int _la; try { enterOuterAlt(_localctx, 1); { - setState(132); + setState(131); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(129); + setState(128); directive(); } } - setState(134); + setState(133); _errHandler.sync(this); _la = _input.LA(1); } - setState(135); + setState(134); typeDecl(0); - setState(139); + setState(138); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(136); + setState(135); directive(); } } - setState(141); + setState(140); _errHandler.sync(this); _la = _input.LA(1); } @@ -743,13 +691,13 @@ public class KickCParser extends Parser { public final DeclVariablesContext declVariables() throws RecognitionException { DeclVariablesContext _localctx = new DeclVariablesContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_declVariables); + enterRule(_localctx, 14, RULE_declVariables); try { enterOuterAlt(_localctx, 1); { - setState(142); + setState(141); declTypes(); - setState(143); + setState(142); declVariableList(0); } } @@ -768,6 +716,12 @@ public class KickCParser extends Parser { public DeclVariableInitContext declVariableInit() { return getRuleContext(DeclVariableInitContext.class,0); } + public List declPointer() { + return getRuleContexts(DeclPointerContext.class); + } + public DeclPointerContext declPointer(int i) { + return getRuleContext(DeclPointerContext.class,i); + } public DeclVariableListContext declVariableList() { return getRuleContext(DeclVariableListContext.class,0); } @@ -800,20 +754,35 @@ public class KickCParser extends Parser { int _parentState = getState(); DeclVariableListContext _localctx = new DeclVariableListContext(_ctx, _parentState); DeclVariableListContext _prevctx = _localctx; - int _startState = 18; - enterRecursionRule(_localctx, 18, RULE_declVariableList, _p); + int _startState = 16; + enterRecursionRule(_localctx, 16, RULE_declVariableList, _p); + int _la; try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(146); + setState(148); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(145); + declPointer(); + } + } + setState(150); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(151); declVariableInit(); } _ctx.stop = _input.LT(-1); - setState(153); + setState(164); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -822,18 +791,32 @@ public class KickCParser extends Parser { { _localctx = new DeclVariableListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_declVariableList); - setState(148); + setState(153); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(149); + setState(154); match(COMMA); - setState(150); + setState(158); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(155); + declPointer(); + } + } + setState(160); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(161); declVariableInit(); } } } - setState(155); + setState(166); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } } } @@ -848,6 +831,142 @@ public class KickCParser extends Parser { return _localctx; } + public static class DeclPointerContext extends ParserRuleContext { + public TerminalNode ASTERISK() { return getToken(KickCParser.ASTERISK, 0); } + public List directive() { + return getRuleContexts(DirectiveContext.class); + } + public DirectiveContext directive(int i) { + return getRuleContext(DirectiveContext.class,i); + } + public DeclPointerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declPointer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterDeclPointer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitDeclPointer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitDeclPointer(this); + else return visitor.visitChildren(this); + } + } + + public final DeclPointerContext declPointer() throws RecognitionException { + DeclPointerContext _localctx = new DeclPointerContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_declPointer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(167); + match(ASTERISK); + setState(171); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { + { + { + setState(168); + directive(); + } + } + setState(173); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeDefContext extends ParserRuleContext { + public Token NAME; + public TerminalNode TYPEDEF() { return getToken(KickCParser.TYPEDEF, 0); } + public DeclTypesContext declTypes() { + return getRuleContext(DeclTypesContext.class,0); + } + public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public List declPointer() { + return getRuleContexts(DeclPointerContext.class); + } + public DeclPointerContext declPointer(int i) { + return getRuleContext(DeclPointerContext.class,i); + } + public TypeDefContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeDef; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypeDef(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypeDef(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypeDef(this); + else return visitor.visitChildren(this); + } + } + + public final TypeDefContext typeDef() throws RecognitionException { + TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_typeDef); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(174); + match(TYPEDEF); + setState(175); + declTypes(); + setState(179); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(176); + declPointer(); + } + } + setState(181); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(182); + ((TypeDefContext)_localctx).NAME = match(NAME); + cParser.addTypedef((((TypeDefContext)_localctx).NAME!=null?((TypeDefContext)_localctx).NAME.getText():null)); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class DeclVariableInitContext extends ParserRuleContext { public DeclVariableInitContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -908,25 +1027,25 @@ public class KickCParser extends Parser { public final DeclVariableInitContext declVariableInit() throws RecognitionException { DeclVariableInitContext _localctx = new DeclVariableInitContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_declVariableInit); + enterRule(_localctx, 22, RULE_declVariableInit); try { - setState(165); + setState(194); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: _localctx = new DeclVariableInitExprContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(156); + setState(185); declVariable(0); - setState(159); + setState(188); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { case 1: { - setState(157); + setState(186); match(ASSIGN); - setState(158); + setState(187); expr(0); } break; @@ -937,11 +1056,11 @@ public class KickCParser extends Parser { _localctx = new DeclVariableInitKasmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(161); + setState(190); declVariable(0); - setState(162); + setState(191); match(ASSIGN); - setState(163); + setState(192); declKasm(); } break; @@ -1020,8 +1139,8 @@ public class KickCParser extends Parser { int _parentState = getState(); DeclVariableContext _localctx = new DeclVariableContext(_ctx, _parentState); DeclVariableContext _prevctx = _localctx; - int _startState = 22; - enterRecursionRule(_localctx, 22, RULE_declVariable, _p); + int _startState = 24; + enterRecursionRule(_localctx, 24, RULE_declVariable, _p); int _la; try { int _alt; @@ -1032,13 +1151,13 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(168); + setState(197); match(NAME); } _ctx.stop = _input.LT(-1); - setState(178); + setState(207); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -1047,28 +1166,28 @@ public class KickCParser extends Parser { { _localctx = new DeclVariableArrayContext(new DeclVariableContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_declVariable); - setState(170); + setState(199); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(171); + setState(200); match(BRACKET_BEGIN); - setState(173); + setState(202); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(172); + setState(201); expr(0); } } - setState(175); + setState(204); match(BRACKET_END); } } } - setState(180); + setState(209); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,9,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); } } } @@ -1092,6 +1211,12 @@ public class KickCParser extends Parser { public TerminalNode PAR_END() { return getToken(KickCParser.PAR_END, 0); } public TerminalNode CURLY_BEGIN() { return getToken(KickCParser.CURLY_BEGIN, 0); } public TerminalNode CURLY_END() { return getToken(KickCParser.CURLY_END, 0); } + public List declPointer() { + return getRuleContexts(DeclPointerContext.class); + } + public DeclPointerContext declPointer(int i) { + return getRuleContext(DeclPointerContext.class,i); + } public ParameterListDeclContext parameterListDecl() { return getRuleContext(ParameterListDeclContext.class,0); } @@ -1119,42 +1244,56 @@ public class KickCParser extends Parser { public final DeclFunctionContext declFunction() throws RecognitionException { DeclFunctionContext _localctx = new DeclFunctionContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_declFunction); + enterRule(_localctx, 26, RULE_declFunction); int _la; try { enterOuterAlt(_localctx, 1); { - setState(181); + setState(210); declTypes(); - setState(182); + setState(214); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(211); + declPointer(); + } + } + setState(216); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(217); match(NAME); - setState(183); + setState(218); match(PAR_BEGIN); - setState(185); + setState(220); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(184); + setState(219); parameterListDecl(); } } - setState(187); + setState(222); match(PAR_END); - setState(188); + setState(223); match(CURLY_BEGIN); - setState(190); + setState(225); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(189); + setState(224); stmtSeq(); } } - setState(192); + setState(227); match(CURLY_END); } } @@ -1201,26 +1340,26 @@ public class KickCParser extends Parser { public final ParameterListDeclContext parameterListDecl() throws RecognitionException { ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_parameterListDecl); + enterRule(_localctx, 28, RULE_parameterListDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(194); + setState(229); parameterDecl(); - setState(199); + setState(234); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(195); + setState(230); match(COMMA); - setState(196); + setState(231); parameterDecl(); } } - setState(201); + setState(236); _errHandler.sync(this); _la = _input.LA(1); } @@ -1253,6 +1392,12 @@ public class KickCParser extends Parser { return getRuleContext(DeclTypesContext.class,0); } public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public List declPointer() { + return getRuleContexts(DeclPointerContext.class); + } + public DeclPointerContext declPointer(int i) { + return getRuleContext(DeclPointerContext.class,i); + } public ParameterDeclTypeContext(ParameterDeclContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { @@ -1288,18 +1433,33 @@ public class KickCParser extends Parser { public final ParameterDeclContext parameterDecl() throws RecognitionException { ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_parameterDecl); + enterRule(_localctx, 30, RULE_parameterDecl); + int _la; try { - setState(206); + setState(247); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { case 1: _localctx = new ParameterDeclTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(202); + setState(237); declTypes(); - setState(203); + setState(241); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(238); + declPointer(); + } + } + setState(243); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(244); match(NAME); } break; @@ -1307,7 +1467,7 @@ public class KickCParser extends Parser { _localctx = new ParameterDeclVoidContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(205); + setState(246); match(SIMPLETYPE); } break; @@ -1562,43 +1722,43 @@ public class KickCParser extends Parser { public final GlobalDirectiveContext globalDirective() throws RecognitionException { GlobalDirectiveContext _localctx = new GlobalDirectiveContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_globalDirective); + enterRule(_localctx, 32, RULE_globalDirective); int _la; try { - setState(282); + setState(323); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { case 1: _localctx = new GlobalDirectiveReserveContext(_localctx); enterOuterAlt(_localctx, 1); { { - setState(208); + setState(249); match(PRAGMA); - setState(209); + setState(250); match(RESERVE); } - setState(211); + setState(252); match(PAR_BEGIN); - setState(212); + setState(253); match(NUMBER); - setState(217); + setState(258); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(213); + setState(254); match(COMMA); - setState(214); + setState(255); match(NUMBER); } } - setState(219); + setState(260); _errHandler.sync(this); _la = _input.LA(1); } - setState(220); + setState(261); match(PAR_END); } break; @@ -1607,16 +1767,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 2); { { - setState(221); + setState(262); match(PRAGMA); - setState(222); + setState(263); match(PC); } - setState(224); + setState(265); match(PAR_BEGIN); - setState(225); + setState(266); match(NUMBER); - setState(226); + setState(267); match(PAR_END); } break; @@ -1625,16 +1785,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 3); { { - setState(227); + setState(268); match(PRAGMA); - setState(228); + setState(269); match(TARGET); } - setState(230); + setState(271); match(PAR_BEGIN); - setState(231); + setState(272); match(NAME); - setState(232); + setState(273); match(PAR_END); } break; @@ -1643,16 +1803,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 4); { { - setState(233); + setState(274); match(PRAGMA); - setState(234); + setState(275); match(CPU); } - setState(236); + setState(277); match(PAR_BEGIN); - setState(237); + setState(278); match(NAME); - setState(238); + setState(279); match(PAR_END); } break; @@ -1661,16 +1821,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 5); { { - setState(239); + setState(280); match(PRAGMA); - setState(240); + setState(281); match(LINK); } - setState(242); + setState(283); match(PAR_BEGIN); - setState(243); + setState(284); match(STRING); - setState(244); + setState(285); match(PAR_END); } break; @@ -1679,16 +1839,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 6); { { - setState(245); + setState(286); match(PRAGMA); - setState(246); + setState(287); match(CODESEG); } - setState(248); + setState(289); match(PAR_BEGIN); - setState(249); + setState(290); match(NAME); - setState(250); + setState(291); match(PAR_END); } break; @@ -1697,16 +1857,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 7); { { - setState(251); + setState(292); match(PRAGMA); - setState(252); + setState(293); match(DATASEG); } - setState(254); + setState(295); match(PAR_BEGIN); - setState(255); + setState(296); match(NAME); - setState(256); + setState(297); match(PAR_END); } break; @@ -1715,16 +1875,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 8); { { - setState(257); + setState(298); match(PRAGMA); - setState(258); + setState(299); match(ENCODING); } - setState(260); + setState(301); match(PAR_BEGIN); - setState(261); + setState(302); match(NAME); - setState(262); + setState(303); match(PAR_END); } break; @@ -1733,16 +1893,16 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 9); { { - setState(263); + setState(304); match(PRAGMA); - setState(264); + setState(305); match(CALLING); } - setState(266); + setState(307); match(PAR_BEGIN); - setState(267); + setState(308); match(CALLINGCONVENTION); - setState(268); + setState(309); match(PAR_END); } break; @@ -1751,32 +1911,32 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 10); { { - setState(269); + setState(310); match(PRAGMA); - setState(270); + setState(311); match(VARMODEL); } - setState(272); + setState(313); match(PAR_BEGIN); - setState(273); + setState(314); match(NAME); - setState(278); + setState(319); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(274); + setState(315); match(COMMA); - setState(275); + setState(316); match(NAME); } } - setState(280); + setState(321); _errHandler.sync(this); _la = _input.LA(1); } - setState(281); + setState(322); match(PAR_END); } break; @@ -2101,17 +2261,17 @@ public class KickCParser extends Parser { public final DirectiveContext directive() throws RecognitionException { DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_directive); + enterRule(_localctx, 34, RULE_directive); int _la; try { - setState(326); + setState(367); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(284); + setState(325); match(CONST); } break; @@ -2119,13 +2279,13 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(285); + setState(326); match(ALIGN); - setState(286); + setState(327); match(PAR_BEGIN); - setState(287); + setState(328); match(NUMBER); - setState(288); + setState(329); match(PAR_END); } break; @@ -2133,20 +2293,20 @@ public class KickCParser extends Parser { _localctx = new DirectiveRegisterContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(289); + setState(330); match(REGISTER); - setState(293); + setState(334); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: { - setState(290); + setState(331); match(PAR_BEGIN); { - setState(291); + setState(332); match(NAME); } - setState(292); + setState(333); match(PAR_END); } break; @@ -2157,7 +2317,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaZpContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(295); + setState(336); match(ADDRESS_ZEROPAGE); } break; @@ -2165,7 +2325,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaMainContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(296); + setState(337); match(ADDRESS_MAINMEM); } break; @@ -2173,15 +2333,15 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(297); + setState(338); match(ADDRESS); - setState(298); + setState(339); match(PAR_BEGIN); { - setState(299); + setState(340); match(NUMBER); } - setState(300); + setState(341); match(PAR_END); } break; @@ -2189,7 +2349,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveVolatileContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(301); + setState(342); match(VOLATILE); } break; @@ -2197,7 +2357,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveStaticContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(302); + setState(343); match(STATIC); } break; @@ -2205,7 +2365,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormSsaContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(303); + setState(344); match(FORM_SSA); } break; @@ -2213,7 +2373,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormMaContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(304); + setState(345); match(FORM_MA); } break; @@ -2221,7 +2381,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExternContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(305); + setState(346); match(EXTERN); } break; @@ -2229,7 +2389,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExportContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(306); + setState(347); match(EXPORT); } break; @@ -2237,7 +2397,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveInlineContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(307); + setState(348); match(INLINE); } break; @@ -2245,18 +2405,18 @@ public class KickCParser extends Parser { _localctx = new DirectiveInterruptContext(_localctx); enterOuterAlt(_localctx, 14); { - setState(308); + setState(349); match(INTERRUPT); - setState(312); + setState(353); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: { - setState(309); + setState(350); match(PAR_BEGIN); - setState(310); + setState(351); match(NAME); - setState(311); + setState(352); match(PAR_END); } break; @@ -2267,29 +2427,29 @@ public class KickCParser extends Parser { _localctx = new DirectiveReserveZpContext(_localctx); enterOuterAlt(_localctx, 15); { - setState(314); + setState(355); match(RESERVE); - setState(315); + setState(356); match(PAR_BEGIN); - setState(316); + setState(357); match(NUMBER); - setState(321); + setState(362); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(317); + setState(358); match(COMMA); - setState(318); + setState(359); match(NUMBER); } } - setState(323); + setState(364); _errHandler.sync(this); _la = _input.LA(1); } - setState(324); + setState(365); match(PAR_END); } break; @@ -2297,7 +2457,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveCallingConventionContext(_localctx); enterOuterAlt(_localctx, 16); { - setState(325); + setState(366); match(CALLINGCONVENTION); } break; @@ -2344,22 +2504,22 @@ public class KickCParser extends Parser { public final StmtSeqContext stmtSeq() throws RecognitionException { StmtSeqContext _localctx = new StmtSeqContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_stmtSeq); + enterRule(_localctx, 36, RULE_stmtSeq); int _la; try { enterOuterAlt(_localctx, 1); { - setState(329); + setState(370); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(328); + setState(369); stmt(); } } - setState(331); + setState(372); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0) ); @@ -2703,19 +2863,19 @@ public class KickCParser extends Parser { public final StmtContext stmt() throws RecognitionException { StmtContext _localctx = new StmtContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_stmt); + enterRule(_localctx, 38, RULE_stmt); int _la; try { - setState(417); + setState(458); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(333); + setState(374); declVariables(); - setState(334); + setState(375); match(SEMICOLON); } break; @@ -2723,19 +2883,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(336); + setState(377); match(CURLY_BEGIN); - setState(338); + setState(379); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(337); + setState(378); stmtSeq(); } } - setState(340); + setState(381); match(CURLY_END); } break; @@ -2743,9 +2903,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(341); + setState(382); commaExpr(0); - setState(342); + setState(383); match(SEMICOLON); } break; @@ -2753,24 +2913,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(344); + setState(385); match(IF); - setState(345); + setState(386); match(PAR_BEGIN); - setState(346); + setState(387); commaExpr(0); - setState(347); + setState(388); match(PAR_END); - setState(348); + setState(389); stmt(); - setState(351); + setState(392); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { case 1: { - setState(349); + setState(390); match(ELSE); - setState(350); + setState(391); stmt(); } break; @@ -2781,29 +2941,29 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(356); + setState(397); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(353); + setState(394); directive(); } } - setState(358); + setState(399); _errHandler.sync(this); _la = _input.LA(1); } - setState(359); + setState(400); match(WHILE); - setState(360); + setState(401); match(PAR_BEGIN); - setState(361); + setState(402); commaExpr(0); - setState(362); + setState(403); match(PAR_END); - setState(363); + setState(404); stmt(); } break; @@ -2811,33 +2971,33 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(368); + setState(409); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(365); + setState(406); directive(); } } - setState(370); + setState(411); _errHandler.sync(this); _la = _input.LA(1); } - setState(371); + setState(412); match(DO); - setState(372); + setState(413); stmt(); - setState(373); + setState(414); match(WHILE); - setState(374); + setState(415); match(PAR_BEGIN); - setState(375); + setState(416); commaExpr(0); - setState(376); + setState(417); match(PAR_END); - setState(377); + setState(418); match(SEMICOLON); } break; @@ -2845,29 +3005,29 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(382); + setState(423); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 41)) & ~0x3f) == 0 && ((1L << (_la - 41)) & ((1L << (RESERVE - 41)) | (1L << (CONST - 41)) | (1L << (EXTERN - 41)) | (1L << (EXPORT - 41)) | (1L << (ALIGN - 41)) | (1L << (INLINE - 41)) | (1L << (VOLATILE - 41)) | (1L << (STATIC - 41)) | (1L << (INTERRUPT - 41)) | (1L << (REGISTER - 41)) | (1L << (ADDRESS - 41)) | (1L << (ADDRESS_ZEROPAGE - 41)) | (1L << (ADDRESS_MAINMEM - 41)) | (1L << (FORM_SSA - 41)) | (1L << (FORM_MA - 41)) | (1L << (CALLINGCONVENTION - 41)))) != 0)) { { { - setState(379); + setState(420); directive(); } } - setState(384); + setState(425); _errHandler.sync(this); _la = _input.LA(1); } - setState(385); + setState(426); match(FOR); - setState(386); + setState(427); match(PAR_BEGIN); - setState(387); + setState(428); forLoop(); - setState(388); + setState(429); match(PAR_END); - setState(389); + setState(430); stmt(); } break; @@ -2875,19 +3035,19 @@ public class KickCParser extends Parser { _localctx = new StmtSwitchContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(391); + setState(432); match(SWITCH); - setState(392); + setState(433); match(PAR_BEGIN); - setState(393); + setState(434); commaExpr(0); - setState(394); + setState(435); match(PAR_END); - setState(395); + setState(436); match(CURLY_BEGIN); - setState(396); + setState(437); switchCases(); - setState(397); + setState(438); match(CURLY_END); } break; @@ -2895,19 +3055,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(399); + setState(440); match(RETURN); - setState(401); + setState(442); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(400); + setState(441); commaExpr(0); } } - setState(403); + setState(444); match(SEMICOLON); } break; @@ -2915,9 +3075,9 @@ public class KickCParser extends Parser { _localctx = new StmtBreakContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(404); + setState(445); match(BREAK); - setState(405); + setState(446); match(SEMICOLON); } break; @@ -2925,9 +3085,9 @@ public class KickCParser extends Parser { _localctx = new StmtContinueContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(406); + setState(447); match(CONTINUE); - setState(407); + setState(448); match(SEMICOLON); } break; @@ -2935,23 +3095,23 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(408); + setState(449); match(ASM); - setState(410); + setState(451); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(409); + setState(450); asmDirectives(); } } - setState(412); + setState(453); match(CURLY_BEGIN); - setState(413); + setState(454); asmLines(); - setState(414); + setState(455); match(ASM_CURLY_END); } break; @@ -2959,7 +3119,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(416); + setState(457); declKasm(); } break; @@ -3009,40 +3169,40 @@ public class KickCParser extends Parser { public final SwitchCasesContext switchCases() throws RecognitionException { SwitchCasesContext _localctx = new SwitchCasesContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_switchCases); + enterRule(_localctx, 40, RULE_switchCases); int _la; try { enterOuterAlt(_localctx, 1); { - setState(420); + setState(461); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(419); + setState(460); switchCase(); } } - setState(422); + setState(463); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==CASE ); - setState(429); + setState(470); _errHandler.sync(this); _la = _input.LA(1); if (_la==DEFAULT) { { - setState(424); + setState(465); match(DEFAULT); - setState(425); + setState(466); match(COLON); - setState(427); + setState(468); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(426); + setState(467); stmtSeq(); } } @@ -3093,23 +3253,23 @@ public class KickCParser extends Parser { public final SwitchCaseContext switchCase() throws RecognitionException { SwitchCaseContext _localctx = new SwitchCaseContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_switchCase); + enterRule(_localctx, 42, RULE_switchCase); int _la; try { enterOuterAlt(_localctx, 1); { - setState(431); + setState(472); match(CASE); - setState(432); + setState(473); expr(0); - setState(433); + setState(474); match(COLON); - setState(435); + setState(476); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (IF - 64)) | (1L << (WHILE - 64)) | (1L << (DO - 64)) | (1L << (FOR - 64)) | (1L << (SWITCH - 64)) | (1L << (RETURN - 64)) | (1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)))) != 0)) { { - setState(434); + setState(475); stmtSeq(); } } @@ -3151,6 +3311,12 @@ public class KickCParser extends Parser { public DeclTypesContext declTypes() { return getRuleContext(DeclTypesContext.class,0); } + public List declPointer() { + return getRuleContexts(DeclPointerContext.class); + } + public DeclPointerContext declPointer(int i) { + return getRuleContext(DeclPointerContext.class,i); + } public ForRangeContext(ForLoopContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { @@ -3198,30 +3364,30 @@ public class KickCParser extends Parser { public final ForLoopContext forLoop() throws RecognitionException { ForLoopContext _localctx = new ForLoopContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_forLoop); + enterRule(_localctx, 44, RULE_forLoop); int _la; try { - setState(453); + setState(500); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { case 1: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(437); + setState(478); forClassicInit(); - setState(438); + setState(479); match(SEMICOLON); - setState(439); + setState(480); commaExpr(0); - setState(440); + setState(481); match(SEMICOLON); - setState(442); + setState(483); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(441); + setState(482); commaExpr(0); } } @@ -3232,25 +3398,39 @@ public class KickCParser extends Parser { _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(445); + setState(492); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(444); + setState(485); declTypes(); + setState(489); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ASTERISK) { + { + { + setState(486); + declPointer(); + } + } + setState(491); + _errHandler.sync(this); + _la = _input.LA(1); + } } } - setState(447); + setState(494); match(NAME); - setState(448); + setState(495); match(COLON); - setState(449); + setState(496); expr(0); - setState(450); + setState(497); match(RANGE); - setState(451); + setState(498); expr(0); } break; @@ -3319,22 +3499,22 @@ public class KickCParser extends Parser { public final ForClassicInitContext forClassicInit() throws RecognitionException { ForClassicInitContext _localctx = new ForClassicInitContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_forClassicInit); + enterRule(_localctx, 46, RULE_forClassicInit); int _la; try { - setState(459); + setState(506); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: _localctx = new ForClassicInitDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(456); + setState(503); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0)) { { - setState(455); + setState(502); declVariables(); } } @@ -3345,7 +3525,7 @@ public class KickCParser extends Parser { _localctx = new ForClassicInitExprContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(458); + setState(505); commaExpr(0); } break; @@ -3415,26 +3595,6 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } - public static class TypePtrContext extends TypeDeclContext { - public TypeDeclContext typeDecl() { - return getRuleContext(TypeDeclContext.class,0); - } - public TerminalNode ASTERISK() { return getToken(KickCParser.ASTERISK, 0); } - public TypePtrContext(TypeDeclContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypePtr(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypePtr(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypePtr(this); - else return visitor.visitChildren(this); - } - } public static class TypeArrayContext extends TypeDeclContext { public TypeDeclContext typeDecl() { return getRuleContext(TypeDeclContext.class,0); @@ -3597,27 +3757,27 @@ public class KickCParser extends Parser { int _parentState = getState(); TypeDeclContext _localctx = new TypeDeclContext(_ctx, _parentState); TypeDeclContext _prevctx = _localctx; - int _startState = 46; - enterRecursionRule(_localctx, 46, RULE_typeDecl, _p); + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_typeDecl, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(476); + setState(523); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { case 1: { _localctx = new TypeParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(462); + setState(509); match(PAR_BEGIN); - setState(463); + setState(510); typeDecl(0); - setState(464); + setState(511); match(PAR_END); } break; @@ -3626,7 +3786,7 @@ public class KickCParser extends Parser { _localctx = new TypeSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(466); + setState(513); match(SIMPLETYPE); } break; @@ -3635,14 +3795,14 @@ public class KickCParser extends Parser { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(467); + setState(514); match(SIGNEDNESS); - setState(469); + setState(516); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: { - setState(468); + setState(515); match(SIMPLETYPE); } break; @@ -3654,7 +3814,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(471); + setState(518); structDef(); } break; @@ -3663,7 +3823,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(472); + setState(519); structRef(); } break; @@ -3672,7 +3832,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(473); + setState(520); enumDef(); } break; @@ -3681,7 +3841,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(474); + setState(521); enumRef(); } break; @@ -3690,73 +3850,226 @@ public class KickCParser extends Parser { _localctx = new TypeNamedRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(475); + setState(522); match(TYPEDEFNAME); } break; } _ctx.stop = _input.LT(-1); - setState(491); + setState(536); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + _alt = getInterpreter().adaptivePredict(_input,50,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(489); + setState(534); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { case 1: - { - _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(478); - if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(479); - match(ASTERISK); - } - break; - case 2: { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(480); + setState(525); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(481); + setState(526); match(BRACKET_BEGIN); - setState(483); + setState(528); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(482); + setState(527); expr(0); } } - setState(485); + setState(530); match(BRACKET_END); } break; - case 3: + case 2: { _localctx = new TypeProcedureContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(486); + setState(531); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(487); + setState(532); match(PAR_BEGIN); - setState(488); + setState(533); match(PAR_END); } break; } } } - setState(493); + setState(538); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + _alt = getInterpreter().adaptivePredict(_input,50,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class TypeSpecifierContext extends ParserRuleContext { + public TypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSpecifier; } + + public TypeSpecifierContext() { } + public void copyFrom(TypeSpecifierContext ctx) { + super.copyFrom(ctx); + } + } + public static class TypeSpecifierSimpleContext extends TypeSpecifierContext { + public TypeDeclContext typeDecl() { + return getRuleContext(TypeDeclContext.class,0); + } + public TypeSpecifierSimpleContext(TypeSpecifierContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypeSpecifierSimple(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypeSpecifierSimple(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypeSpecifierSimple(this); + else return visitor.visitChildren(this); + } + } + public static class TypeSpecifierPointerContext extends TypeSpecifierContext { + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); + } + public TerminalNode ASTERISK() { return getToken(KickCParser.ASTERISK, 0); } + public TypeSpecifierPointerContext(TypeSpecifierContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypeSpecifierPointer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypeSpecifierPointer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypeSpecifierPointer(this); + else return visitor.visitChildren(this); + } + } + public static class TypeSpecifierArrayContext extends TypeSpecifierContext { + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); + } + public TerminalNode BRACKET_BEGIN() { return getToken(KickCParser.BRACKET_BEGIN, 0); } + public TerminalNode BRACKET_END() { return getToken(KickCParser.BRACKET_END, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TypeSpecifierArrayContext(TypeSpecifierContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).enterTypeSpecifierArray(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCParserListener ) ((KickCParserListener)listener).exitTypeSpecifierArray(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCParserVisitor ) return ((KickCParserVisitor)visitor).visitTypeSpecifierArray(this); + else return visitor.visitChildren(this); + } + } + + public final TypeSpecifierContext typeSpecifier() throws RecognitionException { + return typeSpecifier(0); + } + + private TypeSpecifierContext typeSpecifier(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + TypeSpecifierContext _localctx = new TypeSpecifierContext(_ctx, _parentState); + TypeSpecifierContext _prevctx = _localctx; + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_typeSpecifier, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new TypeSpecifierSimpleContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(540); + typeDecl(0); + } + _ctx.stop = _input.LT(-1); + setState(552); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(550); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) { + case 1: + { + _localctx = new TypeSpecifierPointerContext(new TypeSpecifierContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_typeSpecifier); + setState(542); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(543); + match(ASTERISK); + } + break; + case 2: + { + _localctx = new TypeSpecifierArrayContext(new TypeSpecifierContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_typeSpecifier); + setState(544); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(545); + match(BRACKET_BEGIN); + setState(547); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { + { + setState(546); + expr(0); + } + } + + setState(549); + match(BRACKET_END); + } + break; + } + } + } + setState(554); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,53,_ctx); } } } @@ -3795,13 +4108,13 @@ public class KickCParser extends Parser { public final StructRefContext structRef() throws RecognitionException { StructRefContext _localctx = new StructRefContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_structRef); + enterRule(_localctx, 52, RULE_structRef); try { enterOuterAlt(_localctx, 1); { - setState(494); + setState(555); match(STRUCT); - setState(495); + setState(556); match(NAME); } } @@ -3848,40 +4161,40 @@ public class KickCParser extends Parser { public final StructDefContext structDef() throws RecognitionException { StructDefContext _localctx = new StructDefContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_structDef); + enterRule(_localctx, 54, RULE_structDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(497); + setState(558); match(STRUCT); - setState(499); + setState(560); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(498); + setState(559); match(NAME); } } - setState(501); + setState(562); match(CURLY_BEGIN); - setState(503); + setState(564); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(502); + setState(563); structMembers(); } } - setState(505); + setState(566); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PAR_BEGIN) | (1L << RESERVE) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (CALLINGCONVENTION - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)))) != 0) ); - setState(507); + setState(568); match(CURLY_END); } } @@ -3922,13 +4235,13 @@ public class KickCParser extends Parser { public final StructMembersContext structMembers() throws RecognitionException { StructMembersContext _localctx = new StructMembersContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_structMembers); + enterRule(_localctx, 56, RULE_structMembers); try { enterOuterAlt(_localctx, 1); { - setState(509); + setState(570); declVariables(); - setState(510); + setState(571); match(SEMICOLON); } } @@ -3967,13 +4280,13 @@ public class KickCParser extends Parser { public final EnumRefContext enumRef() throws RecognitionException { EnumRefContext _localctx = new EnumRefContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_enumRef); + enterRule(_localctx, 58, RULE_enumRef); try { enterOuterAlt(_localctx, 1); { - setState(512); + setState(573); match(ENUM); - setState(513); + setState(574); match(NAME); } } @@ -4017,28 +4330,28 @@ public class KickCParser extends Parser { public final EnumDefContext enumDef() throws RecognitionException { EnumDefContext _localctx = new EnumDefContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_enumDef); + enterRule(_localctx, 60, RULE_enumDef); int _la; try { enterOuterAlt(_localctx, 1); { - setState(515); + setState(576); match(ENUM); - setState(517); + setState(578); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(516); + setState(577); match(NAME); } } - setState(519); + setState(580); match(CURLY_BEGIN); - setState(520); + setState(581); enumMemberList(0); - setState(521); + setState(582); match(CURLY_END); } } @@ -4089,20 +4402,20 @@ public class KickCParser extends Parser { int _parentState = getState(); EnumMemberListContext _localctx = new EnumMemberListContext(_ctx, _parentState); EnumMemberListContext _prevctx = _localctx; - int _startState = 58; - enterRecursionRule(_localctx, 58, RULE_enumMemberList, _p); + int _startState = 62; + enterRecursionRule(_localctx, 62, RULE_enumMemberList, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(524); + setState(585); enumMember(); } _ctx.stop = _input.LT(-1); - setState(531); + setState(592); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + _alt = getInterpreter().adaptivePredict(_input,57,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -4111,18 +4424,18 @@ public class KickCParser extends Parser { { _localctx = new EnumMemberListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_enumMemberList); - setState(526); + setState(587); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(527); + setState(588); match(COMMA); - setState(528); + setState(589); enumMember(); } } } - setState(533); + setState(594); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + _alt = getInterpreter().adaptivePredict(_input,57,_ctx); } } } @@ -4164,20 +4477,20 @@ public class KickCParser extends Parser { public final EnumMemberContext enumMember() throws RecognitionException { EnumMemberContext _localctx = new EnumMemberContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_enumMember); + enterRule(_localctx, 64, RULE_enumMember); try { enterOuterAlt(_localctx, 1); { - setState(534); + setState(595); match(NAME); - setState(537); + setState(598); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: { - setState(535); + setState(596); match(ASSIGN); - setState(536); + setState(597); expr(0); } break; @@ -4258,8 +4571,8 @@ public class KickCParser extends Parser { int _parentState = getState(); CommaExprContext _localctx = new CommaExprContext(_ctx, _parentState); CommaExprContext _prevctx = _localctx; - int _startState = 62; - enterRecursionRule(_localctx, 62, RULE_commaExpr, _p); + int _startState = 66; + enterRecursionRule(_localctx, 66, RULE_commaExpr, _p); try { int _alt; enterOuterAlt(_localctx, 1); @@ -4269,13 +4582,13 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(540); + setState(601); expr(0); } _ctx.stop = _input.LT(-1); - setState(547); + setState(608); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + _alt = getInterpreter().adaptivePredict(_input,59,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -4284,18 +4597,18 @@ public class KickCParser extends Parser { { _localctx = new CommaSimpleContext(new CommaExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_commaExpr); - setState(542); + setState(603); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(543); + setState(604); match(COMMA); - setState(544); + setState(605); expr(0); } } } - setState(549); + setState(610); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + _alt = getInterpreter().adaptivePredict(_input,59,_ctx); } } } @@ -4409,8 +4722,8 @@ public class KickCParser extends Parser { public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public TypeDeclContext typeDecl() { - return getRuleContext(TypeDeclContext.class,0); + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); } public ExprTypeIdContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -4580,8 +4893,8 @@ public class KickCParser extends Parser { } public static class ExprCastContext extends ExprContext { public TerminalNode PAR_BEGIN() { return getToken(KickCParser.PAR_BEGIN, 0); } - public TypeDeclContext typeDecl() { - return getRuleContext(TypeDeclContext.class,0); + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); } public TerminalNode PAR_END() { return getToken(KickCParser.PAR_END, 0); } public ExprContext expr() { @@ -4654,8 +4967,8 @@ public class KickCParser extends Parser { public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public TypeDeclContext typeDecl() { - return getRuleContext(TypeDeclContext.class,0); + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); } public ExprSizeOfContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -4830,27 +5143,27 @@ public class KickCParser extends Parser { int _parentState = getState(); ExprContext _localctx = new ExprContext(_ctx, _parentState); ExprContext _prevctx = _localctx; - int _startState = 64; - enterRecursionRule(_localctx, 64, RULE_expr, _p); + int _startState = 68; + enterRecursionRule(_localctx, 68, RULE_expr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(604); + setState(665); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { case 1: { _localctx = new ExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(551); + setState(612); match(PAR_BEGIN); - setState(552); + setState(613); commaExpr(0); - setState(553); + setState(614); match(PAR_END); } break; @@ -4859,27 +5172,27 @@ public class KickCParser extends Parser { _localctx = new ExprSizeOfContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(555); + setState(616); match(SIZEOF); - setState(556); + setState(617); match(PAR_BEGIN); - setState(559); + setState(620); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) { case 1: { - setState(557); + setState(618); expr(0); } break; case 2: { - setState(558); - typeDecl(0); + setState(619); + typeSpecifier(0); } break; } - setState(561); + setState(622); match(PAR_END); } break; @@ -4888,27 +5201,27 @@ public class KickCParser extends Parser { _localctx = new ExprTypeIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(563); + setState(624); match(TYPEID); - setState(564); + setState(625); match(PAR_BEGIN); - setState(567); + setState(628); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { case 1: { - setState(565); + setState(626); expr(0); } break; case 2: { - setState(566); - typeDecl(0); + setState(627); + typeSpecifier(0); } break; } - setState(569); + setState(630); match(PAR_END); } break; @@ -4917,13 +5230,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(571); + setState(632); match(PAR_BEGIN); - setState(572); - typeDecl(0); - setState(573); + setState(633); + typeSpecifier(0); + setState(634); match(PAR_END); - setState(574); + setState(635); expr(24); } break; @@ -4932,7 +5245,7 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(576); + setState(637); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -4942,7 +5255,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(577); + setState(638); expr(23); } break; @@ -4951,9 +5264,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(578); + setState(639); match(ASTERISK); - setState(579); + setState(640); expr(21); } break; @@ -4962,7 +5275,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(580); + setState(641); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << AND) | (1L << BIT_NOT))) != 0) || _la==LOGIC_NOT) ) { _errHandler.recoverInline(this); @@ -4972,7 +5285,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(581); + setState(642); expr(20); } break; @@ -4981,7 +5294,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(582); + setState(643); _la = _input.LA(1); if ( !(_la==LESS_THAN || _la==GREATER_THAN) ) { _errHandler.recoverInline(this); @@ -4991,7 +5304,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(583); + setState(644); expr(16); } break; @@ -5000,27 +5313,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(584); + setState(645); match(CURLY_BEGIN); - setState(585); + setState(646); expr(0); - setState(590); + setState(651); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(586); + setState(647); match(COMMA); - setState(587); + setState(648); expr(0); } } - setState(592); + setState(653); _errHandler.sync(this); _la = _input.LA(1); } - setState(593); + setState(654); match(CURLY_END); } break; @@ -5029,7 +5342,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(595); + setState(656); match(NAME); } break; @@ -5038,7 +5351,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(596); + setState(657); match(NUMBER); } break; @@ -5047,7 +5360,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(598); + setState(659); _errHandler.sync(this); _alt = 1; do { @@ -5055,7 +5368,7 @@ public class KickCParser extends Parser { case 1: { { - setState(597); + setState(658); match(STRING); } } @@ -5063,9 +5376,9 @@ public class KickCParser extends Parser { default: throw new NoViableAltException(this); } - setState(600); + setState(661); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,53,_ctx); + _alt = getInterpreter().adaptivePredict(_input,63,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; @@ -5074,7 +5387,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(602); + setState(663); match(CHAR); } break; @@ -5083,30 +5396,30 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(603); + setState(664); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(666); + setState(727); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,57,_ctx); + _alt = getInterpreter().adaptivePredict(_input,67,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(664); + setState(725); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(606); + setState(667); if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(607); + setState(668); _la = _input.LA(1); if ( !(_la==SHIFT_LEFT || _la==SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -5116,7 +5429,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(608); + setState(669); expr(20); } break; @@ -5124,9 +5437,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(609); + setState(670); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(610); + setState(671); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASTERISK) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) { _errHandler.recoverInline(this); @@ -5136,7 +5449,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(611); + setState(672); expr(19); } break; @@ -5144,9 +5457,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(612); + setState(673); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(613); + setState(674); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -5156,7 +5469,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(614); + setState(675); expr(18); } break; @@ -5164,9 +5477,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(615); + setState(676); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(616); + setState(677); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQUAL) | (1L << NOT_EQUAL) | (1L << LESS_THAN) | (1L << LESS_THAN_EQUAL) | (1L << GREATER_THAN_EQUAL) | (1L << GREATER_THAN))) != 0)) ) { _errHandler.recoverInline(this); @@ -5176,7 +5489,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(617); + setState(678); expr(16); } break; @@ -5184,13 +5497,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(618); + setState(679); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); { - setState(619); + setState(680); match(AND); } - setState(620); + setState(681); expr(15); } break; @@ -5198,13 +5511,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(621); + setState(682); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(622); + setState(683); match(BIT_XOR); } - setState(623); + setState(684); expr(14); } break; @@ -5212,13 +5525,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(624); + setState(685); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(625); + setState(686); match(BIT_OR); } - setState(626); + setState(687); expr(13); } break; @@ -5226,13 +5539,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(627); + setState(688); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(628); + setState(689); match(LOGIC_AND); } - setState(629); + setState(690); expr(12); } break; @@ -5240,13 +5553,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(630); + setState(691); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(631); + setState(692); match(LOGIC_OR); } - setState(632); + setState(693); expr(11); } break; @@ -5254,15 +5567,15 @@ public class KickCParser extends Parser { { _localctx = new ExprTernaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(633); + setState(694); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(634); + setState(695); match(CONDITION); - setState(635); + setState(696); expr(0); - setState(636); + setState(697); match(COLON); - setState(637); + setState(698); expr(10); } break; @@ -5270,11 +5583,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(639); + setState(700); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(640); + setState(701); match(ASSIGN); - setState(641); + setState(702); expr(8); } break; @@ -5282,11 +5595,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(642); + setState(703); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(643); + setState(704); match(ASSIGN_COMPOUND); - setState(644); + setState(705); expr(7); } break; @@ -5294,11 +5607,11 @@ public class KickCParser extends Parser { { _localctx = new ExprDotContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(645); + setState(706); if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)"); - setState(646); + setState(707); match(DOT); - setState(647); + setState(708); match(NAME); } break; @@ -5306,11 +5619,11 @@ public class KickCParser extends Parser { { _localctx = new ExprArrowContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(648); + setState(709); if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)"); - setState(649); + setState(710); match(ARROW); - setState(650); + setState(711); match(NAME); } break; @@ -5318,21 +5631,21 @@ public class KickCParser extends Parser { { _localctx = new ExprCallContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(651); + setState(712); if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)"); - setState(652); + setState(713); match(PAR_BEGIN); - setState(654); + setState(715); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (SIZEOF - 80)) | (1L << (TYPEID - 80)) | (1L << (LOGIC_NOT - 80)) | (1L << (BOOLEAN - 80)) | (1L << (STRING - 80)) | (1L << (CHAR - 80)) | (1L << (NUMBER - 80)) | (1L << (NAME - 80)))) != 0)) { { - setState(653); + setState(714); parameterList(); } } - setState(656); + setState(717); match(PAR_END); } break; @@ -5340,13 +5653,13 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(657); + setState(718); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(658); + setState(719); match(BRACKET_BEGIN); - setState(659); + setState(720); commaExpr(0); - setState(660); + setState(721); match(BRACKET_END); } break; @@ -5354,9 +5667,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(662); + setState(723); if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(663); + setState(724); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -5371,9 +5684,9 @@ public class KickCParser extends Parser { } } } - setState(668); + setState(729); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,57,_ctx); + _alt = getInterpreter().adaptivePredict(_input,67,_ctx); } } } @@ -5420,26 +5733,26 @@ public class KickCParser extends Parser { public final ParameterListContext parameterList() throws RecognitionException { ParameterListContext _localctx = new ParameterListContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_parameterList); + enterRule(_localctx, 70, RULE_parameterList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(669); + setState(730); expr(0); - setState(674); + setState(735); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(670); + setState(731); match(COMMA); - setState(671); + setState(732); expr(0); } } - setState(676); + setState(737); _errHandler.sync(this); _la = _input.LA(1); } @@ -5483,24 +5796,24 @@ public class KickCParser extends Parser { public final DeclKasmContext declKasm() throws RecognitionException { DeclKasmContext _localctx = new DeclKasmContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_declKasm); + enterRule(_localctx, 72, RULE_declKasm); int _la; try { enterOuterAlt(_localctx, 1); { - setState(677); + setState(738); match(KICKASM); - setState(679); + setState(740); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(678); + setState(739); asmDirectives(); } } - setState(681); + setState(742); match(KICKASM_BODY); } } @@ -5549,32 +5862,32 @@ public class KickCParser extends Parser { public final AsmDirectivesContext asmDirectives() throws RecognitionException { AsmDirectivesContext _localctx = new AsmDirectivesContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_asmDirectives); + enterRule(_localctx, 74, RULE_asmDirectives); int _la; try { enterOuterAlt(_localctx, 1); { - setState(683); + setState(744); match(PAR_BEGIN); - setState(684); + setState(745); asmDirective(); - setState(689); + setState(750); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(685); + setState(746); match(COMMA); - setState(686); + setState(747); asmDirective(); } } - setState(691); + setState(752); _errHandler.sync(this); _la = _input.LA(1); } - setState(692); + setState(753); match(PAR_END); } } @@ -5718,18 +6031,18 @@ public class KickCParser extends Parser { public final AsmDirectiveContext asmDirective() throws RecognitionException { AsmDirectiveContext _localctx = new AsmDirectiveContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_asmDirective); + enterRule(_localctx, 76, RULE_asmDirective); try { - setState(709); + setState(770); _errHandler.sync(this); switch (_input.LA(1)) { case RESOURCE: _localctx = new AsmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(694); + setState(755); match(RESOURCE); - setState(695); + setState(756); match(STRING); } break; @@ -5737,9 +6050,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveUsesContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(696); + setState(757); match(USES); - setState(697); + setState(758); match(NAME); } break; @@ -5747,9 +6060,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveClobberContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(698); + setState(759); match(CLOBBERS); - setState(699); + setState(760); match(STRING); } break; @@ -5757,9 +6070,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(700); + setState(761); match(BYTES); - setState(701); + setState(762); expr(0); } break; @@ -5767,9 +6080,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveCyclesContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(702); + setState(763); match(CYCLES); - setState(703); + setState(764); expr(0); } break; @@ -5777,14 +6090,14 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(704); + setState(765); match(PC); - setState(707); + setState(768); _errHandler.sync(this); switch (_input.LA(1)) { case INLINE: { - setState(705); + setState(766); match(INLINE); } break; @@ -5808,7 +6121,7 @@ public class KickCParser extends Parser { case NUMBER: case NAME: { - setState(706); + setState(767); expr(0); } break; @@ -5860,22 +6173,22 @@ public class KickCParser extends Parser { public final AsmLinesContext asmLines() throws RecognitionException { AsmLinesContext _localctx = new AsmLinesContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_asmLines); + enterRule(_localctx, 78, RULE_asmLines); int _la; try { enterOuterAlt(_localctx, 1); { - setState(714); + setState(775); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 108)) & ~0x3f) == 0 && ((1L << (_la - 108)) & ((1L << (ASM_BYTE - 108)) | (1L << (ASM_MNEMONIC - 108)) | (1L << (ASM_MULTI_NAME - 108)) | (1L << (ASM_NAME - 108)))) != 0)) { { { - setState(711); + setState(772); asmLine(); } } - setState(716); + setState(777); _errHandler.sync(this); _la = _input.LA(1); } @@ -5923,30 +6236,30 @@ public class KickCParser extends Parser { public final AsmLineContext asmLine() throws RecognitionException { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_asmLine); + enterRule(_localctx, 80, RULE_asmLine); try { - setState(720); + setState(781); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_MULTI_NAME: case ASM_NAME: enterOuterAlt(_localctx, 1); { - setState(717); + setState(778); asmLabel(); } break; case ASM_MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(718); + setState(779); asmInstruction(); } break; case ASM_BYTE: enterOuterAlt(_localctx, 3); { - setState(719); + setState(780); asmBytes(); } break; @@ -6015,18 +6328,18 @@ public class KickCParser extends Parser { public final AsmLabelContext asmLabel() throws RecognitionException { AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_asmLabel); + enterRule(_localctx, 82, RULE_asmLabel); try { - setState(726); + setState(787); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(722); + setState(783); match(ASM_NAME); - setState(723); + setState(784); match(ASM_COLON); } break; @@ -6034,9 +6347,9 @@ public class KickCParser extends Parser { _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(724); + setState(785); match(ASM_MULTI_NAME); - setState(725); + setState(786); match(ASM_COLON); } break; @@ -6081,18 +6394,18 @@ public class KickCParser extends Parser { public final AsmInstructionContext asmInstruction() throws RecognitionException { AsmInstructionContext _localctx = new AsmInstructionContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_asmInstruction); + enterRule(_localctx, 84, RULE_asmInstruction); try { enterOuterAlt(_localctx, 1); { - setState(728); + setState(789); match(ASM_MNEMONIC); - setState(730); + setState(791); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,66,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) { case 1: { - setState(729); + setState(790); asmParamMode(); } break; @@ -6143,28 +6456,28 @@ public class KickCParser extends Parser { public final AsmBytesContext asmBytes() throws RecognitionException { AsmBytesContext _localctx = new AsmBytesContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_asmBytes); + enterRule(_localctx, 86, RULE_asmBytes); int _la; try { enterOuterAlt(_localctx, 1); { - setState(732); + setState(793); match(ASM_BYTE); - setState(733); + setState(794); asmExpr(0); - setState(738); + setState(799); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_COMMA) { { { - setState(734); + setState(795); match(ASM_COMMA); - setState(735); + setState(796); asmExpr(0); } } - setState(740); + setState(801); _errHandler.sync(this); _la = _input.LA(1); } @@ -6322,16 +6635,16 @@ public class KickCParser extends Parser { public final AsmParamModeContext asmParamMode() throws RecognitionException { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_asmParamMode); + enterRule(_localctx, 88, RULE_asmParamMode); try { - setState(764); + setState(825); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(741); + setState(802); asmExpr(0); } break; @@ -6339,9 +6652,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(742); + setState(803); match(ASM_IMM); - setState(743); + setState(804); asmExpr(0); } break; @@ -6349,11 +6662,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(744); + setState(805); asmExpr(0); - setState(745); + setState(806); match(ASM_COMMA); - setState(746); + setState(807); match(ASM_NAME); } break; @@ -6361,15 +6674,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(748); + setState(809); match(ASM_PAR_BEGIN); - setState(749); + setState(810); asmExpr(0); - setState(750); + setState(811); match(ASM_PAR_END); - setState(751); + setState(812); match(ASM_COMMA); - setState(752); + setState(813); match(ASM_NAME); } break; @@ -6377,15 +6690,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(754); + setState(815); match(ASM_PAR_BEGIN); - setState(755); + setState(816); asmExpr(0); - setState(756); + setState(817); match(ASM_COMMA); - setState(757); + setState(818); match(ASM_NAME); - setState(758); + setState(819); match(ASM_PAR_END); } break; @@ -6393,11 +6706,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(760); + setState(821); match(ASM_PAR_BEGIN); - setState(761); + setState(822); asmExpr(0); - setState(762); + setState(823); match(ASM_PAR_END); } break; @@ -6595,14 +6908,14 @@ public class KickCParser extends Parser { int _parentState = getState(); AsmExprContext _localctx = new AsmExprContext(_ctx, _parentState); AsmExprContext _prevctx = _localctx; - int _startState = 86; - enterRecursionRule(_localctx, 86, RULE_asmExpr, _p); + int _startState = 90; + enterRecursionRule(_localctx, 90, RULE_asmExpr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(780); + setState(841); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_BRACKET_BEGIN: @@ -6611,11 +6924,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(767); + setState(828); match(ASM_BRACKET_BEGIN); - setState(768); + setState(829); asmExpr(0); - setState(769); + setState(830); match(ASM_BRACKET_END); } break; @@ -6627,7 +6940,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(771); + setState(832); _la = _input.LA(1); if ( !(((((_la - 120)) & ~0x3f) == 0 && ((1L << (_la - 120)) & ((1L << (ASM_PLUS - 120)) | (1L << (ASM_MINUS - 120)) | (1L << (ASM_LESS_THAN - 120)) | (1L << (ASM_GREATER_THAN - 120)))) != 0)) ) { _errHandler.recoverInline(this); @@ -6637,7 +6950,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(772); + setState(833); asmExpr(8); } break; @@ -6646,7 +6959,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(773); + setState(834); match(ASM_NAME); } break; @@ -6655,7 +6968,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(774); + setState(835); match(ASM_MULTI_REL); } break; @@ -6664,11 +6977,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(775); + setState(836); match(ASM_CURLY_BEGIN); - setState(776); + setState(837); match(ASM_NAME); - setState(777); + setState(838); match(ASM_CURLY_END); } break; @@ -6677,7 +6990,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(778); + setState(839); match(ASM_NUMBER); } break; @@ -6686,7 +6999,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(779); + setState(840); match(ASM_CHAR); } break; @@ -6694,28 +7007,28 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(796); + setState(857); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,71,_ctx); + _alt = getInterpreter().adaptivePredict(_input,81,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(794); + setState(855); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(782); + setState(843); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(783); + setState(844); match(ASM_DOT); } - setState(784); + setState(845); asmExpr(11); } break; @@ -6723,9 +7036,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(785); + setState(846); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(786); + setState(847); _la = _input.LA(1); if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -6735,7 +7048,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(787); + setState(848); asmExpr(10); } break; @@ -6743,9 +7056,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(788); + setState(849); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(789); + setState(850); _la = _input.LA(1); if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) { _errHandler.recoverInline(this); @@ -6755,7 +7068,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(790); + setState(851); asmExpr(8); } break; @@ -6763,9 +7076,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(791); + setState(852); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(792); + setState(853); _la = _input.LA(1); if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) { _errHandler.recoverInline(this); @@ -6775,16 +7088,16 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(793); + setState(854); asmExpr(7); } break; } } } - setState(798); + setState(859); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,71,_ctx); + _alt = getInterpreter().adaptivePredict(_input,81,_ctx); } } } @@ -6801,19 +7114,21 @@ public class KickCParser extends Parser { public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 9: + case 8: return declVariableList_sempred((DeclVariableListContext)_localctx, predIndex); - case 11: + case 12: return declVariable_sempred((DeclVariableContext)_localctx, predIndex); - case 23: + case 24: return typeDecl_sempred((TypeDeclContext)_localctx, predIndex); - case 29: - return enumMemberList_sempred((EnumMemberListContext)_localctx, predIndex); + case 25: + return typeSpecifier_sempred((TypeSpecifierContext)_localctx, predIndex); case 31: + return enumMemberList_sempred((EnumMemberListContext)_localctx, predIndex); + case 33: return commaExpr_sempred((CommaExprContext)_localctx, predIndex); - case 32: + case 34: return expr_sempred((ExprContext)_localctx, predIndex); - case 43: + case 45: return asmExpr_sempred((AsmExprContext)_localctx, predIndex); } return true; @@ -6835,395 +7150,427 @@ public class KickCParser extends Parser { private boolean typeDecl_sempred(TypeDeclContext _localctx, int predIndex) { switch (predIndex) { case 2: - return precpred(_ctx, 8); - case 3: return precpred(_ctx, 7); - case 4: + case 3: return precpred(_ctx, 6); } return true; } - private boolean enumMemberList_sempred(EnumMemberListContext _localctx, int predIndex) { + private boolean typeSpecifier_sempred(TypeSpecifierContext _localctx, int predIndex) { switch (predIndex) { + case 4: + return precpred(_ctx, 2); case 5: return precpred(_ctx, 1); } return true; } - private boolean commaExpr_sempred(CommaExprContext _localctx, int predIndex) { + private boolean enumMemberList_sempred(EnumMemberListContext _localctx, int predIndex) { switch (predIndex) { case 6: return precpred(_ctx, 1); } return true; } - private boolean expr_sempred(ExprContext _localctx, int predIndex) { + private boolean commaExpr_sempred(CommaExprContext _localctx, int predIndex) { switch (predIndex) { case 7: - return precpred(_ctx, 19); + return precpred(_ctx, 1); + } + return true; + } + private boolean expr_sempred(ExprContext _localctx, int predIndex) { + switch (predIndex) { case 8: - return precpred(_ctx, 18); + return precpred(_ctx, 19); case 9: - return precpred(_ctx, 17); + return precpred(_ctx, 18); case 10: - return precpred(_ctx, 15); + return precpred(_ctx, 17); case 11: - return precpred(_ctx, 14); + return precpred(_ctx, 15); case 12: - return precpred(_ctx, 13); + return precpred(_ctx, 14); case 13: - return precpred(_ctx, 12); + return precpred(_ctx, 13); case 14: - return precpred(_ctx, 11); + return precpred(_ctx, 12); case 15: - return precpred(_ctx, 10); + return precpred(_ctx, 11); case 16: - return precpred(_ctx, 9); + return precpred(_ctx, 10); case 17: - return precpred(_ctx, 8); + return precpred(_ctx, 9); case 18: - return precpred(_ctx, 7); + return precpred(_ctx, 8); case 19: - return precpred(_ctx, 30); + return precpred(_ctx, 7); case 20: - return precpred(_ctx, 29); + return precpred(_ctx, 30); case 21: - return precpred(_ctx, 28); + return precpred(_ctx, 29); case 22: - return precpred(_ctx, 25); + return precpred(_ctx, 28); case 23: + return precpred(_ctx, 25); + case 24: return precpred(_ctx, 22); } return true; } private boolean asmExpr_sempred(AsmExprContext _localctx, int predIndex) { switch (predIndex) { - case 24: - return precpred(_ctx, 10); case 25: - return precpred(_ctx, 9); + return precpred(_ctx, 10); case 26: - return precpred(_ctx, 7); + return precpred(_ctx, 9); case 27: + return precpred(_ctx, 7); + case 28: return precpred(_ctx, 6); } return true; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u0322\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0091\u035f\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\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\4-\t-\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4b\n\4\f\4\16\4e\13\4\3\5\3\5"+ - "\5\5i\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+ - "\3\7\3\7\3\7\5\7}\n\7\3\b\3\b\3\b\3\b\3\b\3\t\7\t\u0085\n\t\f\t\16\t\u0088"+ - "\13\t\3\t\3\t\7\t\u008c\n\t\f\t\16\t\u008f\13\t\3\n\3\n\3\n\3\13\3\13"+ - "\3\13\3\13\3\13\3\13\7\13\u009a\n\13\f\13\16\13\u009d\13\13\3\f\3\f\3"+ - "\f\5\f\u00a2\n\f\3\f\3\f\3\f\3\f\5\f\u00a8\n\f\3\r\3\r\3\r\3\r\3\r\3\r"+ - "\5\r\u00b0\n\r\3\r\7\r\u00b3\n\r\f\r\16\r\u00b6\13\r\3\16\3\16\3\16\3"+ - "\16\5\16\u00bc\n\16\3\16\3\16\3\16\5\16\u00c1\n\16\3\16\3\16\3\17\3\17"+ - "\3\17\7\17\u00c8\n\17\f\17\16\17\u00cb\13\17\3\20\3\20\3\20\3\20\5\20"+ - "\u00d1\n\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\7\21\u00da\n\21\f\21\16"+ - "\21\u00dd\13\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\7\21\u0117\n\21\f\21\16\21\u011a\13\21\3\21\5\21\u011d"+ - "\n\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u0128\n\22\3\22"+ + ",\t,\4-\t-\4.\t.\4/\t/\3\2\3\2\3\2\3\3\3\3\3\3\3\4\7\4f\n\4\f\4\16\4i"+ + "\13\4\3\5\3\5\5\5m\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\7"+ + "\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u0081\n\7\3\b\7\b\u0084\n\b\f\b\16\b\u0087"+ + "\13\b\3\b\3\b\7\b\u008b\n\b\f\b\16\b\u008e\13\b\3\t\3\t\3\t\3\n\3\n\7"+ + "\n\u0095\n\n\f\n\16\n\u0098\13\n\3\n\3\n\3\n\3\n\3\n\7\n\u009f\n\n\f\n"+ + "\16\n\u00a2\13\n\3\n\7\n\u00a5\n\n\f\n\16\n\u00a8\13\n\3\13\3\13\7\13"+ + "\u00ac\n\13\f\13\16\13\u00af\13\13\3\f\3\f\3\f\7\f\u00b4\n\f\f\f\16\f"+ + "\u00b7\13\f\3\f\3\f\3\f\3\r\3\r\3\r\5\r\u00bf\n\r\3\r\3\r\3\r\3\r\5\r"+ + "\u00c5\n\r\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00cd\n\16\3\16\7\16\u00d0"+ + "\n\16\f\16\16\16\u00d3\13\16\3\17\3\17\7\17\u00d7\n\17\f\17\16\17\u00da"+ + "\13\17\3\17\3\17\3\17\5\17\u00df\n\17\3\17\3\17\3\17\5\17\u00e4\n\17\3"+ + "\17\3\17\3\20\3\20\3\20\7\20\u00eb\n\20\f\20\16\20\u00ee\13\20\3\21\3"+ + "\21\7\21\u00f2\n\21\f\21\16\21\u00f5\13\21\3\21\3\21\3\21\5\21\u00fa\n"+ + "\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\7\22\u0103\n\22\f\22\16\22\u0106"+ + "\13\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ - "\3\22\3\22\5\22\u013b\n\22\3\22\3\22\3\22\3\22\3\22\7\22\u0142\n\22\f"+ - "\22\16\22\u0145\13\22\3\22\3\22\5\22\u0149\n\22\3\23\6\23\u014c\n\23\r"+ - "\23\16\23\u014d\3\24\3\24\3\24\3\24\3\24\5\24\u0155\n\24\3\24\3\24\3\24"+ - "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0162\n\24\3\24\7\24\u0165"+ - "\n\24\f\24\16\24\u0168\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0171"+ - "\n\24\f\24\16\24\u0174\13\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3"+ - "\24\7\24\u017f\n\24\f\24\16\24\u0182\13\24\3\24\3\24\3\24\3\24\3\24\3"+ - "\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0194\n\24"+ - "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u019d\n\24\3\24\3\24\3\24\3\24"+ - "\3\24\5\24\u01a4\n\24\3\25\6\25\u01a7\n\25\r\25\16\25\u01a8\3\25\3\25"+ - "\3\25\5\25\u01ae\n\25\5\25\u01b0\n\25\3\26\3\26\3\26\3\26\5\26\u01b6\n"+ - "\26\3\27\3\27\3\27\3\27\3\27\5\27\u01bd\n\27\3\27\5\27\u01c0\n\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\5\27\u01c8\n\27\3\30\5\30\u01cb\n\30\3\30\5"+ - "\30\u01ce\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u01d8\n\31"+ - "\3\31\3\31\3\31\3\31\3\31\5\31\u01df\n\31\3\31\3\31\3\31\3\31\3\31\5\31"+ - "\u01e6\n\31\3\31\3\31\3\31\3\31\7\31\u01ec\n\31\f\31\16\31\u01ef\13\31"+ - "\3\32\3\32\3\32\3\33\3\33\5\33\u01f6\n\33\3\33\3\33\6\33\u01fa\n\33\r"+ - "\33\16\33\u01fb\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\5\36"+ - "\u0208\n\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0214"+ - "\n\37\f\37\16\37\u0217\13\37\3 \3 \3 \5 \u021c\n \3!\3!\3!\3!\3!\3!\7"+ - "!\u0224\n!\f!\16!\u0227\13!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u0232"+ - "\n\"\3\"\3\"\3\"\3\"\3\"\3\"\5\"\u023a\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ - "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u024f\n\"\f\"\16"+ - "\"\u0252\13\"\3\"\3\"\3\"\3\"\3\"\6\"\u0259\n\"\r\"\16\"\u025a\3\"\3\""+ - "\5\"\u025f\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ - "\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+ - "\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\5\""+ - "\u0291\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\7\"\u029b\n\"\f\"\16\"\u029e"+ - "\13\"\3#\3#\3#\7#\u02a3\n#\f#\16#\u02a6\13#\3$\3$\5$\u02aa\n$\3$\3$\3"+ - "%\3%\3%\3%\7%\u02b2\n%\f%\16%\u02b5\13%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3&"+ - "\3&\3&\3&\3&\3&\5&\u02c6\n&\5&\u02c8\n&\3\'\7\'\u02cb\n\'\f\'\16\'\u02ce"+ - "\13\'\3(\3(\3(\5(\u02d3\n(\3)\3)\3)\3)\5)\u02d9\n)\3*\3*\5*\u02dd\n*\3"+ - "+\3+\3+\3+\7+\u02e3\n+\f+\16+\u02e6\13+\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,"+ - "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u02ff\n,\3-\3-\3-\3-\3-\3-"+ - "\3-\3-\3-\3-\3-\3-\3-\3-\5-\u030f\n-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-\3-"+ - "\3-\7-\u031d\n-\f-\16-\u0320\13-\3-\2\t\24\30\60<@BX.\2\4\6\b\n\f\16\20"+ - "\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVX\2\r\3\2\26"+ - "\27\5\2\21\22\30\31ZZ\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3"+ - "\2z}\3\2xy\3\2~\177\3\2z{\2\u0395\2Z\3\2\2\2\4]\3\2\2\2\6c\3\2\2\2\bh"+ - "\3\2\2\2\nj\3\2\2\2\f|\3\2\2\2\16~\3\2\2\2\20\u0086\3\2\2\2\22\u0090\3"+ - "\2\2\2\24\u0093\3\2\2\2\26\u00a7\3\2\2\2\30\u00a9\3\2\2\2\32\u00b7\3\2"+ - "\2\2\34\u00c4\3\2\2\2\36\u00d0\3\2\2\2 \u011c\3\2\2\2\"\u0148\3\2\2\2"+ - "$\u014b\3\2\2\2&\u01a3\3\2\2\2(\u01a6\3\2\2\2*\u01b1\3\2\2\2,\u01c7\3"+ - "\2\2\2.\u01cd\3\2\2\2\60\u01de\3\2\2\2\62\u01f0\3\2\2\2\64\u01f3\3\2\2"+ - "\2\66\u01ff\3\2\2\28\u0202\3\2\2\2:\u0205\3\2\2\2<\u020d\3\2\2\2>\u0218"+ - "\3\2\2\2@\u021d\3\2\2\2B\u025e\3\2\2\2D\u029f\3\2\2\2F\u02a7\3\2\2\2H"+ - "\u02ad\3\2\2\2J\u02c7\3\2\2\2L\u02cc\3\2\2\2N\u02d2\3\2\2\2P\u02d8\3\2"+ - "\2\2R\u02da\3\2\2\2T\u02de\3\2\2\2V\u02fe\3\2\2\2X\u030e\3\2\2\2Z[\5\6"+ - "\4\2[\\\7\2\2\3\\\3\3\2\2\2]^\5L\'\2^_\7\2\2\3_\5\3\2\2\2`b\5\b\5\2a`"+ - "\3\2\2\2be\3\2\2\2ca\3\2\2\2cd\3\2\2\2d\7\3\2\2\2ec\3\2\2\2fi\5\f\7\2"+ - "gi\5\n\6\2hf\3\2\2\2hg\3\2\2\2i\t\3\2\2\2jk\7(\2\2kl\7_\2\2l\13\3\2\2"+ - "\2mn\5\22\n\2no\7\n\2\2o}\3\2\2\2pq\5\64\33\2qr\7\n\2\2r}\3\2\2\2st\5"+ - ":\36\2tu\7\n\2\2u}\3\2\2\2v}\5\32\16\2w}\5F$\2x}\5 \21\2yz\5\16\b\2z{"+ - "\7\n\2\2{}\3\2\2\2|m\3\2\2\2|p\3\2\2\2|s\3\2\2\2|v\3\2\2\2|w\3\2\2\2|"+ - "x\3\2\2\2|y\3\2\2\2}\r\3\2\2\2~\177\7)\2\2\177\u0080\5\60\31\2\u0080\u0081"+ - "\7j\2\2\u0081\u0082\b\b\1\2\u0082\17\3\2\2\2\u0083\u0085\5\"\22\2\u0084"+ - "\u0083\3\2\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2"+ - "\2\2\u0087\u0089\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008d\5\60\31\2\u008a"+ - "\u008c\5\"\22\2\u008b\u008a\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3"+ - "\2\2\2\u008d\u008e\3\2\2\2\u008e\21\3\2\2\2\u008f\u008d\3\2\2\2\u0090"+ - "\u0091\5\20\t\2\u0091\u0092\5\24\13\2\u0092\23\3\2\2\2\u0093\u0094\b\13"+ - "\1\2\u0094\u0095\5\26\f\2\u0095\u009b\3\2\2\2\u0096\u0097\f\3\2\2\u0097"+ - "\u0098\7\f\2\2\u0098\u009a\5\26\f\2\u0099\u0096\3\2\2\2\u009a\u009d\3"+ - "\2\2\2\u009b\u0099\3\2\2\2\u009b\u009c\3\2\2\2\u009c\25\3\2\2\2\u009d"+ - "\u009b\3\2\2\2\u009e\u00a1\5\30\r\2\u009f\u00a0\7&\2\2\u00a0\u00a2\5B"+ - "\"\2\u00a1\u009f\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a8\3\2\2\2\u00a3"+ - "\u00a4\5\30\r\2\u00a4\u00a5\7&\2\2\u00a5\u00a6\5F$\2\u00a6\u00a8\3\2\2"+ - "\2\u00a7\u009e\3\2\2\2\u00a7\u00a3\3\2\2\2\u00a8\27\3\2\2\2\u00a9\u00aa"+ - "\b\r\1\2\u00aa\u00ab\7j\2\2\u00ab\u00b4\3\2\2\2\u00ac\u00ad\f\3\2\2\u00ad"+ - "\u00af\7\6\2\2\u00ae\u00b0\5B\"\2\u00af\u00ae\3\2\2\2\u00af\u00b0\3\2"+ - "\2\2\u00b0\u00b1\3\2\2\2\u00b1\u00b3\7\7\2\2\u00b2\u00ac\3\2\2\2\u00b3"+ - "\u00b6\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\31\3\2\2"+ - "\2\u00b6\u00b4\3\2\2\2\u00b7\u00b8\5\20\t\2\u00b8\u00b9\7j\2\2\u00b9\u00bb"+ - "\7\b\2\2\u00ba\u00bc\5\34\17\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3\2\2\2"+ - "\u00bc\u00bd\3\2\2\2\u00bd\u00be\7\t\2\2\u00be\u00c0\7\4\2\2\u00bf\u00c1"+ - "\5$\23\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2"+ - "\u00c3\7\5\2\2\u00c3\33\3\2\2\2\u00c4\u00c9\5\36\20\2\u00c5\u00c6\7\f"+ - "\2\2\u00c6\u00c8\5\36\20\2\u00c7\u00c5\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+ - "\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\35\3\2\2\2\u00cb\u00c9\3\2\2"+ - "\2\u00cc\u00cd\5\20\t\2\u00cd\u00ce\7j\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00d1"+ - "\7\\\2\2\u00d0\u00cc\3\2\2\2\u00d0\u00cf\3\2\2\2\u00d1\37\3\2\2\2\u00d2"+ - "\u00d3\7*\2\2\u00d3\u00d4\7+\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\7\b\2"+ - "\2\u00d6\u00db\7a\2\2\u00d7\u00d8\7\f\2\2\u00d8\u00da\7a\2\2\u00d9\u00d7"+ - "\3\2\2\2\u00da\u00dd\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+ - "\u00de\3\2\2\2\u00dd\u00db\3\2\2\2\u00de\u011d\7\t\2\2\u00df\u00e0\7*"+ - "\2\2\u00e0\u00e1\7,\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\7\b\2\2\u00e3"+ - "\u00e4\7a\2\2\u00e4\u011d\7\t\2\2\u00e5\u00e6\7*\2\2\u00e6\u00e7\7-\2"+ - "\2\u00e7\u00e8\3\2\2\2\u00e8\u00e9\7\b\2\2\u00e9\u00ea\7j\2\2\u00ea\u011d"+ - "\7\t\2\2\u00eb\u00ec\7*\2\2\u00ec\u00ed\7/\2\2\u00ed\u00ee\3\2\2\2\u00ee"+ - "\u00ef\7\b\2\2\u00ef\u00f0\7j\2\2\u00f0\u011d\7\t\2\2\u00f1\u00f2\7*\2"+ - "\2\u00f2\u00f3\7.\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\7\b\2\2\u00f5\u00f6"+ - "\7_\2\2\u00f6\u011d\7\t\2\2\u00f7\u00f8\7*\2\2\u00f8\u00f9\7\60\2\2\u00f9"+ - "\u00fa\3\2\2\2\u00fa\u00fb\7\b\2\2\u00fb\u00fc\7j\2\2\u00fc\u011d\7\t"+ - "\2\2\u00fd\u00fe\7*\2\2\u00fe\u00ff\7\61\2\2\u00ff\u0100\3\2\2\2\u0100"+ - "\u0101\7\b\2\2\u0101\u0102\7j\2\2\u0102\u011d\7\t\2\2\u0103\u0104\7*\2"+ - "\2\u0104\u0105\7\62\2\2\u0105\u0106\3\2\2\2\u0106\u0107\7\b\2\2\u0107"+ - "\u0108\7j\2\2\u0108\u011d\7\t\2\2\u0109\u010a\7*\2\2\u010a\u010b\7A\2"+ - "\2\u010b\u010c\3\2\2\2\u010c\u010d\7\b\2\2\u010d\u010e\7B\2\2\u010e\u011d"+ - "\7\t\2\2\u010f\u0110\7*\2\2\u0110\u0111\7C\2\2\u0111\u0112\3\2\2\2\u0112"+ - "\u0113\7\b\2\2\u0113\u0118\7j\2\2\u0114\u0115\7\f\2\2\u0115\u0117\7j\2"+ - "\2\u0116\u0114\3\2\2\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0119"+ - "\3\2\2\2\u0119\u011b\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011d\7\t\2\2\u011c"+ - "\u00d2\3\2\2\2\u011c\u00df\3\2\2\2\u011c\u00e5\3\2\2\2\u011c\u00eb\3\2"+ - "\2\2\u011c\u00f1\3\2\2\2\u011c\u00f7\3\2\2\2\u011c\u00fd\3\2\2\2\u011c"+ - "\u0103\3\2\2\2\u011c\u0109\3\2\2\2\u011c\u010f\3\2\2\2\u011d!\3\2\2\2"+ - "\u011e\u0149\7\63\2\2\u011f\u0120\7\66\2\2\u0120\u0121\7\b\2\2\u0121\u0122"+ - "\7a\2\2\u0122\u0149\7\t\2\2\u0123\u0127\7;\2\2\u0124\u0125\7\b\2\2\u0125"+ - "\u0126\7j\2\2\u0126\u0128\7\t\2\2\u0127\u0124\3\2\2\2\u0127\u0128\3\2"+ - "\2\2\u0128\u0149\3\2\2\2\u0129\u0149\7=\2\2\u012a\u0149\7>\2\2\u012b\u012c"+ - "\7<\2\2\u012c\u012d\7\b\2\2\u012d\u012e\7a\2\2\u012e\u0149\7\t\2\2\u012f"+ - "\u0149\78\2\2\u0130\u0149\79\2\2\u0131\u0149\7?\2\2\u0132\u0149\7@\2\2"+ - "\u0133\u0149\7\64\2\2\u0134\u0149\7\65\2\2\u0135\u0149\7\67\2\2\u0136"+ - "\u013a\7:\2\2\u0137\u0138\7\b\2\2\u0138\u0139\7j\2\2\u0139\u013b\7\t\2"+ - "\2\u013a\u0137\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u0149\3\2\2\2\u013c\u013d"+ - "\7+\2\2\u013d\u013e\7\b\2\2\u013e\u0143\7a\2\2\u013f\u0140\7\f\2\2\u0140"+ - "\u0142\7a\2\2\u0141\u013f\3\2\2\2\u0142\u0145\3\2\2\2\u0143\u0141\3\2"+ - "\2\2\u0143\u0144\3\2\2\2\u0144\u0146\3\2\2\2\u0145\u0143\3\2\2\2\u0146"+ - "\u0149\7\t\2\2\u0147\u0149\7B\2\2\u0148\u011e\3\2\2\2\u0148\u011f\3\2"+ - "\2\2\u0148\u0123\3\2\2\2\u0148\u0129\3\2\2\2\u0148\u012a\3\2\2\2\u0148"+ - "\u012b\3\2\2\2\u0148\u012f\3\2\2\2\u0148\u0130\3\2\2\2\u0148\u0131\3\2"+ - "\2\2\u0148\u0132\3\2\2\2\u0148\u0133\3\2\2\2\u0148\u0134\3\2\2\2\u0148"+ - "\u0135\3\2\2\2\u0148\u0136\3\2\2\2\u0148\u013c\3\2\2\2\u0148\u0147\3\2"+ - "\2\2\u0149#\3\2\2\2\u014a\u014c\5&\24\2\u014b\u014a\3\2\2\2\u014c\u014d"+ - "\3\2\2\2\u014d\u014b\3\2\2\2\u014d\u014e\3\2\2\2\u014e%\3\2\2\2\u014f"+ - "\u0150\5\22\n\2\u0150\u0151\7\n\2\2\u0151\u01a4\3\2\2\2\u0152\u0154\7"+ - "\4\2\2\u0153\u0155\5$\23\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2\u0155"+ - "\u0156\3\2\2\2\u0156\u01a4\7\5\2\2\u0157\u0158\5@!\2\u0158\u0159\7\n\2"+ - "\2\u0159\u01a4\3\2\2\2\u015a\u015b\7D\2\2\u015b\u015c\7\b\2\2\u015c\u015d"+ - "\5@!\2\u015d\u015e\7\t\2\2\u015e\u0161\5&\24\2\u015f\u0160\7E\2\2\u0160"+ - "\u0162\5&\24\2\u0161\u015f\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u01a4\3\2"+ - "\2\2\u0163\u0165\5\"\22\2\u0164\u0163\3\2\2\2\u0165\u0168\3\2\2\2\u0166"+ - "\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u0169\3\2\2\2\u0168\u0166\3\2"+ - "\2\2\u0169\u016a\7F\2\2\u016a\u016b\7\b\2\2\u016b\u016c\5@!\2\u016c\u016d"+ - "\7\t\2\2\u016d\u016e\5&\24\2\u016e\u01a4\3\2\2\2\u016f\u0171\5\"\22\2"+ - "\u0170\u016f\3\2\2\2\u0171\u0174\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173"+ - "\3\2\2\2\u0173\u0175\3\2\2\2\u0174\u0172\3\2\2\2\u0175\u0176\7G\2\2\u0176"+ - "\u0177\5&\24\2\u0177\u0178\7F\2\2\u0178\u0179\7\b\2\2\u0179\u017a\5@!"+ - "\2\u017a\u017b\7\t\2\2\u017b\u017c\7\n\2\2\u017c\u01a4\3\2\2\2\u017d\u017f"+ - "\5\"\22\2\u017e\u017d\3\2\2\2\u017f\u0182\3\2\2\2\u0180\u017e\3\2\2\2"+ - "\u0180\u0181\3\2\2\2\u0181\u0183\3\2\2\2\u0182\u0180\3\2\2\2\u0183\u0184"+ - "\7H\2\2\u0184\u0185\7\b\2\2\u0185\u0186\5,\27\2\u0186\u0187\7\t\2\2\u0187"+ - "\u0188\5&\24\2\u0188\u01a4\3\2\2\2\u0189\u018a\7I\2\2\u018a\u018b\7\b"+ - "\2\2\u018b\u018c\5@!\2\u018c\u018d\7\t\2\2\u018d\u018e\7\4\2\2\u018e\u018f"+ - "\5(\25\2\u018f\u0190\7\5\2\2\u0190\u01a4\3\2\2\2\u0191\u0193\7J\2\2\u0192"+ - "\u0194\5@!\2\u0193\u0192\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0195\3\2\2"+ - "\2\u0195\u01a4\7\n\2\2\u0196\u0197\7K\2\2\u0197\u01a4\7\n\2\2\u0198\u0199"+ - "\7L\2\2\u0199\u01a4\7\n\2\2\u019a\u019c\7M\2\2\u019b\u019d\5H%\2\u019c"+ - "\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u019e\3\2\2\2\u019e\u019f\7\4"+ - "\2\2\u019f\u01a0\5L\'\2\u01a0\u01a1\7\u0081\2\2\u01a1\u01a4\3\2\2\2\u01a2"+ - "\u01a4\5F$\2\u01a3\u014f\3\2\2\2\u01a3\u0152\3\2\2\2\u01a3\u0157\3\2\2"+ - "\2\u01a3\u015a\3\2\2\2\u01a3\u0166\3\2\2\2\u01a3\u0172\3\2\2\2\u01a3\u0180"+ - "\3\2\2\2\u01a3\u0189\3\2\2\2\u01a3\u0191\3\2\2\2\u01a3\u0196\3\2\2\2\u01a3"+ - "\u0198\3\2\2\2\u01a3\u019a\3\2\2\2\u01a3\u01a2\3\2\2\2\u01a4\'\3\2\2\2"+ - "\u01a5\u01a7\5*\26\2\u01a6\u01a5\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a6"+ - "\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01af\3\2\2\2\u01aa\u01ab\7N\2\2\u01ab"+ - "\u01ad\7\13\2\2\u01ac\u01ae\5$\23\2\u01ad\u01ac\3\2\2\2\u01ad\u01ae\3"+ - "\2\2\2\u01ae\u01b0\3\2\2\2\u01af\u01aa\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0"+ - ")\3\2\2\2\u01b1\u01b2\7O\2\2\u01b2\u01b3\5B\"\2\u01b3\u01b5\7\13\2\2\u01b4"+ - "\u01b6\5$\23\2\u01b5\u01b4\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6+\3\2\2\2"+ - "\u01b7\u01b8\5.\30\2\u01b8\u01b9\7\n\2\2\u01b9\u01ba\5@!\2\u01ba\u01bc"+ - "\7\n\2\2\u01bb\u01bd\5@!\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd"+ - "\u01c8\3\2\2\2\u01be\u01c0\5\20\t\2\u01bf\u01be\3\2\2\2\u01bf\u01c0\3"+ - "\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2\7j\2\2\u01c2\u01c3\7\13\2\2\u01c3"+ - "\u01c4\5B\"\2\u01c4\u01c5\7\r\2\2\u01c5\u01c6\5B\"\2\u01c6\u01c8\3\2\2"+ - "\2\u01c7\u01b7\3\2\2\2\u01c7\u01bf\3\2\2\2\u01c8-\3\2\2\2\u01c9\u01cb"+ - "\5\22\n\2\u01ca\u01c9\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01ce\3\2\2\2"+ - "\u01cc\u01ce\5@!\2\u01cd\u01ca\3\2\2\2\u01cd\u01cc\3\2\2\2\u01ce/\3\2"+ - "\2\2\u01cf\u01d0\b\31\1\2\u01d0\u01d1\7\b\2\2\u01d1\u01d2\5\60\31\2\u01d2"+ - "\u01d3\7\t\2\2\u01d3\u01df\3\2\2\2\u01d4\u01df\7\\\2\2\u01d5\u01d7\7["+ - "\2\2\u01d6\u01d8\7\\\2\2\u01d7\u01d6\3\2\2\2\u01d7\u01d8\3\2\2\2\u01d8"+ - "\u01df\3\2\2\2\u01d9\u01df\5\64\33\2\u01da\u01df\5\62\32\2\u01db\u01df"+ - "\5:\36\2\u01dc\u01df\58\35\2\u01dd\u01df\7\3\2\2\u01de\u01cf\3\2\2\2\u01de"+ - "\u01d4\3\2\2\2\u01de\u01d5\3\2\2\2\u01de\u01d9\3\2\2\2\u01de\u01da\3\2"+ - "\2\2\u01de\u01db\3\2\2\2\u01de\u01dc\3\2\2\2\u01de\u01dd\3\2\2\2\u01df"+ - "\u01ed\3\2\2\2\u01e0\u01e1\f\n\2\2\u01e1\u01ec\7\23\2\2\u01e2\u01e3\f"+ - "\t\2\2\u01e3\u01e5\7\6\2\2\u01e4\u01e6\5B\"\2\u01e5\u01e4\3\2\2\2\u01e5"+ - "\u01e6\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01ec\7\7\2\2\u01e8\u01e9\f\b"+ - "\2\2\u01e9\u01ea\7\b\2\2\u01ea\u01ec\7\t\2\2\u01eb\u01e0\3\2\2\2\u01eb"+ - "\u01e2\3\2\2\2\u01eb\u01e8\3\2\2\2\u01ec\u01ef\3\2\2\2\u01ed\u01eb\3\2"+ - "\2\2\u01ed\u01ee\3\2\2\2\u01ee\61\3\2\2\2\u01ef\u01ed\3\2\2\2\u01f0\u01f1"+ - "\7P\2\2\u01f1\u01f2\7j\2\2\u01f2\63\3\2\2\2\u01f3\u01f5\7P\2\2\u01f4\u01f6"+ - "\7j\2\2\u01f5\u01f4\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7"+ - "\u01f9\7\4\2\2\u01f8\u01fa\5\66\34\2\u01f9\u01f8\3\2\2\2\u01fa\u01fb\3"+ - "\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd"+ - "\u01fe\7\5\2\2\u01fe\65\3\2\2\2\u01ff\u0200\5\22\n\2\u0200\u0201\7\n\2"+ - "\2\u0201\67\3\2\2\2\u0202\u0203\7Q\2\2\u0203\u0204\7j\2\2\u02049\3\2\2"+ - "\2\u0205\u0207\7Q\2\2\u0206\u0208\7j\2\2\u0207\u0206\3\2\2\2\u0207\u0208"+ - "\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020a\7\4\2\2\u020a\u020b\5<\37\2\u020b"+ - "\u020c\7\5\2\2\u020c;\3\2\2\2\u020d\u020e\b\37\1\2\u020e\u020f\5> \2\u020f"+ - "\u0215\3\2\2\2\u0210\u0211\f\3\2\2\u0211\u0212\7\f\2\2\u0212\u0214\5>"+ - " \2\u0213\u0210\3\2\2\2\u0214\u0217\3\2\2\2\u0215\u0213\3\2\2\2\u0215"+ - "\u0216\3\2\2\2\u0216=\3\2\2\2\u0217\u0215\3\2\2\2\u0218\u021b\7j\2\2\u0219"+ - "\u021a\7&\2\2\u021a\u021c\5B\"\2\u021b\u0219\3\2\2\2\u021b\u021c\3\2\2"+ - "\2\u021c?\3\2\2\2\u021d\u021e\b!\1\2\u021e\u021f\5B\"\2\u021f\u0225\3"+ - "\2\2\2\u0220\u0221\f\3\2\2\u0221\u0222\7\f\2\2\u0222\u0224\5B\"\2\u0223"+ - "\u0220\3\2\2\2\u0224\u0227\3\2\2\2\u0225\u0223\3\2\2\2\u0225\u0226\3\2"+ - "\2\2\u0226A\3\2\2\2\u0227\u0225\3\2\2\2\u0228\u0229\b\"\1\2\u0229\u022a"+ - "\7\b\2\2\u022a\u022b\5@!\2\u022b\u022c\7\t\2\2\u022c\u025f\3\2\2\2\u022d"+ - "\u022e\7R\2\2\u022e\u0231\7\b\2\2\u022f\u0232\5B\"\2\u0230\u0232\5\60"+ - "\31\2\u0231\u022f\3\2\2\2\u0231\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233"+ - "\u0234\7\t\2\2\u0234\u025f\3\2\2\2\u0235\u0236\7S\2\2\u0236\u0239\7\b"+ - "\2\2\u0237\u023a\5B\"\2\u0238\u023a\5\60\31\2\u0239\u0237\3\2\2\2\u0239"+ - "\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u023c\7\t\2\2\u023c\u025f\3\2"+ - "\2\2\u023d\u023e\7\b\2\2\u023e\u023f\5\60\31\2\u023f\u0240\7\t\2\2\u0240"+ - "\u0241\5B\"\32\u0241\u025f\3\2\2\2\u0242\u0243\t\2\2\2\u0243\u025f\5B"+ - "\"\31\u0244\u0245\7\23\2\2\u0245\u025f\5B\"\27\u0246\u0247\t\3\2\2\u0247"+ - "\u025f\5B\"\26\u0248\u0249\t\4\2\2\u0249\u025f\5B\"\22\u024a\u024b\7\4"+ - "\2\2\u024b\u0250\5B\"\2\u024c\u024d\7\f\2\2\u024d\u024f\5B\"\2\u024e\u024c"+ - "\3\2\2\2\u024f\u0252\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u0251\3\2\2\2\u0251"+ - "\u0253\3\2\2\2\u0252\u0250\3\2\2\2\u0253\u0254\7\5\2\2\u0254\u025f\3\2"+ - "\2\2\u0255\u025f\7j\2\2\u0256\u025f\7a\2\2\u0257\u0259\7_\2\2\u0258\u0257"+ - "\3\2\2\2\u0259\u025a\3\2\2\2\u025a\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025b"+ - "\u025f\3\2\2\2\u025c\u025f\7`\2\2\u025d\u025f\7]\2\2\u025e\u0228\3\2\2"+ - "\2\u025e\u022d\3\2\2\2\u025e\u0235\3\2\2\2\u025e\u023d\3\2\2\2\u025e\u0242"+ - "\3\2\2\2\u025e\u0244\3\2\2\2\u025e\u0246\3\2\2\2\u025e\u0248\3\2\2\2\u025e"+ - "\u024a\3\2\2\2\u025e\u0255\3\2\2\2\u025e\u0256\3\2\2\2\u025e\u0258\3\2"+ - "\2\2\u025e\u025c\3\2\2\2\u025e\u025d\3\2\2\2\u025f\u029c\3\2\2\2\u0260"+ - "\u0261\f\25\2\2\u0261\u0262\t\5\2\2\u0262\u029b\5B\"\26\u0263\u0264\f"+ - "\24\2\2\u0264\u0265\t\6\2\2\u0265\u029b\5B\"\25\u0266\u0267\f\23\2\2\u0267"+ - "\u0268\t\7\2\2\u0268\u029b\5B\"\24\u0269\u026a\f\21\2\2\u026a\u026b\t"+ - "\b\2\2\u026b\u029b\5B\"\22\u026c\u026d\f\20\2\2\u026d\u026e\7\30\2\2\u026e"+ - "\u029b\5B\"\21\u026f\u0270\f\17\2\2\u0270\u0271\7\32\2\2\u0271\u029b\5"+ - "B\"\20\u0272\u0273\f\16\2\2\u0273\u0274\7\33\2\2\u0274\u029b\5B\"\17\u0275"+ - "\u0276\f\r\2\2\u0276\u0277\7$\2\2\u0277\u029b\5B\"\16\u0278\u0279\f\f"+ - "\2\2\u0279\u027a\7%\2\2\u027a\u029b\5B\"\r\u027b\u027c\f\13\2\2\u027c"+ - "\u027d\7\16\2\2\u027d\u027e\5B\"\2\u027e\u027f\7\13\2\2\u027f\u0280\5"+ - "B\"\f\u0280\u029b\3\2\2\2\u0281\u0282\f\n\2\2\u0282\u0283\7&\2\2\u0283"+ - "\u029b\5B\"\n\u0284\u0285\f\t\2\2\u0285\u0286\7\'\2\2\u0286\u029b\5B\""+ - "\t\u0287\u0288\f \2\2\u0288\u0289\7\17\2\2\u0289\u029b\7j\2\2\u028a\u028b"+ - "\f\37\2\2\u028b\u028c\7\20\2\2\u028c\u029b\7j\2\2\u028d\u028e\f\36\2\2"+ - "\u028e\u0290\7\b\2\2\u028f\u0291\5D#\2\u0290\u028f\3\2\2\2\u0290\u0291"+ - "\3\2\2\2\u0291\u0292\3\2\2\2\u0292\u029b\7\t\2\2\u0293\u0294\f\33\2\2"+ - "\u0294\u0295\7\6\2\2\u0295\u0296\5@!\2\u0296\u0297\7\7\2\2\u0297\u029b"+ - "\3\2\2\2\u0298\u0299\f\30\2\2\u0299\u029b\t\2\2\2\u029a\u0260\3\2\2\2"+ - "\u029a\u0263\3\2\2\2\u029a\u0266\3\2\2\2\u029a\u0269\3\2\2\2\u029a\u026c"+ - "\3\2\2\2\u029a\u026f\3\2\2\2\u029a\u0272\3\2\2\2\u029a\u0275\3\2\2\2\u029a"+ - "\u0278\3\2\2\2\u029a\u027b\3\2\2\2\u029a\u0281\3\2\2\2\u029a\u0284\3\2"+ - "\2\2\u029a\u0287\3\2\2\2\u029a\u028a\3\2\2\2\u029a\u028d\3\2\2\2\u029a"+ - "\u0293\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u029e\3\2\2\2\u029c\u029a\3\2"+ - "\2\2\u029c\u029d\3\2\2\2\u029dC\3\2\2\2\u029e\u029c\3\2\2\2\u029f\u02a4"+ - "\5B\"\2\u02a0\u02a1\7\f\2\2\u02a1\u02a3\5B\"\2\u02a2\u02a0\3\2\2\2\u02a3"+ - "\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5E\3\2\2\2"+ - "\u02a6\u02a4\3\2\2\2\u02a7\u02a9\7T\2\2\u02a8\u02aa\5H%\2\u02a9\u02a8"+ - "\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab\u02ac\7^\2\2\u02ac"+ - "G\3\2\2\2\u02ad\u02ae\7\b\2\2\u02ae\u02b3\5J&\2\u02af\u02b0\7\f\2\2\u02b0"+ - "\u02b2\5J&\2\u02b1\u02af\3\2\2\2\u02b2\u02b5\3\2\2\2\u02b3\u02b1\3\2\2"+ - "\2\u02b3\u02b4\3\2\2\2\u02b4\u02b6\3\2\2\2\u02b5\u02b3\3\2\2\2\u02b6\u02b7"+ - "\7\t\2\2\u02b7I\3\2\2\2\u02b8\u02b9\7U\2\2\u02b9\u02c8\7_\2\2\u02ba\u02bb"+ - "\7V\2\2\u02bb\u02c8\7j\2\2\u02bc\u02bd\7W\2\2\u02bd\u02c8\7_\2\2\u02be"+ - "\u02bf\7X\2\2\u02bf\u02c8\5B\"\2\u02c0\u02c1\7Y\2\2\u02c1\u02c8\5B\"\2"+ - "\u02c2\u02c5\7,\2\2\u02c3\u02c6\7\67\2\2\u02c4\u02c6\5B\"\2\u02c5\u02c3"+ - "\3\2\2\2\u02c5\u02c4\3\2\2\2\u02c6\u02c8\3\2\2\2\u02c7\u02b8\3\2\2\2\u02c7"+ - "\u02ba\3\2\2\2\u02c7\u02bc\3\2\2\2\u02c7\u02be\3\2\2\2\u02c7\u02c0\3\2"+ - "\2\2\u02c7\u02c2\3\2\2\2\u02c8K\3\2\2\2\u02c9\u02cb\5N(\2\u02ca\u02c9"+ - "\3\2\2\2\u02cb\u02ce\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cc\u02cd\3\2\2\2\u02cd"+ - "M\3\2\2\2\u02ce\u02cc\3\2\2\2\u02cf\u02d3\5P)\2\u02d0\u02d3\5R*\2\u02d1"+ - "\u02d3\5T+\2\u02d2\u02cf\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d1\3\2\2"+ - "\2\u02d3O\3\2\2\2\u02d4\u02d5\7\u008e\2\2\u02d5\u02d9\7q\2\2\u02d6\u02d7"+ - "\7\u008d\2\2\u02d7\u02d9\7q\2\2\u02d8\u02d4\3\2\2\2\u02d8\u02d6\3\2\2"+ - "\2\u02d9Q\3\2\2\2\u02da\u02dc\7o\2\2\u02db\u02dd\5V,\2\u02dc\u02db\3\2"+ - "\2\2\u02dc\u02dd\3\2\2\2\u02ddS\3\2\2\2\u02de\u02df\7n\2\2\u02df\u02e4"+ - "\5X-\2\u02e0\u02e1\7r\2\2\u02e1\u02e3\5X-\2\u02e2\u02e0\3\2\2\2\u02e3"+ - "\u02e6\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2\2\2\u02e5U\3\2\2\2"+ - "\u02e6\u02e4\3\2\2\2\u02e7\u02ff\5X-\2\u02e8\u02e9\7p\2\2\u02e9\u02ff"+ - "\5X-\2\u02ea\u02eb\5X-\2\u02eb\u02ec\7r\2\2\u02ec\u02ed\7\u008e\2\2\u02ed"+ - "\u02ff\3\2\2\2\u02ee\u02ef\7s\2\2\u02ef\u02f0\5X-\2\u02f0\u02f1\7t\2\2"+ - "\u02f1\u02f2\7r\2\2\u02f2\u02f3\7\u008e\2\2\u02f3\u02ff\3\2\2\2\u02f4"+ - "\u02f5\7s\2\2\u02f5\u02f6\5X-\2\u02f6\u02f7\7r\2\2\u02f7\u02f8\7\u008e"+ - "\2\2\u02f8\u02f9\7t\2\2\u02f9\u02ff\3\2\2\2\u02fa\u02fb\7s\2\2\u02fb\u02fc"+ - "\5X-\2\u02fc\u02fd\7t\2\2\u02fd\u02ff\3\2\2\2\u02fe\u02e7\3\2\2\2\u02fe"+ - "\u02e8\3\2\2\2\u02fe\u02ea\3\2\2\2\u02fe\u02ee\3\2\2\2\u02fe\u02f4\3\2"+ - "\2\2\u02fe\u02fa\3\2\2\2\u02ffW\3\2\2\2\u0300\u0301\b-\1\2\u0301\u0302"+ - "\7u\2\2\u0302\u0303\5X-\2\u0303\u0304\7v\2\2\u0304\u030f\3\2\2\2\u0305"+ - "\u0306\t\t\2\2\u0306\u030f\5X-\n\u0307\u030f\7\u008e\2\2\u0308\u030f\7"+ - "\u008c\2\2\u0309\u030a\7\u0080\2\2\u030a\u030b\7\u008e\2\2\u030b\u030f"+ - "\7\u0081\2\2\u030c\u030f\7\u0082\2\2\u030d\u030f\7\u008b\2\2\u030e\u0300"+ - "\3\2\2\2\u030e\u0305\3\2\2\2\u030e\u0307\3\2\2\2\u030e\u0308\3\2\2\2\u030e"+ - "\u0309\3\2\2\2\u030e\u030c\3\2\2\2\u030e\u030d\3\2\2\2\u030f\u031e\3\2"+ - "\2\2\u0310\u0311\f\f\2\2\u0311\u0312\7w\2\2\u0312\u031d\5X-\r\u0313\u0314"+ - "\f\13\2\2\u0314\u0315\t\n\2\2\u0315\u031d\5X-\f\u0316\u0317\f\t\2\2\u0317"+ - "\u0318\t\13\2\2\u0318\u031d\5X-\n\u0319\u031a\f\b\2\2\u031a\u031b\t\f"+ - "\2\2\u031b\u031d\5X-\t\u031c\u0310\3\2\2\2\u031c\u0313\3\2\2\2\u031c\u0316"+ - "\3\2\2\2\u031c\u0319\3\2\2\2\u031d\u0320\3\2\2\2\u031e\u031c\3\2\2\2\u031e"+ - "\u031f\3\2\2\2\u031fY\3\2\2\2\u0320\u031e\3\2\2\2Jch|\u0086\u008d\u009b"+ - "\u00a1\u00a7\u00af\u00b4\u00bb\u00c0\u00c9\u00d0\u00db\u0118\u011c\u0127"+ - "\u013a\u0143\u0148\u014d\u0154\u0161\u0166\u0172\u0180\u0193\u019c\u01a3"+ - "\u01a8\u01ad\u01af\u01b5\u01bc\u01bf\u01c7\u01ca\u01cd\u01d7\u01de\u01e5"+ - "\u01eb\u01ed\u01f5\u01fb\u0207\u0215\u021b\u0225\u0231\u0239\u0250\u025a"+ - "\u025e\u0290\u029a\u029c\u02a4\u02a9\u02b3\u02c5\u02c7\u02cc\u02d2\u02d8"+ - "\u02dc\u02e4\u02fe\u030e\u031c\u031e"; + "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\22\7\22\u0140\n\22\f\22\16\22\u0143\13\22\3\22\5\22\u0146\n\22\3\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0151\n\23\3\23\3\23\3\23"+ + "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+ + "\5\23\u0164\n\23\3\23\3\23\3\23\3\23\3\23\7\23\u016b\n\23\f\23\16\23\u016e"+ + "\13\23\3\23\3\23\5\23\u0172\n\23\3\24\6\24\u0175\n\24\r\24\16\24\u0176"+ + "\3\25\3\25\3\25\3\25\3\25\5\25\u017e\n\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\5\25\u018b\n\25\3\25\7\25\u018e\n\25\f\25\16"+ + "\25\u0191\13\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u019a\n\25\f\25"+ + "\16\25\u019d\13\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u01a8"+ + "\n\25\f\25\16\25\u01ab\13\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3"+ + "\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u01bd\n\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\5\25\u01c6\n\25\3\25\3\25\3\25\3\25\3\25\5\25\u01cd"+ + "\n\25\3\26\6\26\u01d0\n\26\r\26\16\26\u01d1\3\26\3\26\3\26\5\26\u01d7"+ + "\n\26\5\26\u01d9\n\26\3\27\3\27\3\27\3\27\5\27\u01df\n\27\3\30\3\30\3"+ + "\30\3\30\3\30\5\30\u01e6\n\30\3\30\3\30\7\30\u01ea\n\30\f\30\16\30\u01ed"+ + "\13\30\5\30\u01ef\n\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01f7\n\30\3"+ + "\31\5\31\u01fa\n\31\3\31\5\31\u01fd\n\31\3\32\3\32\3\32\3\32\3\32\3\32"+ + "\3\32\3\32\5\32\u0207\n\32\3\32\3\32\3\32\3\32\3\32\5\32\u020e\n\32\3"+ + "\32\3\32\3\32\5\32\u0213\n\32\3\32\3\32\3\32\3\32\7\32\u0219\n\32\f\32"+ + "\16\32\u021c\13\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u0226"+ + "\n\33\3\33\7\33\u0229\n\33\f\33\16\33\u022c\13\33\3\34\3\34\3\34\3\35"+ + "\3\35\5\35\u0233\n\35\3\35\3\35\6\35\u0237\n\35\r\35\16\35\u0238\3\35"+ + "\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3 \3 \5 \u0245\n \3 \3 \3 \3 \3!\3"+ + "!\3!\3!\3!\3!\7!\u0251\n!\f!\16!\u0254\13!\3\"\3\"\3\"\5\"\u0259\n\"\3"+ + "#\3#\3#\3#\3#\3#\7#\u0261\n#\f#\16#\u0264\13#\3$\3$\3$\3$\3$\3$\3$\3$"+ + "\3$\5$\u026f\n$\3$\3$\3$\3$\3$\3$\5$\u0277\n$\3$\3$\3$\3$\3$\3$\3$\3$"+ + "\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\7$\u028c\n$\f$\16$\u028f\13$\3$\3$\3"+ + "$\3$\3$\6$\u0296\n$\r$\16$\u0297\3$\3$\5$\u029c\n$\3$\3$\3$\3$\3$\3$\3"+ + "$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3"+ + "$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\3$\5$\u02ce\n$\3"+ + "$\3$\3$\3$\3$\3$\3$\3$\7$\u02d8\n$\f$\16$\u02db\13$\3%\3%\3%\7%\u02e0"+ + "\n%\f%\16%\u02e3\13%\3&\3&\5&\u02e7\n&\3&\3&\3\'\3\'\3\'\3\'\7\'\u02ef"+ + "\n\'\f\'\16\'\u02f2\13\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3"+ + "(\5(\u0303\n(\5(\u0305\n(\3)\7)\u0308\n)\f)\16)\u030b\13)\3*\3*\3*\5*"+ + "\u0310\n*\3+\3+\3+\3+\5+\u0316\n+\3,\3,\5,\u031a\n,\3-\3-\3-\3-\7-\u0320"+ + "\n-\f-\16-\u0323\13-\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3.\3"+ + ".\3.\3.\3.\3.\3.\3.\5.\u033c\n.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3"+ + "/\3/\5/\u034c\n/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\7/\u035a\n/\f/\16"+ + "/\u035d\13/\3/\2\n\22\32\62\64@DF\\\60\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\31ZZ\4\2 ##\3\2\34\35\3\2\23\25\3\2\21\22\3\2\36#\3\2z}\3\2xy\3\2"+ + "~\177\3\2z{\2\u03d9\2^\3\2\2\2\4a\3\2\2\2\6g\3\2\2\2\bl\3\2\2\2\nn\3\2"+ + "\2\2\f\u0080\3\2\2\2\16\u0085\3\2\2\2\20\u008f\3\2\2\2\22\u0092\3\2\2"+ + "\2\24\u00a9\3\2\2\2\26\u00b0\3\2\2\2\30\u00c4\3\2\2\2\32\u00c6\3\2\2\2"+ + "\34\u00d4\3\2\2\2\36\u00e7\3\2\2\2 \u00f9\3\2\2\2\"\u0145\3\2\2\2$\u0171"+ + "\3\2\2\2&\u0174\3\2\2\2(\u01cc\3\2\2\2*\u01cf\3\2\2\2,\u01da\3\2\2\2."+ + "\u01f6\3\2\2\2\60\u01fc\3\2\2\2\62\u020d\3\2\2\2\64\u021d\3\2\2\2\66\u022d"+ + "\3\2\2\28\u0230\3\2\2\2:\u023c\3\2\2\2<\u023f\3\2\2\2>\u0242\3\2\2\2@"+ + "\u024a\3\2\2\2B\u0255\3\2\2\2D\u025a\3\2\2\2F\u029b\3\2\2\2H\u02dc\3\2"+ + "\2\2J\u02e4\3\2\2\2L\u02ea\3\2\2\2N\u0304\3\2\2\2P\u0309\3\2\2\2R\u030f"+ + "\3\2\2\2T\u0315\3\2\2\2V\u0317\3\2\2\2X\u031b\3\2\2\2Z\u033b\3\2\2\2\\"+ + "\u034b\3\2\2\2^_\5\6\4\2_`\7\2\2\3`\3\3\2\2\2ab\5P)\2bc\7\2\2\3c\5\3\2"+ + "\2\2df\5\b\5\2ed\3\2\2\2fi\3\2\2\2ge\3\2\2\2gh\3\2\2\2h\7\3\2\2\2ig\3"+ + "\2\2\2jm\5\f\7\2km\5\n\6\2lj\3\2\2\2lk\3\2\2\2m\t\3\2\2\2no\7(\2\2op\7"+ + "_\2\2p\13\3\2\2\2qr\5\20\t\2rs\7\n\2\2s\u0081\3\2\2\2tu\58\35\2uv\7\n"+ + "\2\2v\u0081\3\2\2\2wx\5> \2xy\7\n\2\2y\u0081\3\2\2\2z\u0081\5\34\17\2"+ + "{\u0081\5J&\2|\u0081\5\"\22\2}~\5\26\f\2~\177\7\n\2\2\177\u0081\3\2\2"+ + "\2\u0080q\3\2\2\2\u0080t\3\2\2\2\u0080w\3\2\2\2\u0080z\3\2\2\2\u0080{"+ + "\3\2\2\2\u0080|\3\2\2\2\u0080}\3\2\2\2\u0081\r\3\2\2\2\u0082\u0084\5$"+ + "\23\2\u0083\u0082\3\2\2\2\u0084\u0087\3\2\2\2\u0085\u0083\3\2\2\2\u0085"+ + "\u0086\3\2\2\2\u0086\u0088\3\2\2\2\u0087\u0085\3\2\2\2\u0088\u008c\5\62"+ + "\32\2\u0089\u008b\5$\23\2\u008a\u0089\3\2\2\2\u008b\u008e\3\2\2\2\u008c"+ + "\u008a\3\2\2\2\u008c\u008d\3\2\2\2\u008d\17\3\2\2\2\u008e\u008c\3\2\2"+ + "\2\u008f\u0090\5\16\b\2\u0090\u0091\5\22\n\2\u0091\21\3\2\2\2\u0092\u0096"+ + "\b\n\1\2\u0093\u0095\5\24\13\2\u0094\u0093\3\2\2\2\u0095\u0098\3\2\2\2"+ + "\u0096\u0094\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u0099\3\2\2\2\u0098\u0096"+ + "\3\2\2\2\u0099\u009a\5\30\r\2\u009a\u00a6\3\2\2\2\u009b\u009c\f\3\2\2"+ + "\u009c\u00a0\7\f\2\2\u009d\u009f\5\24\13\2\u009e\u009d\3\2\2\2\u009f\u00a2"+ + "\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a3\3\2\2\2\u00a2"+ + "\u00a0\3\2\2\2\u00a3\u00a5\5\30\r\2\u00a4\u009b\3\2\2\2\u00a5\u00a8\3"+ + "\2\2\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\23\3\2\2\2\u00a8"+ + "\u00a6\3\2\2\2\u00a9\u00ad\7\23\2\2\u00aa\u00ac\5$\23\2\u00ab\u00aa\3"+ + "\2\2\2\u00ac\u00af\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae"+ + "\25\3\2\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b1\7)\2\2\u00b1\u00b5\5\16\b"+ + "\2\u00b2\u00b4\5\24\13\2\u00b3\u00b2\3\2\2\2\u00b4\u00b7\3\2\2\2\u00b5"+ + "\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b8\3\2\2\2\u00b7\u00b5\3\2"+ + "\2\2\u00b8\u00b9\7j\2\2\u00b9\u00ba\b\f\1\2\u00ba\27\3\2\2\2\u00bb\u00be"+ + "\5\32\16\2\u00bc\u00bd\7&\2\2\u00bd\u00bf\5F$\2\u00be\u00bc\3\2\2\2\u00be"+ + "\u00bf\3\2\2\2\u00bf\u00c5\3\2\2\2\u00c0\u00c1\5\32\16\2\u00c1\u00c2\7"+ + "&\2\2\u00c2\u00c3\5J&\2\u00c3\u00c5\3\2\2\2\u00c4\u00bb\3\2\2\2\u00c4"+ + "\u00c0\3\2\2\2\u00c5\31\3\2\2\2\u00c6\u00c7\b\16\1\2\u00c7\u00c8\7j\2"+ + "\2\u00c8\u00d1\3\2\2\2\u00c9\u00ca\f\3\2\2\u00ca\u00cc\7\6\2\2\u00cb\u00cd"+ + "\5F$\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce"+ + "\u00d0\7\7\2\2\u00cf\u00c9\3\2\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00cf\3\2"+ + "\2\2\u00d1\u00d2\3\2\2\2\u00d2\33\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d4\u00d8"+ + "\5\16\b\2\u00d5\u00d7\5\24\13\2\u00d6\u00d5\3\2\2\2\u00d7\u00da\3\2\2"+ + "\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00db\3\2\2\2\u00da\u00d8"+ + "\3\2\2\2\u00db\u00dc\7j\2\2\u00dc\u00de\7\b\2\2\u00dd\u00df\5\36\20\2"+ + "\u00de\u00dd\3\2\2\2\u00de\u00df\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u00e1"+ + "\7\t\2\2\u00e1\u00e3\7\4\2\2\u00e2\u00e4\5&\24\2\u00e3\u00e2\3\2\2\2\u00e3"+ + "\u00e4\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00e6\7\5\2\2\u00e6\35\3\2\2"+ + "\2\u00e7\u00ec\5 \21\2\u00e8\u00e9\7\f\2\2\u00e9\u00eb\5 \21\2\u00ea\u00e8"+ + "\3\2\2\2\u00eb\u00ee\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed"+ + "\37\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ef\u00f3\5\16\b\2\u00f0\u00f2\5\24"+ + "\13\2\u00f1\u00f0\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f3"+ + "\u00f4\3\2\2\2\u00f4\u00f6\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f6\u00f7\7j"+ + "\2\2\u00f7\u00fa\3\2\2\2\u00f8\u00fa\7\\\2\2\u00f9\u00ef\3\2\2\2\u00f9"+ + "\u00f8\3\2\2\2\u00fa!\3\2\2\2\u00fb\u00fc\7*\2\2\u00fc\u00fd\7+\2\2\u00fd"+ + "\u00fe\3\2\2\2\u00fe\u00ff\7\b\2\2\u00ff\u0104\7a\2\2\u0100\u0101\7\f"+ + "\2\2\u0101\u0103\7a\2\2\u0102\u0100\3\2\2\2\u0103\u0106\3\2\2\2\u0104"+ + "\u0102\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0107\3\2\2\2\u0106\u0104\3\2"+ + "\2\2\u0107\u0146\7\t\2\2\u0108\u0109\7*\2\2\u0109\u010a\7,\2\2\u010a\u010b"+ + "\3\2\2\2\u010b\u010c\7\b\2\2\u010c\u010d\7a\2\2\u010d\u0146\7\t\2\2\u010e"+ + "\u010f\7*\2\2\u010f\u0110\7-\2\2\u0110\u0111\3\2\2\2\u0111\u0112\7\b\2"+ + "\2\u0112\u0113\7j\2\2\u0113\u0146\7\t\2\2\u0114\u0115\7*\2\2\u0115\u0116"+ + "\7/\2\2\u0116\u0117\3\2\2\2\u0117\u0118\7\b\2\2\u0118\u0119\7j\2\2\u0119"+ + "\u0146\7\t\2\2\u011a\u011b\7*\2\2\u011b\u011c\7.\2\2\u011c\u011d\3\2\2"+ + "\2\u011d\u011e\7\b\2\2\u011e\u011f\7_\2\2\u011f\u0146\7\t\2\2\u0120\u0121"+ + "\7*\2\2\u0121\u0122\7\60\2\2\u0122\u0123\3\2\2\2\u0123\u0124\7\b\2\2\u0124"+ + "\u0125\7j\2\2\u0125\u0146\7\t\2\2\u0126\u0127\7*\2\2\u0127\u0128\7\61"+ + "\2\2\u0128\u0129\3\2\2\2\u0129\u012a\7\b\2\2\u012a\u012b\7j\2\2\u012b"+ + "\u0146\7\t\2\2\u012c\u012d\7*\2\2\u012d\u012e\7\62\2\2\u012e\u012f\3\2"+ + "\2\2\u012f\u0130\7\b\2\2\u0130\u0131\7j\2\2\u0131\u0146\7\t\2\2\u0132"+ + "\u0133\7*\2\2\u0133\u0134\7A\2\2\u0134\u0135\3\2\2\2\u0135\u0136\7\b\2"+ + "\2\u0136\u0137\7B\2\2\u0137\u0146\7\t\2\2\u0138\u0139\7*\2\2\u0139\u013a"+ + "\7C\2\2\u013a\u013b\3\2\2\2\u013b\u013c\7\b\2\2\u013c\u0141\7j\2\2\u013d"+ + "\u013e\7\f\2\2\u013e\u0140\7j\2\2\u013f\u013d\3\2\2\2\u0140\u0143\3\2"+ + "\2\2\u0141\u013f\3\2\2\2\u0141\u0142\3\2\2\2\u0142\u0144\3\2\2\2\u0143"+ + "\u0141\3\2\2\2\u0144\u0146\7\t\2\2\u0145\u00fb\3\2\2\2\u0145\u0108\3\2"+ + "\2\2\u0145\u010e\3\2\2\2\u0145\u0114\3\2\2\2\u0145\u011a\3\2\2\2\u0145"+ + "\u0120\3\2\2\2\u0145\u0126\3\2\2\2\u0145\u012c\3\2\2\2\u0145\u0132\3\2"+ + "\2\2\u0145\u0138\3\2\2\2\u0146#\3\2\2\2\u0147\u0172\7\63\2\2\u0148\u0149"+ + "\7\66\2\2\u0149\u014a\7\b\2\2\u014a\u014b\7a\2\2\u014b\u0172\7\t\2\2\u014c"+ + "\u0150\7;\2\2\u014d\u014e\7\b\2\2\u014e\u014f\7j\2\2\u014f\u0151\7\t\2"+ + "\2\u0150\u014d\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0172\3\2\2\2\u0152\u0172"+ + "\7=\2\2\u0153\u0172\7>\2\2\u0154\u0155\7<\2\2\u0155\u0156\7\b\2\2\u0156"+ + "\u0157\7a\2\2\u0157\u0172\7\t\2\2\u0158\u0172\78\2\2\u0159\u0172\79\2"+ + "\2\u015a\u0172\7?\2\2\u015b\u0172\7@\2\2\u015c\u0172\7\64\2\2\u015d\u0172"+ + "\7\65\2\2\u015e\u0172\7\67\2\2\u015f\u0163\7:\2\2\u0160\u0161\7\b\2\2"+ + "\u0161\u0162\7j\2\2\u0162\u0164\7\t\2\2\u0163\u0160\3\2\2\2\u0163\u0164"+ + "\3\2\2\2\u0164\u0172\3\2\2\2\u0165\u0166\7+\2\2\u0166\u0167\7\b\2\2\u0167"+ + "\u016c\7a\2\2\u0168\u0169\7\f\2\2\u0169\u016b\7a\2\2\u016a\u0168\3\2\2"+ + "\2\u016b\u016e\3\2\2\2\u016c\u016a\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016f"+ + "\3\2\2\2\u016e\u016c\3\2\2\2\u016f\u0172\7\t\2\2\u0170\u0172\7B\2\2\u0171"+ + "\u0147\3\2\2\2\u0171\u0148\3\2\2\2\u0171\u014c\3\2\2\2\u0171\u0152\3\2"+ + "\2\2\u0171\u0153\3\2\2\2\u0171\u0154\3\2\2\2\u0171\u0158\3\2\2\2\u0171"+ + "\u0159\3\2\2\2\u0171\u015a\3\2\2\2\u0171\u015b\3\2\2\2\u0171\u015c\3\2"+ + "\2\2\u0171\u015d\3\2\2\2\u0171\u015e\3\2\2\2\u0171\u015f\3\2\2\2\u0171"+ + "\u0165\3\2\2\2\u0171\u0170\3\2\2\2\u0172%\3\2\2\2\u0173\u0175\5(\25\2"+ + "\u0174\u0173\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0174\3\2\2\2\u0176\u0177"+ + "\3\2\2\2\u0177\'\3\2\2\2\u0178\u0179\5\20\t\2\u0179\u017a\7\n\2\2\u017a"+ + "\u01cd\3\2\2\2\u017b\u017d\7\4\2\2\u017c\u017e\5&\24\2\u017d\u017c\3\2"+ + "\2\2\u017d\u017e\3\2\2\2\u017e\u017f\3\2\2\2\u017f\u01cd\7\5\2\2\u0180"+ + "\u0181\5D#\2\u0181\u0182\7\n\2\2\u0182\u01cd\3\2\2\2\u0183\u0184\7D\2"+ + "\2\u0184\u0185\7\b\2\2\u0185\u0186\5D#\2\u0186\u0187\7\t\2\2\u0187\u018a"+ + "\5(\25\2\u0188\u0189\7E\2\2\u0189\u018b\5(\25\2\u018a\u0188\3\2\2\2\u018a"+ + "\u018b\3\2\2\2\u018b\u01cd\3\2\2\2\u018c\u018e\5$\23\2\u018d\u018c\3\2"+ + "\2\2\u018e\u0191\3\2\2\2\u018f\u018d\3\2\2\2\u018f\u0190\3\2\2\2\u0190"+ + "\u0192\3\2\2\2\u0191\u018f\3\2\2\2\u0192\u0193\7F\2\2\u0193\u0194\7\b"+ + "\2\2\u0194\u0195\5D#\2\u0195\u0196\7\t\2\2\u0196\u0197\5(\25\2\u0197\u01cd"+ + "\3\2\2\2\u0198\u019a\5$\23\2\u0199\u0198\3\2\2\2\u019a\u019d\3\2\2\2\u019b"+ + "\u0199\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2\u019d\u019b\3\2"+ + "\2\2\u019e\u019f\7G\2\2\u019f\u01a0\5(\25\2\u01a0\u01a1\7F\2\2\u01a1\u01a2"+ + "\7\b\2\2\u01a2\u01a3\5D#\2\u01a3\u01a4\7\t\2\2\u01a4\u01a5\7\n\2\2\u01a5"+ + "\u01cd\3\2\2\2\u01a6\u01a8\5$\23\2\u01a7\u01a6\3\2\2\2\u01a8\u01ab\3\2"+ + "\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ac\3\2\2\2\u01ab"+ + "\u01a9\3\2\2\2\u01ac\u01ad\7H\2\2\u01ad\u01ae\7\b\2\2\u01ae\u01af\5.\30"+ + "\2\u01af\u01b0\7\t\2\2\u01b0\u01b1\5(\25\2\u01b1\u01cd\3\2\2\2\u01b2\u01b3"+ + "\7I\2\2\u01b3\u01b4\7\b\2\2\u01b4\u01b5\5D#\2\u01b5\u01b6\7\t\2\2\u01b6"+ + "\u01b7\7\4\2\2\u01b7\u01b8\5*\26\2\u01b8\u01b9\7\5\2\2\u01b9\u01cd\3\2"+ + "\2\2\u01ba\u01bc\7J\2\2\u01bb\u01bd\5D#\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd"+ + "\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01cd\7\n\2\2\u01bf\u01c0\7K\2\2\u01c0"+ + "\u01cd\7\n\2\2\u01c1\u01c2\7L\2\2\u01c2\u01cd\7\n\2\2\u01c3\u01c5\7M\2"+ + "\2\u01c4\u01c6\5L\'\2\u01c5\u01c4\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c7"+ + "\3\2\2\2\u01c7\u01c8\7\4\2\2\u01c8\u01c9\5P)\2\u01c9\u01ca\7\u0081\2\2"+ + "\u01ca\u01cd\3\2\2\2\u01cb\u01cd\5J&\2\u01cc\u0178\3\2\2\2\u01cc\u017b"+ + "\3\2\2\2\u01cc\u0180\3\2\2\2\u01cc\u0183\3\2\2\2\u01cc\u018f\3\2\2\2\u01cc"+ + "\u019b\3\2\2\2\u01cc\u01a9\3\2\2\2\u01cc\u01b2\3\2\2\2\u01cc\u01ba\3\2"+ + "\2\2\u01cc\u01bf\3\2\2\2\u01cc\u01c1\3\2\2\2\u01cc\u01c3\3\2\2\2\u01cc"+ + "\u01cb\3\2\2\2\u01cd)\3\2\2\2\u01ce\u01d0\5,\27\2\u01cf\u01ce\3\2\2\2"+ + "\u01d0\u01d1\3\2\2\2\u01d1\u01cf\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d8"+ + "\3\2\2\2\u01d3\u01d4\7N\2\2\u01d4\u01d6\7\13\2\2\u01d5\u01d7\5&\24\2\u01d6"+ + "\u01d5\3\2\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3\2\2\2\u01d8\u01d3\3\2"+ + "\2\2\u01d8\u01d9\3\2\2\2\u01d9+\3\2\2\2\u01da\u01db\7O\2\2\u01db\u01dc"+ + "\5F$\2\u01dc\u01de\7\13\2\2\u01dd\u01df\5&\24\2\u01de\u01dd\3\2\2\2\u01de"+ + "\u01df\3\2\2\2\u01df-\3\2\2\2\u01e0\u01e1\5\60\31\2\u01e1\u01e2\7\n\2"+ + "\2\u01e2\u01e3\5D#\2\u01e3\u01e5\7\n\2\2\u01e4\u01e6\5D#\2\u01e5\u01e4"+ + "\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01f7\3\2\2\2\u01e7\u01eb\5\16\b\2"+ + "\u01e8\u01ea\5\24\13\2\u01e9\u01e8\3\2\2\2\u01ea\u01ed\3\2\2\2\u01eb\u01e9"+ + "\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ef\3\2\2\2\u01ed\u01eb\3\2\2\2\u01ee"+ + "\u01e7\3\2\2\2\u01ee\u01ef\3\2\2\2\u01ef\u01f0\3\2\2\2\u01f0\u01f1\7j"+ + "\2\2\u01f1\u01f2\7\13\2\2\u01f2\u01f3\5F$\2\u01f3\u01f4\7\r\2\2\u01f4"+ + "\u01f5\5F$\2\u01f5\u01f7\3\2\2\2\u01f6\u01e0\3\2\2\2\u01f6\u01ee\3\2\2"+ + "\2\u01f7/\3\2\2\2\u01f8\u01fa\5\20\t\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa"+ + "\3\2\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01fd\5D#\2\u01fc\u01f9\3\2\2\2\u01fc"+ + "\u01fb\3\2\2\2\u01fd\61\3\2\2\2\u01fe\u01ff\b\32\1\2\u01ff\u0200\7\b\2"+ + "\2\u0200\u0201\5\62\32\2\u0201\u0202\7\t\2\2\u0202\u020e\3\2\2\2\u0203"+ + "\u020e\7\\\2\2\u0204\u0206\7[\2\2\u0205\u0207\7\\\2\2\u0206\u0205\3\2"+ + "\2\2\u0206\u0207\3\2\2\2\u0207\u020e\3\2\2\2\u0208\u020e\58\35\2\u0209"+ + "\u020e\5\66\34\2\u020a\u020e\5> \2\u020b\u020e\5<\37\2\u020c\u020e\7\3"+ + "\2\2\u020d\u01fe\3\2\2\2\u020d\u0203\3\2\2\2\u020d\u0204\3\2\2\2\u020d"+ + "\u0208\3\2\2\2\u020d\u0209\3\2\2\2\u020d\u020a\3\2\2\2\u020d\u020b\3\2"+ + "\2\2\u020d\u020c\3\2\2\2\u020e\u021a\3\2\2\2\u020f\u0210\f\t\2\2\u0210"+ + "\u0212\7\6\2\2\u0211\u0213\5F$\2\u0212\u0211\3\2\2\2\u0212\u0213\3\2\2"+ + "\2\u0213\u0214\3\2\2\2\u0214\u0219\7\7\2\2\u0215\u0216\f\b\2\2\u0216\u0217"+ + "\7\b\2\2\u0217\u0219\7\t\2\2\u0218\u020f\3\2\2\2\u0218\u0215\3\2\2\2\u0219"+ + "\u021c\3\2\2\2\u021a\u0218\3\2\2\2\u021a\u021b\3\2\2\2\u021b\63\3\2\2"+ + "\2\u021c\u021a\3\2\2\2\u021d\u021e\b\33\1\2\u021e\u021f\5\62\32\2\u021f"+ + "\u022a\3\2\2\2\u0220\u0221\f\4\2\2\u0221\u0229\7\23\2\2\u0222\u0223\f"+ + "\3\2\2\u0223\u0225\7\6\2\2\u0224\u0226\5F$\2\u0225\u0224\3\2\2\2\u0225"+ + "\u0226\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u0229\7\7\2\2\u0228\u0220\3\2"+ + "\2\2\u0228\u0222\3\2\2\2\u0229\u022c\3\2\2\2\u022a\u0228\3\2\2\2\u022a"+ + "\u022b\3\2\2\2\u022b\65\3\2\2\2\u022c\u022a\3\2\2\2\u022d\u022e\7P\2\2"+ + "\u022e\u022f\7j\2\2\u022f\67\3\2\2\2\u0230\u0232\7P\2\2\u0231\u0233\7"+ + "j\2\2\u0232\u0231\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0234\3\2\2\2\u0234"+ + "\u0236\7\4\2\2\u0235\u0237\5:\36\2\u0236\u0235\3\2\2\2\u0237\u0238\3\2"+ + "\2\2\u0238\u0236\3\2\2\2\u0238\u0239\3\2\2\2\u0239\u023a\3\2\2\2\u023a"+ + "\u023b\7\5\2\2\u023b9\3\2\2\2\u023c\u023d\5\20\t\2\u023d\u023e\7\n\2\2"+ + "\u023e;\3\2\2\2\u023f\u0240\7Q\2\2\u0240\u0241\7j\2\2\u0241=\3\2\2\2\u0242"+ + "\u0244\7Q\2\2\u0243\u0245\7j\2\2\u0244\u0243\3\2\2\2\u0244\u0245\3\2\2"+ + "\2\u0245\u0246\3\2\2\2\u0246\u0247\7\4\2\2\u0247\u0248\5@!\2\u0248\u0249"+ + "\7\5\2\2\u0249?\3\2\2\2\u024a\u024b\b!\1\2\u024b\u024c\5B\"\2\u024c\u0252"+ + "\3\2\2\2\u024d\u024e\f\3\2\2\u024e\u024f\7\f\2\2\u024f\u0251\5B\"\2\u0250"+ + "\u024d\3\2\2\2\u0251\u0254\3\2\2\2\u0252\u0250\3\2\2\2\u0252\u0253\3\2"+ + "\2\2\u0253A\3\2\2\2\u0254\u0252\3\2\2\2\u0255\u0258\7j\2\2\u0256\u0257"+ + "\7&\2\2\u0257\u0259\5F$\2\u0258\u0256\3\2\2\2\u0258\u0259\3\2\2\2\u0259"+ + "C\3\2\2\2\u025a\u025b\b#\1\2\u025b\u025c\5F$\2\u025c\u0262\3\2\2\2\u025d"+ + "\u025e\f\3\2\2\u025e\u025f\7\f\2\2\u025f\u0261\5F$\2\u0260\u025d\3\2\2"+ + "\2\u0261\u0264\3\2\2\2\u0262\u0260\3\2\2\2\u0262\u0263\3\2\2\2\u0263E"+ + "\3\2\2\2\u0264\u0262\3\2\2\2\u0265\u0266\b$\1\2\u0266\u0267\7\b\2\2\u0267"+ + "\u0268\5D#\2\u0268\u0269\7\t\2\2\u0269\u029c\3\2\2\2\u026a\u026b\7R\2"+ + "\2\u026b\u026e\7\b\2\2\u026c\u026f\5F$\2\u026d\u026f\5\64\33\2\u026e\u026c"+ + "\3\2\2\2\u026e\u026d\3\2\2\2\u026f\u0270\3\2\2\2\u0270\u0271\7\t\2\2\u0271"+ + "\u029c\3\2\2\2\u0272\u0273\7S\2\2\u0273\u0276\7\b\2\2\u0274\u0277\5F$"+ + "\2\u0275\u0277\5\64\33\2\u0276\u0274\3\2\2\2\u0276\u0275\3\2\2\2\u0277"+ + "\u0278\3\2\2\2\u0278\u0279\7\t\2\2\u0279\u029c\3\2\2\2\u027a\u027b\7\b"+ + "\2\2\u027b\u027c\5\64\33\2\u027c\u027d\7\t\2\2\u027d\u027e\5F$\32\u027e"+ + "\u029c\3\2\2\2\u027f\u0280\t\2\2\2\u0280\u029c\5F$\31\u0281\u0282\7\23"+ + "\2\2\u0282\u029c\5F$\27\u0283\u0284\t\3\2\2\u0284\u029c\5F$\26\u0285\u0286"+ + "\t\4\2\2\u0286\u029c\5F$\22\u0287\u0288\7\4\2\2\u0288\u028d\5F$\2\u0289"+ + "\u028a\7\f\2\2\u028a\u028c\5F$\2\u028b\u0289\3\2\2\2\u028c\u028f\3\2\2"+ + "\2\u028d\u028b\3\2\2\2\u028d\u028e\3\2\2\2\u028e\u0290\3\2\2\2\u028f\u028d"+ + "\3\2\2\2\u0290\u0291\7\5\2\2\u0291\u029c\3\2\2\2\u0292\u029c\7j\2\2\u0293"+ + "\u029c\7a\2\2\u0294\u0296\7_\2\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\u029c\3\2\2\2\u0299\u029c"+ + "\7`\2\2\u029a\u029c\7]\2\2\u029b\u0265\3\2\2\2\u029b\u026a\3\2\2\2\u029b"+ + "\u0272\3\2\2\2\u029b\u027a\3\2\2\2\u029b\u027f\3\2\2\2\u029b\u0281\3\2"+ + "\2\2\u029b\u0283\3\2\2\2\u029b\u0285\3\2\2\2\u029b\u0287\3\2\2\2\u029b"+ + "\u0292\3\2\2\2\u029b\u0293\3\2\2\2\u029b\u0295\3\2\2\2\u029b\u0299\3\2"+ + "\2\2\u029b\u029a\3\2\2\2\u029c\u02d9\3\2\2\2\u029d\u029e\f\25\2\2\u029e"+ + "\u029f\t\5\2\2\u029f\u02d8\5F$\26\u02a0\u02a1\f\24\2\2\u02a1\u02a2\t\6"+ + "\2\2\u02a2\u02d8\5F$\25\u02a3\u02a4\f\23\2\2\u02a4\u02a5\t\7\2\2\u02a5"+ + "\u02d8\5F$\24\u02a6\u02a7\f\21\2\2\u02a7\u02a8\t\b\2\2\u02a8\u02d8\5F"+ + "$\22\u02a9\u02aa\f\20\2\2\u02aa\u02ab\7\30\2\2\u02ab\u02d8\5F$\21\u02ac"+ + "\u02ad\f\17\2\2\u02ad\u02ae\7\32\2\2\u02ae\u02d8\5F$\20\u02af\u02b0\f"+ + "\16\2\2\u02b0\u02b1\7\33\2\2\u02b1\u02d8\5F$\17\u02b2\u02b3\f\r\2\2\u02b3"+ + "\u02b4\7$\2\2\u02b4\u02d8\5F$\16\u02b5\u02b6\f\f\2\2\u02b6\u02b7\7%\2"+ + "\2\u02b7\u02d8\5F$\r\u02b8\u02b9\f\13\2\2\u02b9\u02ba\7\16\2\2\u02ba\u02bb"+ + "\5F$\2\u02bb\u02bc\7\13\2\2\u02bc\u02bd\5F$\f\u02bd\u02d8\3\2\2\2\u02be"+ + "\u02bf\f\n\2\2\u02bf\u02c0\7&\2\2\u02c0\u02d8\5F$\n\u02c1\u02c2\f\t\2"+ + "\2\u02c2\u02c3\7\'\2\2\u02c3\u02d8\5F$\t\u02c4\u02c5\f \2\2\u02c5\u02c6"+ + "\7\17\2\2\u02c6\u02d8\7j\2\2\u02c7\u02c8\f\37\2\2\u02c8\u02c9\7\20\2\2"+ + "\u02c9\u02d8\7j\2\2\u02ca\u02cb\f\36\2\2\u02cb\u02cd\7\b\2\2\u02cc\u02ce"+ + "\5H%\2\u02cd\u02cc\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02cf\3\2\2\2\u02cf"+ + "\u02d8\7\t\2\2\u02d0\u02d1\f\33\2\2\u02d1\u02d2\7\6\2\2\u02d2\u02d3\5"+ + "D#\2\u02d3\u02d4\7\7\2\2\u02d4\u02d8\3\2\2\2\u02d5\u02d6\f\30\2\2\u02d6"+ + "\u02d8\t\2\2\2\u02d7\u029d\3\2\2\2\u02d7\u02a0\3\2\2\2\u02d7\u02a3\3\2"+ + "\2\2\u02d7\u02a6\3\2\2\2\u02d7\u02a9\3\2\2\2\u02d7\u02ac\3\2\2\2\u02d7"+ + "\u02af\3\2\2\2\u02d7\u02b2\3\2\2\2\u02d7\u02b5\3\2\2\2\u02d7\u02b8\3\2"+ + "\2\2\u02d7\u02be\3\2\2\2\u02d7\u02c1\3\2\2\2\u02d7\u02c4\3\2\2\2\u02d7"+ + "\u02c7\3\2\2\2\u02d7\u02ca\3\2\2\2\u02d7\u02d0\3\2\2\2\u02d7\u02d5\3\2"+ + "\2\2\u02d8\u02db\3\2\2\2\u02d9\u02d7\3\2\2\2\u02d9\u02da\3\2\2\2\u02da"+ + "G\3\2\2\2\u02db\u02d9\3\2\2\2\u02dc\u02e1\5F$\2\u02dd\u02de\7\f\2\2\u02de"+ + "\u02e0\5F$\2\u02df\u02dd\3\2\2\2\u02e0\u02e3\3\2\2\2\u02e1\u02df\3\2\2"+ + "\2\u02e1\u02e2\3\2\2\2\u02e2I\3\2\2\2\u02e3\u02e1\3\2\2\2\u02e4\u02e6"+ + "\7T\2\2\u02e5\u02e7\5L\'\2\u02e6\u02e5\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7"+ + "\u02e8\3\2\2\2\u02e8\u02e9\7^\2\2\u02e9K\3\2\2\2\u02ea\u02eb\7\b\2\2\u02eb"+ + "\u02f0\5N(\2\u02ec\u02ed\7\f\2\2\u02ed\u02ef\5N(\2\u02ee\u02ec\3\2\2\2"+ + "\u02ef\u02f2\3\2\2\2\u02f0\u02ee\3\2\2\2\u02f0\u02f1\3\2\2\2\u02f1\u02f3"+ + "\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f3\u02f4\7\t\2\2\u02f4M\3\2\2\2\u02f5"+ + "\u02f6\7U\2\2\u02f6\u0305\7_\2\2\u02f7\u02f8\7V\2\2\u02f8\u0305\7j\2\2"+ + "\u02f9\u02fa\7W\2\2\u02fa\u0305\7_\2\2\u02fb\u02fc\7X\2\2\u02fc\u0305"+ + "\5F$\2\u02fd\u02fe\7Y\2\2\u02fe\u0305\5F$\2\u02ff\u0302\7,\2\2\u0300\u0303"+ + "\7\67\2\2\u0301\u0303\5F$\2\u0302\u0300\3\2\2\2\u0302\u0301\3\2\2\2\u0303"+ + "\u0305\3\2\2\2\u0304\u02f5\3\2\2\2\u0304\u02f7\3\2\2\2\u0304\u02f9\3\2"+ + "\2\2\u0304\u02fb\3\2\2\2\u0304\u02fd\3\2\2\2\u0304\u02ff\3\2\2\2\u0305"+ + "O\3\2\2\2\u0306\u0308\5R*\2\u0307\u0306\3\2\2\2\u0308\u030b\3\2\2\2\u0309"+ + "\u0307\3\2\2\2\u0309\u030a\3\2\2\2\u030aQ\3\2\2\2\u030b\u0309\3\2\2\2"+ + "\u030c\u0310\5T+\2\u030d\u0310\5V,\2\u030e\u0310\5X-\2\u030f\u030c\3\2"+ + "\2\2\u030f\u030d\3\2\2\2\u030f\u030e\3\2\2\2\u0310S\3\2\2\2\u0311\u0312"+ + "\7\u008e\2\2\u0312\u0316\7q\2\2\u0313\u0314\7\u008d\2\2\u0314\u0316\7"+ + "q\2\2\u0315\u0311\3\2\2\2\u0315\u0313\3\2\2\2\u0316U\3\2\2\2\u0317\u0319"+ + "\7o\2\2\u0318\u031a\5Z.\2\u0319\u0318\3\2\2\2\u0319\u031a\3\2\2\2\u031a"+ + "W\3\2\2\2\u031b\u031c\7n\2\2\u031c\u0321\5\\/\2\u031d\u031e\7r\2\2\u031e"+ + "\u0320\5\\/\2\u031f\u031d\3\2\2\2\u0320\u0323\3\2\2\2\u0321\u031f\3\2"+ + "\2\2\u0321\u0322\3\2\2\2\u0322Y\3\2\2\2\u0323\u0321\3\2\2\2\u0324\u033c"+ + "\5\\/\2\u0325\u0326\7p\2\2\u0326\u033c\5\\/\2\u0327\u0328\5\\/\2\u0328"+ + "\u0329\7r\2\2\u0329\u032a\7\u008e\2\2\u032a\u033c\3\2\2\2\u032b\u032c"+ + "\7s\2\2\u032c\u032d\5\\/\2\u032d\u032e\7t\2\2\u032e\u032f\7r\2\2\u032f"+ + "\u0330\7\u008e\2\2\u0330\u033c\3\2\2\2\u0331\u0332\7s\2\2\u0332\u0333"+ + "\5\\/\2\u0333\u0334\7r\2\2\u0334\u0335\7\u008e\2\2\u0335\u0336\7t\2\2"+ + "\u0336\u033c\3\2\2\2\u0337\u0338\7s\2\2\u0338\u0339\5\\/\2\u0339\u033a"+ + "\7t\2\2\u033a\u033c\3\2\2\2\u033b\u0324\3\2\2\2\u033b\u0325\3\2\2\2\u033b"+ + "\u0327\3\2\2\2\u033b\u032b\3\2\2\2\u033b\u0331\3\2\2\2\u033b\u0337\3\2"+ + "\2\2\u033c[\3\2\2\2\u033d\u033e\b/\1\2\u033e\u033f\7u\2\2\u033f\u0340"+ + "\5\\/\2\u0340\u0341\7v\2\2\u0341\u034c\3\2\2\2\u0342\u0343\t\t\2\2\u0343"+ + "\u034c\5\\/\n\u0344\u034c\7\u008e\2\2\u0345\u034c\7\u008c\2\2\u0346\u0347"+ + "\7\u0080\2\2\u0347\u0348\7\u008e\2\2\u0348\u034c\7\u0081\2\2\u0349\u034c"+ + "\7\u0082\2\2\u034a\u034c\7\u008b\2\2\u034b\u033d\3\2\2\2\u034b\u0342\3"+ + "\2\2\2\u034b\u0344\3\2\2\2\u034b\u0345\3\2\2\2\u034b\u0346\3\2\2\2\u034b"+ + "\u0349\3\2\2\2\u034b\u034a\3\2\2\2\u034c\u035b\3\2\2\2\u034d\u034e\f\f"+ + "\2\2\u034e\u034f\7w\2\2\u034f\u035a\5\\/\r\u0350\u0351\f\13\2\2\u0351"+ + "\u0352\t\n\2\2\u0352\u035a\5\\/\f\u0353\u0354\f\t\2\2\u0354\u0355\t\13"+ + "\2\2\u0355\u035a\5\\/\n\u0356\u0357\f\b\2\2\u0357\u0358\t\f\2\2\u0358"+ + "\u035a\5\\/\t\u0359\u034d\3\2\2\2\u0359\u0350\3\2\2\2\u0359\u0353\3\2"+ + "\2\2\u0359\u0356\3\2\2\2\u035a\u035d\3\2\2\2\u035b\u0359\3\2\2\2\u035b"+ + "\u035c\3\2\2\2\u035c]\3\2\2\2\u035d\u035b\3\2\2\2Tgl\u0080\u0085\u008c"+ + "\u0096\u00a0\u00a6\u00ad\u00b5\u00be\u00c4\u00cc\u00d1\u00d8\u00de\u00e3"+ + "\u00ec\u00f3\u00f9\u0104\u0141\u0145\u0150\u0163\u016c\u0171\u0176\u017d"+ + "\u018a\u018f\u019b\u01a9\u01bc\u01c5\u01cc\u01d1\u01d6\u01d8\u01de\u01e5"+ + "\u01eb\u01ee\u01f6\u01f9\u01fc\u0206\u020d\u0212\u0218\u021a\u0225\u0228"+ + "\u022a\u0232\u0238\u0244\u0252\u0258\u0262\u026e\u0276\u028d\u0297\u029b"+ + "\u02cd\u02d7\u02d9\u02e1\u02e6\u02f0\u0302\u0304\u0309\u030f\u0315\u0319"+ + "\u0321\u033b\u034b\u0359\u035b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java index bd453b356..cba9d9701 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseListener.java @@ -85,18 +85,6 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitDecl(KickCParser.DeclContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTypeDef(KickCParser.TypeDefContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTypeDef(KickCParser.TypeDefContext ctx) { } /** * {@inheritDoc} * @@ -133,6 +121,30 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitDeclVariableList(KickCParser.DeclVariableListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclPointer(KickCParser.DeclPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclPointer(KickCParser.DeclPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeDef(KickCParser.TypeDefContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeDef(KickCParser.TypeDefContext ctx) { } /** * {@inheritDoc} * @@ -805,18 +817,6 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitTypeProcedure(KickCParser.TypeProcedureContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterTypePtr(KickCParser.TypePtrContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitTypePtr(KickCParser.TypePtrContext ctx) { } /** * {@inheritDoc} * @@ -913,6 +913,42 @@ public class KickCParserBaseListener implements KickCParserListener { *

The default implementation does nothing.

*/ @Override public void exitTypeEnumDef(KickCParser.TypeEnumDefContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeSpecifierSimple(KickCParser.TypeSpecifierSimpleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeSpecifierSimple(KickCParser.TypeSpecifierSimpleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeSpecifierPointer(KickCParser.TypeSpecifierPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeSpecifierPointer(KickCParser.TypeSpecifierPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java index e044d6d79..b782300db 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserBaseVisitor.java @@ -55,13 +55,6 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitDecl(KickCParser.DeclContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

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

- */ - @Override public T visitTypeDef(KickCParser.TypeDefContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -83,6 +76,20 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

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

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

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

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

+ */ + @Override public T visitTypeDef(KickCParser.TypeDefContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -475,13 +482,6 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitTypeProcedure(KickCParser.TypeProcedureContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

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

- */ - @Override public T visitTypePtr(KickCParser.TypePtrContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -538,6 +538,27 @@ public class KickCParserBaseVisitor extends AbstractParseTreeVisitor imple * {@link #visitChildren} on {@code ctx}.

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

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

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

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

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

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

+ */ + @Override public T visitTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java index c9cbff122..8cf8b59bd 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserListener.java @@ -69,16 +69,6 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitDecl(KickCParser.DeclContext ctx); - /** - * Enter a parse tree produced by {@link KickCParser#typeDef}. - * @param ctx the parse tree - */ - void enterTypeDef(KickCParser.TypeDefContext ctx); - /** - * Exit a parse tree produced by {@link KickCParser#typeDef}. - * @param ctx the parse tree - */ - void exitTypeDef(KickCParser.TypeDefContext ctx); /** * Enter a parse tree produced by {@link KickCParser#declTypes}. * @param ctx the parse tree @@ -109,6 +99,26 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitDeclVariableList(KickCParser.DeclVariableListContext ctx); + /** + * Enter a parse tree produced by {@link KickCParser#declPointer}. + * @param ctx the parse tree + */ + void enterDeclPointer(KickCParser.DeclPointerContext ctx); + /** + * Exit a parse tree produced by {@link KickCParser#declPointer}. + * @param ctx the parse tree + */ + void exitDeclPointer(KickCParser.DeclPointerContext ctx); + /** + * Enter a parse tree produced by {@link KickCParser#typeDef}. + * @param ctx the parse tree + */ + void enterTypeDef(KickCParser.TypeDefContext ctx); + /** + * Exit a parse tree produced by {@link KickCParser#typeDef}. + * @param ctx the parse tree + */ + void exitTypeDef(KickCParser.TypeDefContext ctx); /** * Enter a parse tree produced by the {@code declVariableInitExpr} * labeled alternative in {@link KickCParser#declVariableInit}. @@ -771,18 +781,6 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitTypeProcedure(KickCParser.TypeProcedureContext ctx); - /** - * Enter a parse tree produced by the {@code typePtr} - * labeled alternative in {@link KickCParser#typeDecl}. - * @param ctx the parse tree - */ - void enterTypePtr(KickCParser.TypePtrContext ctx); - /** - * Exit a parse tree produced by the {@code typePtr} - * labeled alternative in {@link KickCParser#typeDecl}. - * @param ctx the parse tree - */ - void exitTypePtr(KickCParser.TypePtrContext ctx); /** * Enter a parse tree produced by the {@code typeArray} * labeled alternative in {@link KickCParser#typeDecl}. @@ -879,6 +877,42 @@ public interface KickCParserListener extends ParseTreeListener { * @param ctx the parse tree */ void exitTypeEnumDef(KickCParser.TypeEnumDefContext ctx); + /** + * Enter a parse tree produced by the {@code typeSpecifierSimple} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void enterTypeSpecifierSimple(KickCParser.TypeSpecifierSimpleContext ctx); + /** + * Exit a parse tree produced by the {@code typeSpecifierSimple} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void exitTypeSpecifierSimple(KickCParser.TypeSpecifierSimpleContext ctx); + /** + * Enter a parse tree produced by the {@code typeSpecifierPointer} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void enterTypeSpecifierPointer(KickCParser.TypeSpecifierPointerContext ctx); + /** + * Exit a parse tree produced by the {@code typeSpecifierPointer} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void exitTypeSpecifierPointer(KickCParser.TypeSpecifierPointerContext ctx); + /** + * Enter a parse tree produced by the {@code typeSpecifierArray} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void enterTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx); + /** + * Exit a parse tree produced by the {@code typeSpecifierArray} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + */ + void exitTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx); /** * Enter a parse tree produced by {@link KickCParser#structRef}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java index 6e853527b..6b02469a9 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParserVisitor.java @@ -48,12 +48,6 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDecl(KickCParser.DeclContext ctx); - /** - * Visit a parse tree produced by {@link KickCParser#typeDef}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypeDef(KickCParser.TypeDefContext ctx); /** * Visit a parse tree produced by {@link KickCParser#declTypes}. * @param ctx the parse tree @@ -72,6 +66,18 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDeclVariableList(KickCParser.DeclVariableListContext ctx); + /** + * Visit a parse tree produced by {@link KickCParser#declPointer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDeclPointer(KickCParser.DeclPointerContext ctx); + /** + * Visit a parse tree produced by {@link KickCParser#typeDef}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeDef(KickCParser.TypeDefContext ctx); /** * Visit a parse tree produced by the {@code declVariableInitExpr} * labeled alternative in {@link KickCParser#declVariableInit}. @@ -459,13 +465,6 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTypeProcedure(KickCParser.TypeProcedureContext ctx); - /** - * Visit a parse tree produced by the {@code typePtr} - * labeled alternative in {@link KickCParser#typeDecl}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitTypePtr(KickCParser.TypePtrContext ctx); /** * Visit a parse tree produced by the {@code typeArray} * labeled alternative in {@link KickCParser#typeDecl}. @@ -522,6 +521,27 @@ public interface KickCParserVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTypeEnumDef(KickCParser.TypeEnumDefContext ctx); + /** + * Visit a parse tree produced by the {@code typeSpecifierSimple} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeSpecifierSimple(KickCParser.TypeSpecifierSimpleContext ctx); + /** + * Visit a parse tree produced by the {@code typeSpecifierPointer} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeSpecifierPointer(KickCParser.TypeSpecifierPointerContext ctx); + /** + * Visit a parse tree produced by the {@code typeSpecifierArray} + * labeled alternative in {@link KickCParser#typeSpecifier}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeSpecifierArray(KickCParser.TypeSpecifierArrayContext ctx); /** * Visit a parse tree produced by {@link KickCParser#structRef}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 868360ad7..952886a7d 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -3,6 +3,7 @@ package dk.camelot64.kickc.passes; import dk.camelot64.kickc.NumberParser; import dk.camelot64.kickc.SourceLoader; import dk.camelot64.kickc.asm.AsmClobber; +import dk.camelot64.kickc.model.InternalError; import dk.camelot64.kickc.model.*; import dk.camelot64.kickc.model.operators.*; import dk.camelot64.kickc.model.statements.*; @@ -206,13 +207,17 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor directives = varDecl.getEffectiveDirectives(); String name = ctx.NAME().getText(); Procedure procedure = getCurrentScope().addProcedure(name, type, currentCodeSegment, currentDataSegment, currentCallingConvention); addDirectives(procedure, directives, StatementSource.procedureBegin(ctx)); procedure.setComments(ensureUnusedComments(getCommentsSymbol(ctx))); + varDecl.exitType(); scopeStack.push(procedure); Label procExit = procedure.addLabel(SymbolRef.PROCEXIT_BLOCK_NAME); Variable returnVar = null; @@ -245,8 +250,6 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor varDirectives = null; - public VariableDeclaration() { - } - /** * Exits the type layer (clears everyting except struct information) */ - public void exitType() { + void exitType() { + exitVar(); this.type = null; this.directives = null; this.arraySpec = null; @@ -563,21 +566,21 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor getEffectiveDirectives() { + List getEffectiveDirectives() { final ArrayList dirs = new ArrayList<>(); if(directives != null) dirs.addAll(directives); @@ -590,7 +593,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor directives) { + void setDirectives(List directives) { this.directives = directives; } @@ -610,21 +613,31 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitorid; + char bitmask = 1<id; if(processing->status!=STATUS_FREE) { if(processing->status==STATUS_NEW) { // Clear the char on the screen @@ -187,15 +187,15 @@ void processChars() { // Set status processing->status = STATUS_PROCESSING; } - word xpos = processing->x >> 4; + unsigned int xpos = processing->x >> 4; // Set sprite position if(>xpos) { *SPRITES_XMSB |= bitmask; } else { *SPRITES_XMSB &= 0xff ^ bitmask; } - SPRITES_XPOS[i*2] = (byte)xpos; - byte ypos = (byte)(processing->y>>4); + SPRITES_XPOS[i*2] = (char)xpos; + char ypos = (char)(processing->y>>4); SPRITES_YPOS[i*2] = ypos; // Move sprite @@ -205,10 +205,10 @@ void processChars() { // Disable the sprite *SPRITES_ENABLE &= 0xff ^ bitmask; } else { - byte xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8; + char xchar = (char)(xpos/8) - BORDER_XPOS_LEFT/8; processing->vx += VXSIN[xchar]; processing->x += processing->vx; - byte ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8; + char ychar = (char)(ypos/8) - BORDER_YPOS_TOP/8; processing->vy += VYSIN[ychar]; processing->y += processing->vy; } @@ -220,23 +220,23 @@ void processChars() { } } -// Populates 1000 bytes (a screen) with values representing the distance to the center. +// Populates 1000 chars (a screen) with values representing the distance to the center. // The actual value stored is distance*2 to increase precision -void init_dist_screen(byte* screen) { +void init_dist_screen(char* screen) { NUM_SQUARES = 0x30; init_squares(); - byte* screen_topline = screen; - byte *screen_bottomline = screen+40*24; - for(byte y: 0..12) { - byte y2 = y*2; - byte yd = (y2>=24)?(y2-24):(24-y2); - word yds = sqr(yd); - for( byte x=0,xb=39; x<=19; x++, xb--) { - byte x2 = x*2; - byte xd = (x2>=39)?(x2-39):(39-x2); - word xds = sqr(xd); - word ds = xds+yds; - byte d = sqrt(ds); + char* screen_topline = screen; + char *screen_bottomline = screen+40*24; + for(char y: 0..12) { + char y2 = y*2; + char yd = (y2>=24)?(y2-24):(24-y2); + unsigned int yds = sqr(yd); + for( char x=0,xb=39; x<=19; x++, xb--) { + char x2 = x*2; + char xd = (x2>=39)?(x2-39):(39-x2); + unsigned int xds = sqr(xd); + unsigned int ds = xds+yds; + char d = sqrt(ds); screen_topline[x] = d; screen_bottomline[x] = d; screen_topline[xb] = d; @@ -247,17 +247,17 @@ void init_dist_screen(byte* screen) { } } -// Populates 1000 bytes (a screen) with values representing the angle to the center. +// Populates 1000 chars (a screen) with values representing the angle to the center. // Utilizes symmetry around the center -void init_angle_screen(byte* screen) { - byte* screen_topline = screen+40*12; - byte *screen_bottomline = screen+40*12; - for(byte y: 0..12) { - for( byte x=0,xb=39; x<=19; x++, xb--) { - signed word xw = (signed word)(word){ 39-x*2, 0 }; - signed word yw = (signed word)(word){ y*2, 0 }; - word angle_w = atan2_16(xw, yw); - byte ang_w = >(angle_w+0x0080); +void init_angle_screen(char* screen) { + char* screen_topline = screen+40*12; + char *screen_bottomline = screen+40*12; + for(char y: 0..12) { + for( char x=0,xb=39; x<=19; x++, xb--) { + signed int xw = (signed int)(unsigned int){ 39-x*2, 0 }; + signed int yw = (signed int)(unsigned int){ y*2, 0 }; + unsigned int angle_w = atan2_16(xw, yw); + char ang_w = >(angle_w+0x0080); screen_bottomline[xb] = ang_w; screen_topline[xb] = -ang_w; screen_topline[x] = 0x80+ang_w; @@ -271,9 +271,9 @@ void init_angle_screen(byte* screen) { // Initialize sprites void initSprites() { // Clear sprite data - for( byte* sp = SPRITE_DATA; spSCREEN+$3e8 bne __b2 @@ -148,7 +148,7 @@ main: { iny cpy #SIZEOF_STRUCT_PROCESSINGSPRITE bne !- - // for( byte i: 0..NUM_PROCESSING-1 ) + // for( char i: 0..NUM_PROCESSING-1 ) inc.z i lda #NUM_PROCESSING-1+1 cmp.z i @@ -188,7 +188,7 @@ main: { ldy #0 lda (src),y sta (dst),y - // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) + // for( char *src=SCREEN, *dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) inc.z src bne !+ inc.z src+1 @@ -259,12 +259,12 @@ startProcessing: { bne !__b8+ jmp __b8 !__b8: - // (word)center.y + // (unsigned int)center.y lda.z center_y sta.z __0 lda #0 sta.z __0+1 - // (word)center.y*40 + // (unsigned int)center.y*40 lda.z __0 asl sta.z __34 @@ -286,7 +286,7 @@ startProcessing: { rol.z __1+1 asl.z __1 rol.z __1+1 - // offset = (word)center.y*40+center.x + // offset = (unsigned int)center.y*40+center.x lda.z center_x clc adc.z offset @@ -314,12 +314,12 @@ startProcessing: { lda.z screenPtr+1 adc #>SCREEN sta.z screenPtr+1 - // (word)spriteIdx + // (unsigned int)spriteIdx lda.z freeIdx sta.z __5 tya sta.z __5+1 - // (word)spriteIdx*64 + // (unsigned int)spriteIdx*64 asl.z __6 rol.z __6+1 asl.z __6 @@ -332,7 +332,7 @@ startProcessing: { rol.z __6+1 asl.z __6 rol.z __6+1 - // spriteData = SPRITE_DATA+(word)spriteIdx*64 + // spriteData = SPRITE_DATA+(unsigned int)spriteIdx*64 clc lda.z spriteData adc #SPRITE_DATA+NUM_PROCESSING*$40 bcc __b2 @@ -716,7 +716,7 @@ initSprites: { // SPRITES_COLS[i] = LIGHT_BLUE lda #LIGHT_BLUE sta SPRITES_COLS,x - // for( byte i: 0..7) + // for( char i: 0..7) inx cpx #8 bne __b3 @@ -734,14 +734,14 @@ initSprites: { lda #0 tay sta (sp),y - // for( byte* sp = SPRITE_DATA; spy>>4 ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y @@ -1279,7 +1279,7 @@ processChars: { ror.z __13 lsr.z __13+1 ror.z __13 - // ypos = (byte)(processing->y>>4) + // ypos = (char)(processing->y>>4) lda.z __13 sta.z ypos // SPRITES_YPOS[i*2] = ypos @@ -1349,9 +1349,9 @@ processChars: { ror.z __23 lsr.z __23+1 ror.z __23 - // (byte)(xpos/8) + // (char)(xpos/8) lda.z __23 - // xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8 + // xchar = (char)(xpos/8) - BORDER_XPOS_LEFT/8 sec sbc #BORDER_XPOS_LEFT/8 // processing->vx += VXSIN[xchar] @@ -1380,12 +1380,12 @@ processChars: { ldy #1 adc (processing),y sta (processing),y - // (byte)(ypos/8) + // (char)(ypos/8) lda.z ypos lsr lsr lsr - // ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8 + // ychar = (char)(ypos/8) - BORDER_YPOS_TOP/8 sec sbc #BORDER_YPOS_TOP/8 // processing->vy += VYSIN[ychar] @@ -1416,7 +1416,7 @@ processChars: { // numActive++; inc.z numActive __b2: - // for( byte i: 0..NUM_PROCESSING-1 ) + // for( char i: 0..NUM_PROCESSING-1 ) inc.z i lda #NUM_PROCESSING-1+1 cmp.z i diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index 8db275d70..e8d34d2d8 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -5730,7 +5730,7 @@ initSprites: { jmp __b1 } // init_angle_screen -// Populates 1000 bytes (a screen) with values representing the angle to the center. +// Populates 1000 chars (a screen) with values representing the angle to the center. // Utilizes symmetry around the center // init_angle_screen(byte* zp($38) screen) init_angle_screen: { @@ -8600,7 +8600,7 @@ initSprites: { jmp __b1 } // init_angle_screen -// Populates 1000 bytes (a screen) with values representing the angle to the center. +// Populates 1000 chars (a screen) with values representing the angle to the center. // Utilizes symmetry around the center // init_angle_screen(byte* zp($11) screen) init_angle_screen: { @@ -10540,7 +10540,7 @@ main: { // Copy screen to screen copy // main::@1 __b1: - // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) + // for( char *src=SCREEN, *dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) // [13] if((byte*) main::src#2!=(const byte*) SCREEN+(word) $3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z src+1 cmp #>SCREEN+$3e8 @@ -10581,7 +10581,7 @@ main: { iny cpy #SIZEOF_STRUCT_PROCESSINGSPRITE bne !- - // for( byte i: 0..NUM_PROCESSING-1 ) + // for( char i: 0..NUM_PROCESSING-1 ) // [21] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [22] if((byte) main::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 @@ -10652,7 +10652,7 @@ main: { ldy #0 lda (src),y sta (dst),y - // for( byte* src=SCREEN, dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) + // for( char *src=SCREEN, *dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++) // [42] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1 inc.z src bne !+ @@ -10748,13 +10748,13 @@ startProcessing: { jmp __b8 !__b8: // startProcessing::@5 - // (word)center.y + // (unsigned int)center.y // [55] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __0 lda #0 sta.z __0+1 - // (word)center.y*40 + // (unsigned int)center.y*40 // [56] (word~) startProcessing::$34 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __0 asl @@ -10779,7 +10779,7 @@ startProcessing: { rol.z __1+1 asl.z __1 rol.z __1+1 - // offset = (word)center.y*40+center.x + // offset = (unsigned int)center.y*40+center.x // [59] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z center_x clc @@ -10811,13 +10811,13 @@ startProcessing: { lda.z screenPtr+1 adc #>SCREEN sta.z screenPtr+1 - // (word)spriteIdx + // (unsigned int)spriteIdx // [63] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2 lda.z freeIdx sta.z __5 tya sta.z __5+1 - // (word)spriteIdx*64 + // (unsigned int)spriteIdx*64 // [64] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 -- vwuz1=vwuz1_rol_6 asl.z __6 rol.z __6+1 @@ -10831,7 +10831,7 @@ startProcessing: { rol.z __6+1 asl.z __6 rol.z __6+1 - // spriteData = SPRITE_DATA+(word)spriteIdx*64 + // spriteData = SPRITE_DATA+(unsigned int)spriteIdx*64 // [65] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA + (word~) startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z spriteData @@ -10843,12 +10843,12 @@ startProcessing: { // ch = (*screenPtr) // [66] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- vbuaa=_deref_pbuz1 lda (screenPtr),y - // (word)ch + // (unsigned int)ch // [67] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa sta.z __8 tya sta.z __8+1 - // (word)ch*8 + // (unsigned int)ch*8 // [68] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __9 rol.z __9+1 @@ -10856,7 +10856,7 @@ startProcessing: { rol.z __9+1 asl.z __9 rol.z __9+1 - // chargenData = CHARGEN+(word)ch*8 + // chargenData = CHARGEN+(unsigned int)ch*8 // [69] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN + (word~) startProcessing::$9 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z chargenData @@ -10903,7 +10903,7 @@ startProcessing: { bne !+ inc.z chargenData+1 !: - // for( byte i: 0..7) + // for( char i: 0..7) // [76] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx inx // [77] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1 @@ -10917,13 +10917,13 @@ startProcessing: { // asm // asm { cli } cli - // (word)center.x + // (unsigned int)center.x // [80] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2 lda.z center_x sta.z __11 lda #0 sta.z __11+1 - // (word)center.x*8 + // (unsigned int)center.x*8 // [81] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __12 rol.z __12+1 @@ -10931,7 +10931,7 @@ startProcessing: { rol.z __12+1 asl.z __12 rol.z __12+1 - // BORDER_XPOS_LEFT + (word)center.x*8 + // BORDER_XPOS_LEFT + (unsigned int)center.x*8 // [82] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT + (word~) startProcessing::$12 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_XPOS_LEFT clc @@ -10940,7 +10940,7 @@ startProcessing: { bcc !+ inc.z __13+1 !: - // spriteX = (BORDER_XPOS_LEFT + (word)center.x*8) << 4 + // spriteX = (BORDER_XPOS_LEFT + (unsigned int)center.x*8) << 4 // [83] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteX rol.z spriteX+1 @@ -10950,13 +10950,13 @@ startProcessing: { rol.z spriteX+1 asl.z spriteX rol.z spriteX+1 - // (word)center.y + // (unsigned int)center.y // [84] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2 lda.z center_y sta.z __15 lda #0 sta.z __15+1 - // (word)center.y*8 + // (unsigned int)center.y*8 // [85] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z __16 rol.z __16+1 @@ -10964,7 +10964,7 @@ startProcessing: { rol.z __16+1 asl.z __16 rol.z __16+1 - // BORDER_YPOS_TOP + (word)center.y*8 + // BORDER_YPOS_TOP + (unsigned int)center.y*8 // [86] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP + (word~) startProcessing::$16 -- vwuz1=vbuc1_plus_vwuz1 lda #BORDER_YPOS_TOP clc @@ -10973,7 +10973,7 @@ startProcessing: { bcc !+ inc.z __17+1 !: - // spriteY = (BORDER_YPOS_TOP + (word)center.y*8) << 4 + // spriteY = (BORDER_YPOS_TOP + (unsigned int)center.y*8) << 4 // [87] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 -- vwuz1=vwuz1_rol_4 asl.z spriteY rol.z spriteY+1 @@ -10983,7 +10983,7 @@ startProcessing: { rol.z spriteY+1 asl.z spriteY rol.z spriteY+1 - // spritePtr = (byte)(SPRITE_DATA/64)+spriteIdx + // spritePtr = (char)(SPRITE_DATA/64)+spriteIdx // [88] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2 lax.z freeIdx axs #-[SPRITE_DATA/$40] @@ -10994,12 +10994,12 @@ startProcessing: { asl asl asl - // (word)(spriteIdx*8) + // (unsigned int)(spriteIdx*8) // [90] (word~) startProcessing::$21 ← (word)(byte~) startProcessing::$20 -- vwuz1=_word_vbuaa sta.z __21 lda #0 sta.z __21+1 - // PROCESSING[spriteIdx] = { spriteX, spriteY, (word)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr } + // PROCESSING[spriteIdx] = { spriteX, spriteY, (unsigned int)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr } // [91] (byte~) startProcessing::$37 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z freeIdx asl @@ -11064,7 +11064,7 @@ startProcessing: { jmp __b1 // startProcessing::@3 __b3: - // for( byte i: 0..NUM_PROCESSING-1 ) + // for( char i: 0..NUM_PROCESSING-1 ) // [107] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [108] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1 @@ -11158,7 +11158,7 @@ getCharToProcess: { // [119] phi (byte) getCharToProcess::return_dist#1 = (byte) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy // getCharToProcess::@3 __b3: - // for( byte x: 0..39) + // for( char x: 0..39) // [120] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuyy=_inc_vbuyy iny // [121] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1 @@ -11183,7 +11183,7 @@ getCharToProcess: { bcc !+ inc.z dist_line+1 !: - // for( byte y: 0..24) + // for( char y: 0..24) // [124] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1 inc.z y // [125] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1 @@ -11196,13 +11196,13 @@ getCharToProcess: { cpx #NOT_FOUND beq __breturn // getCharToProcess::@8 - // (word)closest.y + // (unsigned int)closest.y // [127] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2 lda.z return_y sta.z __8 lda #0 sta.z __8+1 - // (word)closest.y*40 + // (unsigned int)closest.y*40 // [128] (word~) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 -- vwuz1=vwuz2_rol_2 lda.z __8 asl @@ -11227,7 +11227,7 @@ getCharToProcess: { rol.z __9+1 asl.z __9 rol.z __9+1 - // SCREEN_COPY+(word)closest.y*40 + // SCREEN_COPY+(unsigned int)closest.y*40 // [131] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 -- pbuz1=pbuz2_plus_vwuz1 lda.z __10 clc @@ -11236,7 +11236,7 @@ getCharToProcess: { lda.z __10+1 adc.z SCREEN_COPY+1 sta.z __10+1 - // *(SCREEN_COPY+(word)closest.y*40+closest.x) = ' ' + // *(SCREEN_COPY+(unsigned int)closest.y*40+closest.x) = ' ' // [132] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1 // clear the found char on the screen copy lda #' ' @@ -11345,7 +11345,7 @@ initSprites: { // Clear sprite data // initSprites::@1 __b1: - // for( byte* sp = SPRITE_DATA; spSPRITE_DATA+NUM_PROCESSING*$40 @@ -11367,7 +11367,7 @@ initSprites: { // [152] *((const byte*) SPRITES_COLS + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2 lda #LIGHT_BLUE sta SPRITES_COLS,x - // for( byte i: 0..7) + // for( char i: 0..7) // [153] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx inx // [154] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1 @@ -11395,7 +11395,7 @@ initSprites: { lda #0 tay sta (sp),y - // for( byte* sp = SPRITE_DATA; spy>>4 @@ -12134,7 +12134,7 @@ processChars: { ror.z __13 lsr.z __13+1 ror.z __13 - // ypos = (byte)(processing->y>>4) + // ypos = (char)(processing->y>>4) // [271] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$13 -- vbuz1=_byte_vwuz2 lda.z __13 sta.z ypos @@ -12215,10 +12215,10 @@ processChars: { ror.z __23 lsr.z __23+1 ror.z __23 - // (byte)(xpos/8) + // (char)(xpos/8) // [278] (byte~) processChars::$24 ← (byte)(word~) processChars::$23 -- vbuaa=_byte_vwuz1 lda.z __23 - // xchar = (byte)(xpos/8) - BORDER_XPOS_LEFT/8 + // xchar = (char)(xpos/8) - BORDER_XPOS_LEFT/8 // [279] (byte) processChars::xchar#0 ← (byte~) processChars::$24 - (const byte) BORDER_XPOS_LEFT/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_XPOS_LEFT/8 @@ -12251,13 +12251,13 @@ processChars: { ldy #1 adc (processing),y sta (processing),y - // (byte)(ypos/8) + // (char)(ypos/8) // [283] (byte~) processChars::$27 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3 lda.z ypos lsr lsr lsr - // ychar = (byte)(ypos/8) - BORDER_YPOS_TOP/8 + // ychar = (char)(ypos/8) - BORDER_YPOS_TOP/8 // [284] (byte) processChars::ychar#0 ← (byte~) processChars::$27 - (const byte) BORDER_YPOS_TOP/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #BORDER_YPOS_TOP/8 @@ -12297,7 +12297,7 @@ processChars: { // [289] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy // processChars::@2 __b2: - // for( byte i: 0..NUM_PROCESSING-1 ) + // for( char i: 0..NUM_PROCESSING-1 ) // [290] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1 inc.z i // [291] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1