From 397fdc61cd60da2f846b4a36bc95df973f518550 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Tue, 14 Aug 2018 14:33:36 +0200 Subject: [PATCH] if statement --- docs/source/programming.rst | 5 +- docs/source/syntaxreference.rst | 45 +- il65/antlr/il65.g4 | 22 +- il65/examples/numbergame.ill | 46 +- il65/examples/test.ill | 24 + il65/src/il65/ast/AST.kt | 62 +- il65/src/il65/parser/il65.tokens | 184 ++-- il65/src/il65/parser/il65Lexer.java | 452 ++++----- il65/src/il65/parser/il65Lexer.tokens | 184 ++-- il65/src/il65/parser/il65Parser.java | 1328 ++++++++++++++----------- lib65/c64lib.ill | 26 +- 11 files changed, 1320 insertions(+), 1058 deletions(-) diff --git a/docs/source/programming.rst b/docs/source/programming.rst index 3aaad264d..b4b339ff3 100644 --- a/docs/source/programming.rst +++ b/docs/source/programming.rst @@ -256,12 +256,11 @@ using a couple of instructions. Loops ----- -The *for*-loop is used to iterate over a range of values. Iteration steps by 1, -but you can set it to something else as well. +The *for*-loop is used to iterate over a range of values. Iteration is done in steps of 1, but you can change this. The *while*-loop is used to repeat a piece of code while a certain condition is still true. The *repeat--until* loop is used to repeat a piece of code until a certain condition is true. -You can also create loops by using the ``goto`` statement, but this should be avoided. +You can also create loops by using the ``goto`` statement, but this should usually be avoided. Conditional Execution diff --git a/docs/source/syntaxreference.rst b/docs/source/syntaxreference.rst index aef1e2b58..0e480d25c 100644 --- a/docs/source/syntaxreference.rst +++ b/docs/source/syntaxreference.rst @@ -273,9 +273,9 @@ Reserved names The following names are reserved, they have a special meaning:: - A X Y ; 6502 hardware registers - AX AY XY ; 16-bit pseudo register pairs - SC SI SZ ; bits of the 6502 hardware status register + A X Y ; 6502 hardware registers + AX AY XY ; 16-bit pseudo register pairs + Pc Pi Pz Pn Pv ; bits of the 6502 hardware status register Operators @@ -414,7 +414,9 @@ Loops for loop ^^^^^^^^ -@todo:: +.. todo:: not implemented yet, for now you can use the if statement with gotos to implement a for-loop. + +:: for in [ step ] { ; do something... @@ -425,7 +427,9 @@ for loop while loop ^^^^^^^^^^ -@todo:: +.. todo:: not implemented yet, for now you can use the if statement with gotos to implement a while-loop. + +:: while { ; do something... @@ -434,9 +438,12 @@ while loop } + repeat--until loop ^^^^^^^^^^^^^^^^^^ -@todo:: +.. todo:: not implemented yet, for now you can use the if statement with gotos to implement a repeat-loop. + +:: repeat { ; do something... @@ -465,26 +472,14 @@ to another piece of code that eventually returns). conditional execution ^^^^^^^^^^^^^^^^^^^^^ -@todo:: +With the 'if' / 'else' statement you can execute code depending on the value of a condition:: - if goto - if then [else ] + if ( ) [else ] - if { +where can be just a single statement, or a block, such as this:: + + if ( ) { - } - [ else { + } else { - } ] - - condition = arithmetic expression - or logical expression - or comparison expression - or status_register_flags - - single_statement = goto, assignment, ... - - subblock = '{' statements (but no subroutine definition) '}' - -if the single_statement or the subblock is just a single goto, -the efficient *conditional branching instructions* of the CPU will be used. + } diff --git a/il65/antlr/il65.g4 b/il65/antlr/il65.g4 index 237c71878..8ef4fd8f6 100644 --- a/il65/antlr/il65.g4 +++ b/il65/antlr/il65.g4 @@ -46,11 +46,7 @@ module : (modulestatement | EOL)* EOF ; modulestatement: directive | block ; -block: - '~' identifier integerliteral? '{' EOL - (statement | EOL)* - '}' EOL - ; +block: '~' identifier integerliteral? statement_block EOL ; statement : directive @@ -63,6 +59,7 @@ statement : | unconditionaljump | postincrdecr | functioncall_stmt + | if_stmt | subroutine | inlineasm | labeldef @@ -155,7 +152,7 @@ identifier : NAME ; scoped_identifier : NAME ('.' NAME)+ ; -register : 'A' | 'X' | 'Y' | 'AX' | 'AY' | 'XY' | 'SC' | 'SI' | 'SZ' ; +register : 'A' | 'X' | 'Y' | 'AX' | 'AY' | 'XY' | 'Pc' | 'Pi' | 'Pz' | 'Pn' | 'Pv' ; integerliteral : DEC_INTEGER | HEX_INTEGER | BIN_INTEGER ; @@ -179,21 +176,26 @@ inlineasm : '%asm' INLINEASMBLOCK; subroutine : - 'sub' identifier '(' sub_params? ')' '->' '(' sub_returns? ')' (sub_address | sub_body) + 'sub' identifier '(' sub_params? ')' '->' '(' sub_returns? ')' (sub_address | (statement_block EOL)) ; -sub_body : +statement_block : '{' EOL (statement | EOL) * - '}' EOL + '}' ; sub_address : '=' integerliteral ; sub_params : sub_param (',' sub_param)* ; -sub_param: identifier ':' register ; +sub_param: identifier ':' register; sub_returns : '?' | ( sub_return (',' sub_return)* ) ; sub_return: register '?'? ; + + +if_stmt : 'if' '(' expression ')' EOL? (statement | statement_block) EOL? else_part? EOL ; // statement is constrained later + +else_part : 'else' EOL? (statement | statement_block) ; // statement is constrained later diff --git a/il65/examples/numbergame.ill b/il65/examples/numbergame.ill index fef435b01..4a9f0c89f 100644 --- a/il65/examples/numbergame.ill +++ b/il65/examples/numbergame.ill @@ -5,8 +5,8 @@ ~ main { str name = "?" * 80 str guess = "?" * 80 - byte secretnumber = 0 - byte attempts_left = 10 + byte secretnumber = 0 + byte attempts_left = 10 memory word freadstr_arg = $22 ; argument for FREADSTR @@ -39,55 +39,37 @@ start: c64scr.print_string("I am thinking of a number from 1 to 100!You'll have to guess it!\n") -printloop: +ask_guess: c64scr.print_string("\nYou have ") c64scr.print_byte_decimal(attempts_left) c64scr.print_string(" guess") + if(attempts_left>0) c64scr.print_string("es") - ; @todo comparison expression so we can do if attempts_left>0 ... - A = attempts_left - A-- - ; @todo (conditional): if_zero A goto ask_guess - c64scr.print_string("es") -ask_guess: c64scr.print_string(" left.\nWhat is your next guess? ") Y = c64scr.input_chars(guess) c64.CHROUT("\n") freadstr_arg = guess c64.FREADSTR(A) AY = c64flt.GETADRAY() - A -= secretnumber ; @todo condition so we can do if guess > secretnumber.... - ; @todo (conditional): if_zero goto correct_guess - ; @todo (conditional): if_gt goto too_high + if(A==secretnumber) { + c64scr.print_string("\nThat's my number, impressive!\n") + goto goodbye + } c64scr.print_string("That is too ") - c64scr.print_string("low!\n") - goto continue + if(A > secretnumber) + c64scr.print_string("low!\n") + else + c64scr.print_string("high!\n") -correct_guess: - c64scr.print_string("\nThat's my number, impressive!\n") - goodbye() - return - -too_high: - c64scr.print_string("That is too ") - c64scr.print_string("high!\n") - -continue: attempts_left-- - ; @todo (conditional): if_zero attempts_left goto game_over - goto printloop + if(attempts_left>0) goto ask_guess game_over: c64scr.print_string("\nToo bad! It was: ") c64scr.print_byte_decimal(secretnumber) c64.CHROUT("\n") - return goodbye() - goodbye() ; @todo fix subroutine usage tracking, it doesn't register this one - return -sub goodbye ()->() { +goodbye: c64scr.print_string("\nThanks for playing. Bye!\n") return } - -} diff --git a/il65/examples/test.ill b/il65/examples/test.ill index 5ad54d1dc..b005fc049 100644 --- a/il65/examples/test.ill +++ b/il65/examples/test.ill @@ -16,10 +16,34 @@ const float zwop = -1.7014118345e+38 const float zwop2 = -1.7014118345e+38 const float blerp2 = zwop / 2.22 + const byte equal = 4==4 + const byte equal2 = (4+hopla)>0 XY = hopla*2+hopla1 A = "derp" * %000100 + if (1==1) goto hopla + + if (1==2) return 44 + + if (2==2) A=4 + + if (3==3) X=5 else A=99 + + if (5==5) { + A=99 + } + + if(6==6) { + A=99 + } else X=33 + + if(6==6) { + A=99 + } else { + X=33 + } + main.foo(1,2,3) mega: diff --git a/il65/src/il65/ast/AST.kt b/il65/src/il65/ast/AST.kt index f7c395850..13192fc60 100644 --- a/il65/src/il65/ast/AST.kt +++ b/il65/src/il65/ast/AST.kt @@ -26,9 +26,11 @@ enum class Register { AX, AY, XY, - SI, - SC, - SZ + PC, + PI, + PZ, + PN, + PV } @@ -91,6 +93,13 @@ interface IAstProcessor { fun process(jump: Jump): IStatement { return jump } + + fun process(ifStatement: IfStatement): IStatement { + ifStatement.condition = ifStatement.condition.process(this) + ifStatement.statements = ifStatement.statements.map { it.process(this) } + ifStatement.elsepart = ifStatement.elsepart?.map { it.process(this) } + return ifStatement + } } @@ -627,6 +636,22 @@ data class SubroutineReturnvalue(val register: Register, val clobbered: Boolean) } +data class IfStatement(var condition: IExpression, + var statements: List, var + elsepart: List) : IStatement { + override var position: Position? = null + override var parent: Node? = null + + override fun linkParents(parent: Node) { + this.parent = parent + condition.linkParents(this) + statements.forEach { it.linkParents(this) } + elsepart.forEach { it.linkParents(this) } + } + + override fun process(processor: IAstProcessor): IStatement = processor.process(this) +} + /***************** Antlr Extension methods to create AST ****************/ @@ -663,12 +688,16 @@ private fun il65Parser.ModulestatementContext.toAst(withPosition: Boolean) : ISt private fun il65Parser.BlockContext.toAst(withPosition: Boolean) : IStatement { val block= Block(identifier().text, integerliteral()?.toAst(), - statement().map { it.toAst(withPosition) }) + statement_block().toAst(withPosition)) block.position = toPosition(withPosition) return block } +private fun il65Parser.Statement_blockContext.toAst(withPosition: Boolean): List + = statement().map { it.toAst(withPosition) } + + private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatement { val vardecl = vardecl() if(vardecl!=null) { @@ -749,6 +778,12 @@ private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatemen val jump = unconditionaljump()?.toAst(withPosition) if(jump!=null) return jump + val fcall = functioncall_stmt()?.toAst(withPosition) + if(fcall!=null) return fcall + + val ifstmt = if_stmt()?.toAst(withPosition) + if(ifstmt!=null) return ifstmt + val returnstmt = returnstmt()?.toAst(withPosition) if(returnstmt!=null) return returnstmt @@ -758,13 +793,9 @@ private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatemen val asm = inlineasm()?.toAst(withPosition) if(asm!=null) return asm - val fcall = functioncall_stmt()?.toAst(withPosition) - if(fcall!=null) return fcall - throw UnsupportedOperationException(text) } - private fun il65Parser.Functioncall_stmtContext.toAst(withPosition: Boolean): IStatement { val location = if(identifier()!=null) identifier()?.toAst(withPosition) @@ -828,7 +859,7 @@ private fun il65Parser.SubroutineContext.toAst(withPosition: Boolean) : Subrouti if(sub_params()==null) emptyList() else sub_params().toAst(), if(sub_returns()==null) emptyList() else sub_returns().toAst(), sub_address()?.integerliteral()?.toAst(), - if(sub_body()==null) emptyList() else sub_body().statement().map {it.toAst(withPosition)}) + if(statement_block()==null) emptyList() else statement_block().toAst(withPosition)) sub.position = toPosition(withPosition) return sub } @@ -989,3 +1020,16 @@ private fun il65Parser.BooleanliteralContext.toAst() = when(text) { private fun il65Parser.ArrayliteralContext.toAst(withPosition: Boolean) = expression().map { it.toAst(withPosition) } + +private fun il65Parser.If_stmtContext.toAst(withPosition: Boolean): IfStatement { + val condition = expression().toAst(withPosition) + val statements = statement_block()?.toAst(withPosition) ?: listOf(statement().toAst(withPosition)) + val elsepart = else_part()?.toAst(withPosition) ?: emptyList() + val result = IfStatement(condition, statements, elsepart) + result.position = toPosition(withPosition) + return result +} + +private fun il65Parser.Else_partContext.toAst(withPosition: Boolean): List { + return statement_block()?.toAst(withPosition) ?: listOf(statement().toAst(withPosition)) +} diff --git a/il65/src/il65/parser/il65.tokens b/il65/src/il65/parser/il65.tokens index 9a612497d..022c30d33 100644 --- a/il65/src/il65/parser/il65.tokens +++ b/il65/src/il65/parser/il65.tokens @@ -81,97 +81,105 @@ T__79=80 T__80=81 T__81=82 T__82=83 -LINECOMMENT=84 -COMMENT=85 -WS=86 -EOL=87 -NAME=88 -DEC_INTEGER=89 -HEX_INTEGER=90 -BIN_INTEGER=91 -FLOAT_NUMBER=92 -STRING=93 -INLINEASMBLOCK=94 +T__83=84 +T__84=85 +T__85=86 +T__86=87 +LINECOMMENT=88 +COMMENT=89 +WS=90 +EOL=91 +NAME=92 +DEC_INTEGER=93 +HEX_INTEGER=94 +BIN_INTEGER=95 +FLOAT_NUMBER=96 +STRING=97 +INLINEASMBLOCK=98 '~'=1 -'{'=2 -'}'=3 -':'=4 -'goto'=5 -'%output'=6 -'%launcher'=7 -'%zp'=8 -'%address'=9 -'%import'=10 -'%breakpoint'=11 -'%asminclude'=12 -'%asmbinary'=13 -'%option'=14 -','=15 -'='=16 -'const'=17 -'memory'=18 -'byte'=19 -'word'=20 -'float'=21 -'str'=22 -'str_p'=23 -'str_s'=24 -'str_ps'=25 -'['=26 -']'=27 -'+='=28 -'-='=29 -'/='=30 -'*='=31 -'**='=32 -'<<='=33 -'>>='=34 -'<<@='=35 -'>>@='=36 -'&='=37 -'|='=38 -'^='=39 -'++'=40 -'--'=41 -'('=42 -')'=43 -'+'=44 -'-'=45 -'**'=46 -'*'=47 -'/'=48 -'<<'=49 -'>>'=50 -'<<@'=51 -'>>@'=52 -'<'=53 -'>'=54 -'<='=55 -'>='=56 -'=='=57 -'!='=58 -'&'=59 -'^'=60 -'|'=61 -'and'=62 -'or'=63 -'xor'=64 -'not'=65 -'to'=66 -'return'=67 -'.'=68 -'A'=69 -'X'=70 -'Y'=71 -'AX'=72 -'AY'=73 -'XY'=74 -'SC'=75 -'SI'=76 -'SZ'=77 +':'=2 +'goto'=3 +'%output'=4 +'%launcher'=5 +'%zp'=6 +'%address'=7 +'%import'=8 +'%breakpoint'=9 +'%asminclude'=10 +'%asmbinary'=11 +'%option'=12 +','=13 +'='=14 +'const'=15 +'memory'=16 +'byte'=17 +'word'=18 +'float'=19 +'str'=20 +'str_p'=21 +'str_s'=22 +'str_ps'=23 +'['=24 +']'=25 +'+='=26 +'-='=27 +'/='=28 +'*='=29 +'**='=30 +'<<='=31 +'>>='=32 +'<<@='=33 +'>>@='=34 +'&='=35 +'|='=36 +'^='=37 +'++'=38 +'--'=39 +'('=40 +')'=41 +'+'=42 +'-'=43 +'**'=44 +'*'=45 +'/'=46 +'<<'=47 +'>>'=48 +'<<@'=49 +'>>@'=50 +'<'=51 +'>'=52 +'<='=53 +'>='=54 +'=='=55 +'!='=56 +'&'=57 +'^'=58 +'|'=59 +'and'=60 +'or'=61 +'xor'=62 +'not'=63 +'to'=64 +'return'=65 +'.'=66 +'A'=67 +'X'=68 +'Y'=69 +'AX'=70 +'AY'=71 +'XY'=72 +'Pc'=73 +'Pi'=74 +'Pz'=75 +'Pn'=76 +'Pv'=77 'true'=78 'false'=79 '%asm'=80 'sub'=81 '->'=82 -'?'=83 +'{'=83 +'}'=84 +'?'=85 +'if'=86 +'else'=87 diff --git a/il65/src/il65/parser/il65Lexer.java b/il65/src/il65/parser/il65Lexer.java index fef462234..e369770f9 100644 --- a/il65/src/il65/parser/il65Lexer.java +++ b/il65/src/il65/parser/il65Lexer.java @@ -28,9 +28,9 @@ public class il65Lexer extends Lexer { T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66, T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73, T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, T__79=80, - T__80=81, T__81=82, T__82=83, LINECOMMENT=84, COMMENT=85, WS=86, EOL=87, - NAME=88, DEC_INTEGER=89, HEX_INTEGER=90, BIN_INTEGER=91, FLOAT_NUMBER=92, - STRING=93, INLINEASMBLOCK=94; + T__80=81, T__81=82, T__82=83, T__83=84, T__84=85, T__85=86, T__86=87, + LINECOMMENT=88, COMMENT=89, WS=90, EOL=91, NAME=92, DEC_INTEGER=93, HEX_INTEGER=94, + BIN_INTEGER=95, FLOAT_NUMBER=96, STRING=97, INLINEASMBLOCK=98; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -50,23 +50,23 @@ public class il65Lexer extends Lexer { "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72", "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80", - "T__81", "T__82", "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER", - "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "FNUMBER", "STRING_ESCAPE_SEQ", - "STRING", "INLINEASMBLOCK" + "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "LINECOMMENT", "COMMENT", + "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", + "FNUMBER", "STRING_ESCAPE_SEQ", "STRING", "INLINEASMBLOCK" }; private static final String[] _LITERAL_NAMES = { - null, "'~'", "'{'", "'}'", "':'", "'goto'", "'%output'", "'%launcher'", - "'%zp'", "'%address'", "'%import'", "'%breakpoint'", "'%asminclude'", - "'%asmbinary'", "'%option'", "','", "'='", "'const'", "'memory'", "'byte'", - "'word'", "'float'", "'str'", "'str_p'", "'str_s'", "'str_ps'", "'['", - "']'", "'+='", "'-='", "'/='", "'*='", "'**='", "'<<='", "'>>='", "'<<@='", - "'>>@='", "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'", - "'-'", "'**'", "'*'", "'/'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", - "'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", - "'xor'", "'not'", "'to'", "'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'", - "'AY'", "'XY'", "'SC'", "'SI'", "'SZ'", "'true'", "'false'", "'%asm'", - "'sub'", "'->'", "'?'" + null, "'~'", "':'", "'goto'", "'%output'", "'%launcher'", "'%zp'", "'%address'", + "'%import'", "'%breakpoint'", "'%asminclude'", "'%asmbinary'", "'%option'", + "','", "'='", "'const'", "'memory'", "'byte'", "'word'", "'float'", "'str'", + "'str_p'", "'str_s'", "'str_ps'", "'['", "']'", "'+='", "'-='", "'/='", + "'*='", "'**='", "'<<='", "'>>='", "'<<@='", "'>>@='", "'&='", "'|='", + "'^='", "'++'", "'--'", "'('", "')'", "'+'", "'-'", "'**'", "'*'", "'/'", + "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='", + "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", "'xor'", "'not'", "'to'", + "'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'", "'Pc'", + "'Pi'", "'Pz'", "'Pn'", "'Pv'", "'true'", "'false'", "'%asm'", "'sub'", + "'->'", "'{'", "'}'", "'?'", "'if'", "'else'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -76,8 +76,9 @@ public class il65Lexer extends Lexer { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", - "BIN_INTEGER", "FLOAT_NUMBER", "STRING", "INLINEASMBLOCK" + null, null, null, null, "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", + "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING", + "INLINEASMBLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -139,10 +140,10 @@ public class il65Lexer extends Lexer { @Override public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { switch (ruleIndex) { - case 94: + case 98: STRING_action((RuleContext)_localctx, actionIndex); break; - case 95: + case 99: INLINEASMBLOCK_action((RuleContext)_localctx, actionIndex); break; } @@ -171,7 +172,7 @@ public class il65Lexer extends Lexer { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2`\u027a\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2d\u0290\b\1\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -182,206 +183,213 @@ public class il65Lexer extends Lexer { "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ - "`\t`\4a\ta\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7"+ - "\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3"+ - "\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13"+ - "\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3"+ - "\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3"+ - "\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3"+ - "\20\3\20\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3"+ - "\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3"+ - "\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3"+ - "\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3"+ - "\33\3\33\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3 \3 "+ - "\3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3$\3$\3%\3%\3%\3"+ - "%\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3,\3,\3-\3"+ - "-\3.\3.\3/\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\63\3\63\3\63\3\64"+ - "\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\66\3\66\3\67\3\67\38\38\38\39\3"+ - "9\39\3:\3:\3:\3;\3;\3;\3<\3<\3=\3=\3>\3>\3?\3?\3?\3?\3@\3@\3@\3A\3A\3"+ - "A\3A\3B\3B\3B\3B\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3F\3F\3G\3G\3H\3"+ - "H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3N\3N\3O\3O\3O\3O\3"+ - "O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3S\3S\3S\3T\3T\3U\3U\7"+ - "U\u0211\nU\fU\16U\u0214\13U\3U\3U\3U\3U\3V\3V\7V\u021c\nV\fV\16V\u021f"+ - "\13V\3V\3V\3W\3W\3W\3W\3X\6X\u0228\nX\rX\16X\u0229\3Y\3Y\7Y\u022e\nY\f"+ - "Y\16Y\u0231\13Y\3Z\3Z\3Z\6Z\u0236\nZ\rZ\16Z\u0237\5Z\u023a\nZ\3[\3[\6"+ - "[\u023e\n[\r[\16[\u023f\3\\\3\\\6\\\u0244\n\\\r\\\16\\\u0245\3]\3]\3]"+ - "\5]\u024b\n]\3]\5]\u024e\n]\3^\6^\u0251\n^\r^\16^\u0252\3^\3^\6^\u0257"+ - "\n^\r^\16^\u0258\5^\u025b\n^\3_\3_\3_\3_\5_\u0261\n_\3`\3`\3`\7`\u0266"+ - "\n`\f`\16`\u0269\13`\3`\3`\3`\3a\3a\3a\3a\6a\u0272\na\ra\16a\u0273\3a"+ - "\3a\3a\3a\3a\3\u0273\2b\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f"+ - "\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+ - "\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+ - "c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087"+ - "E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b"+ - "O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00af"+ - "Y\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb\2\u00bd\2\u00bf_\u00c1`\3"+ - "\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62;C\\aac|\5\2\62;CHc"+ - "h\4\2GGgg\4\2--//\6\2\f\f\16\17$$^^\2\u0288\2\3\3\2\2\2\2\5\3\2\2\2\2"+ - "\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2"+ - "\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2"+ - "\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2"+ - "\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2"+ - "\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2"+ - "\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2"+ - "M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3"+ - "\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2"+ - "\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2"+ - "s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177"+ - "\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2"+ - "\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091"+ - "\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2"+ - "\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3"+ - "\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2"+ - "\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5"+ - "\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2"+ - "\2\3\u00c3\3\2\2\2\5\u00c5\3\2\2\2\7\u00c7\3\2\2\2\t\u00c9\3\2\2\2\13"+ - "\u00cb\3\2\2\2\r\u00d0\3\2\2\2\17\u00d8\3\2\2\2\21\u00e2\3\2\2\2\23\u00e6"+ - "\3\2\2\2\25\u00ef\3\2\2\2\27\u00f7\3\2\2\2\31\u0103\3\2\2\2\33\u010f\3"+ - "\2\2\2\35\u011a\3\2\2\2\37\u0122\3\2\2\2!\u0124\3\2\2\2#\u0126\3\2\2\2"+ - "%\u012c\3\2\2\2\'\u0133\3\2\2\2)\u0138\3\2\2\2+\u013d\3\2\2\2-\u0143\3"+ - "\2\2\2/\u0147\3\2\2\2\61\u014d\3\2\2\2\63\u0153\3\2\2\2\65\u015a\3\2\2"+ - "\2\67\u015c\3\2\2\29\u015e\3\2\2\2;\u0161\3\2\2\2=\u0164\3\2\2\2?\u0167"+ - "\3\2\2\2A\u016a\3\2\2\2C\u016e\3\2\2\2E\u0172\3\2\2\2G\u0176\3\2\2\2I"+ - "\u017b\3\2\2\2K\u0180\3\2\2\2M\u0183\3\2\2\2O\u0186\3\2\2\2Q\u0189\3\2"+ - "\2\2S\u018c\3\2\2\2U\u018f\3\2\2\2W\u0191\3\2\2\2Y\u0193\3\2\2\2[\u0195"+ - "\3\2\2\2]\u0197\3\2\2\2_\u019a\3\2\2\2a\u019c\3\2\2\2c\u019e\3\2\2\2e"+ - "\u01a1\3\2\2\2g\u01a4\3\2\2\2i\u01a8\3\2\2\2k\u01ac\3\2\2\2m\u01ae\3\2"+ - "\2\2o\u01b0\3\2\2\2q\u01b3\3\2\2\2s\u01b6\3\2\2\2u\u01b9\3\2\2\2w\u01bc"+ - "\3\2\2\2y\u01be\3\2\2\2{\u01c0\3\2\2\2}\u01c2\3\2\2\2\177\u01c6\3\2\2"+ - "\2\u0081\u01c9\3\2\2\2\u0083\u01cd\3\2\2\2\u0085\u01d1\3\2\2\2\u0087\u01d4"+ - "\3\2\2\2\u0089\u01db\3\2\2\2\u008b\u01dd\3\2\2\2\u008d\u01df\3\2\2\2\u008f"+ - "\u01e1\3\2\2\2\u0091\u01e3\3\2\2\2\u0093\u01e6\3\2\2\2\u0095\u01e9\3\2"+ - "\2\2\u0097\u01ec\3\2\2\2\u0099\u01ef\3\2\2\2\u009b\u01f2\3\2\2\2\u009d"+ - "\u01f5\3\2\2\2\u009f\u01fa\3\2\2\2\u00a1\u0200\3\2\2\2\u00a3\u0205\3\2"+ - "\2\2\u00a5\u0209\3\2\2\2\u00a7\u020c\3\2\2\2\u00a9\u020e\3\2\2\2\u00ab"+ - "\u0219\3\2\2\2\u00ad\u0222\3\2\2\2\u00af\u0227\3\2\2\2\u00b1\u022b\3\2"+ - "\2\2\u00b3\u0239\3\2\2\2\u00b5\u023b\3\2\2\2\u00b7\u0241\3\2\2\2\u00b9"+ - "\u0247\3\2\2\2\u00bb\u0250\3\2\2\2\u00bd\u0260\3\2\2\2\u00bf\u0262\3\2"+ - "\2\2\u00c1\u026d\3\2\2\2\u00c3\u00c4\7\u0080\2\2\u00c4\4\3\2\2\2\u00c5"+ - "\u00c6\7}\2\2\u00c6\6\3\2\2\2\u00c7\u00c8\7\177\2\2\u00c8\b\3\2\2\2\u00c9"+ - "\u00ca\7<\2\2\u00ca\n\3\2\2\2\u00cb\u00cc\7i\2\2\u00cc\u00cd\7q\2\2\u00cd"+ - "\u00ce\7v\2\2\u00ce\u00cf\7q\2\2\u00cf\f\3\2\2\2\u00d0\u00d1\7\'\2\2\u00d1"+ - "\u00d2\7q\2\2\u00d2\u00d3\7w\2\2\u00d3\u00d4\7v\2\2\u00d4\u00d5\7r\2\2"+ - "\u00d5\u00d6\7w\2\2\u00d6\u00d7\7v\2\2\u00d7\16\3\2\2\2\u00d8\u00d9\7"+ - "\'\2\2\u00d9\u00da\7n\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7w\2\2\u00dc"+ - "\u00dd\7p\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7j\2\2\u00df\u00e0\7g\2\2"+ - "\u00e0\u00e1\7t\2\2\u00e1\20\3\2\2\2\u00e2\u00e3\7\'\2\2\u00e3\u00e4\7"+ - "|\2\2\u00e4\u00e5\7r\2\2\u00e5\22\3\2\2\2\u00e6\u00e7\7\'\2\2\u00e7\u00e8"+ - "\7c\2\2\u00e8\u00e9\7f\2\2\u00e9\u00ea\7f\2\2\u00ea\u00eb\7t\2\2\u00eb"+ - "\u00ec\7g\2\2\u00ec\u00ed\7u\2\2\u00ed\u00ee\7u\2\2\u00ee\24\3\2\2\2\u00ef"+ - "\u00f0\7\'\2\2\u00f0\u00f1\7k\2\2\u00f1\u00f2\7o\2\2\u00f2\u00f3\7r\2"+ - "\2\u00f3\u00f4\7q\2\2\u00f4\u00f5\7t\2\2\u00f5\u00f6\7v\2\2\u00f6\26\3"+ - "\2\2\2\u00f7\u00f8\7\'\2\2\u00f8\u00f9\7d\2\2\u00f9\u00fa\7t\2\2\u00fa"+ - "\u00fb\7g\2\2\u00fb\u00fc\7c\2\2\u00fc\u00fd\7m\2\2\u00fd\u00fe\7r\2\2"+ - "\u00fe\u00ff\7q\2\2\u00ff\u0100\7k\2\2\u0100\u0101\7p\2\2\u0101\u0102"+ - "\7v\2\2\u0102\30\3\2\2\2\u0103\u0104\7\'\2\2\u0104\u0105\7c\2\2\u0105"+ - "\u0106\7u\2\2\u0106\u0107\7o\2\2\u0107\u0108\7k\2\2\u0108\u0109\7p\2\2"+ - "\u0109\u010a\7e\2\2\u010a\u010b\7n\2\2\u010b\u010c\7w\2\2\u010c\u010d"+ - "\7f\2\2\u010d\u010e\7g\2\2\u010e\32\3\2\2\2\u010f\u0110\7\'\2\2\u0110"+ - "\u0111\7c\2\2\u0111\u0112\7u\2\2\u0112\u0113\7o\2\2\u0113\u0114\7d\2\2"+ - "\u0114\u0115\7k\2\2\u0115\u0116\7p\2\2\u0116\u0117\7c\2\2\u0117\u0118"+ - "\7t\2\2\u0118\u0119\7{\2\2\u0119\34\3\2\2\2\u011a\u011b\7\'\2\2\u011b"+ - "\u011c\7q\2\2\u011c\u011d\7r\2\2\u011d\u011e\7v\2\2\u011e\u011f\7k\2\2"+ - "\u011f\u0120\7q\2\2\u0120\u0121\7p\2\2\u0121\36\3\2\2\2\u0122\u0123\7"+ - ".\2\2\u0123 \3\2\2\2\u0124\u0125\7?\2\2\u0125\"\3\2\2\2\u0126\u0127\7"+ - "e\2\2\u0127\u0128\7q\2\2\u0128\u0129\7p\2\2\u0129\u012a\7u\2\2\u012a\u012b"+ - "\7v\2\2\u012b$\3\2\2\2\u012c\u012d\7o\2\2\u012d\u012e\7g\2\2\u012e\u012f"+ - "\7o\2\2\u012f\u0130\7q\2\2\u0130\u0131\7t\2\2\u0131\u0132\7{\2\2\u0132"+ - "&\3\2\2\2\u0133\u0134\7d\2\2\u0134\u0135\7{\2\2\u0135\u0136\7v\2\2\u0136"+ - "\u0137\7g\2\2\u0137(\3\2\2\2\u0138\u0139\7y\2\2\u0139\u013a\7q\2\2\u013a"+ - "\u013b\7t\2\2\u013b\u013c\7f\2\2\u013c*\3\2\2\2\u013d\u013e\7h\2\2\u013e"+ - "\u013f\7n\2\2\u013f\u0140\7q\2\2\u0140\u0141\7c\2\2\u0141\u0142\7v\2\2"+ - "\u0142,\3\2\2\2\u0143\u0144\7u\2\2\u0144\u0145\7v\2\2\u0145\u0146\7t\2"+ - "\2\u0146.\3\2\2\2\u0147\u0148\7u\2\2\u0148\u0149\7v\2\2\u0149\u014a\7"+ - "t\2\2\u014a\u014b\7a\2\2\u014b\u014c\7r\2\2\u014c\60\3\2\2\2\u014d\u014e"+ - "\7u\2\2\u014e\u014f\7v\2\2\u014f\u0150\7t\2\2\u0150\u0151\7a\2\2\u0151"+ - "\u0152\7u\2\2\u0152\62\3\2\2\2\u0153\u0154\7u\2\2\u0154\u0155\7v\2\2\u0155"+ - "\u0156\7t\2\2\u0156\u0157\7a\2\2\u0157\u0158\7r\2\2\u0158\u0159\7u\2\2"+ - "\u0159\64\3\2\2\2\u015a\u015b\7]\2\2\u015b\66\3\2\2\2\u015c\u015d\7_\2"+ - "\2\u015d8\3\2\2\2\u015e\u015f\7-\2\2\u015f\u0160\7?\2\2\u0160:\3\2\2\2"+ - "\u0161\u0162\7/\2\2\u0162\u0163\7?\2\2\u0163<\3\2\2\2\u0164\u0165\7\61"+ - "\2\2\u0165\u0166\7?\2\2\u0166>\3\2\2\2\u0167\u0168\7,\2\2\u0168\u0169"+ - "\7?\2\2\u0169@\3\2\2\2\u016a\u016b\7,\2\2\u016b\u016c\7,\2\2\u016c\u016d"+ - "\7?\2\2\u016dB\3\2\2\2\u016e\u016f\7>\2\2\u016f\u0170\7>\2\2\u0170\u0171"+ - "\7?\2\2\u0171D\3\2\2\2\u0172\u0173\7@\2\2\u0173\u0174\7@\2\2\u0174\u0175"+ - "\7?\2\2\u0175F\3\2\2\2\u0176\u0177\7>\2\2\u0177\u0178\7>\2\2\u0178\u0179"+ - "\7B\2\2\u0179\u017a\7?\2\2\u017aH\3\2\2\2\u017b\u017c\7@\2\2\u017c\u017d"+ - "\7@\2\2\u017d\u017e\7B\2\2\u017e\u017f\7?\2\2\u017fJ\3\2\2\2\u0180\u0181"+ - "\7(\2\2\u0181\u0182\7?\2\2\u0182L\3\2\2\2\u0183\u0184\7~\2\2\u0184\u0185"+ - "\7?\2\2\u0185N\3\2\2\2\u0186\u0187\7`\2\2\u0187\u0188\7?\2\2\u0188P\3"+ - "\2\2\2\u0189\u018a\7-\2\2\u018a\u018b\7-\2\2\u018bR\3\2\2\2\u018c\u018d"+ - "\7/\2\2\u018d\u018e\7/\2\2\u018eT\3\2\2\2\u018f\u0190\7*\2\2\u0190V\3"+ - "\2\2\2\u0191\u0192\7+\2\2\u0192X\3\2\2\2\u0193\u0194\7-\2\2\u0194Z\3\2"+ - "\2\2\u0195\u0196\7/\2\2\u0196\\\3\2\2\2\u0197\u0198\7,\2\2\u0198\u0199"+ - "\7,\2\2\u0199^\3\2\2\2\u019a\u019b\7,\2\2\u019b`\3\2\2\2\u019c\u019d\7"+ - "\61\2\2\u019db\3\2\2\2\u019e\u019f\7>\2\2\u019f\u01a0\7>\2\2\u01a0d\3"+ - "\2\2\2\u01a1\u01a2\7@\2\2\u01a2\u01a3\7@\2\2\u01a3f\3\2\2\2\u01a4\u01a5"+ - "\7>\2\2\u01a5\u01a6\7>\2\2\u01a6\u01a7\7B\2\2\u01a7h\3\2\2\2\u01a8\u01a9"+ - "\7@\2\2\u01a9\u01aa\7@\2\2\u01aa\u01ab\7B\2\2\u01abj\3\2\2\2\u01ac\u01ad"+ - "\7>\2\2\u01adl\3\2\2\2\u01ae\u01af\7@\2\2\u01afn\3\2\2\2\u01b0\u01b1\7"+ - ">\2\2\u01b1\u01b2\7?\2\2\u01b2p\3\2\2\2\u01b3\u01b4\7@\2\2\u01b4\u01b5"+ - "\7?\2\2\u01b5r\3\2\2\2\u01b6\u01b7\7?\2\2\u01b7\u01b8\7?\2\2\u01b8t\3"+ - "\2\2\2\u01b9\u01ba\7#\2\2\u01ba\u01bb\7?\2\2\u01bbv\3\2\2\2\u01bc\u01bd"+ - "\7(\2\2\u01bdx\3\2\2\2\u01be\u01bf\7`\2\2\u01bfz\3\2\2\2\u01c0\u01c1\7"+ - "~\2\2\u01c1|\3\2\2\2\u01c2\u01c3\7c\2\2\u01c3\u01c4\7p\2\2\u01c4\u01c5"+ - "\7f\2\2\u01c5~\3\2\2\2\u01c6\u01c7\7q\2\2\u01c7\u01c8\7t\2\2\u01c8\u0080"+ - "\3\2\2\2\u01c9\u01ca\7z\2\2\u01ca\u01cb\7q\2\2\u01cb\u01cc\7t\2\2\u01cc"+ - "\u0082\3\2\2\2\u01cd\u01ce\7p\2\2\u01ce\u01cf\7q\2\2\u01cf\u01d0\7v\2"+ - "\2\u01d0\u0084\3\2\2\2\u01d1\u01d2\7v\2\2\u01d2\u01d3\7q\2\2\u01d3\u0086"+ - "\3\2\2\2\u01d4\u01d5\7t\2\2\u01d5\u01d6\7g\2\2\u01d6\u01d7\7v\2\2\u01d7"+ - "\u01d8\7w\2\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7p\2\2\u01da\u0088\3\2\2"+ - "\2\u01db\u01dc\7\60\2\2\u01dc\u008a\3\2\2\2\u01dd\u01de\7C\2\2\u01de\u008c"+ - "\3\2\2\2\u01df\u01e0\7Z\2\2\u01e0\u008e\3\2\2\2\u01e1\u01e2\7[\2\2\u01e2"+ - "\u0090\3\2\2\2\u01e3\u01e4\7C\2\2\u01e4\u01e5\7Z\2\2\u01e5\u0092\3\2\2"+ - "\2\u01e6\u01e7\7C\2\2\u01e7\u01e8\7[\2\2\u01e8\u0094\3\2\2\2\u01e9\u01ea"+ - "\7Z\2\2\u01ea\u01eb\7[\2\2\u01eb\u0096\3\2\2\2\u01ec\u01ed\7U\2\2\u01ed"+ - "\u01ee\7E\2\2\u01ee\u0098\3\2\2\2\u01ef\u01f0\7U\2\2\u01f0\u01f1\7K\2"+ - "\2\u01f1\u009a\3\2\2\2\u01f2\u01f3\7U\2\2\u01f3\u01f4\7\\\2\2\u01f4\u009c"+ - "\3\2\2\2\u01f5\u01f6\7v\2\2\u01f6\u01f7\7t\2\2\u01f7\u01f8\7w\2\2\u01f8"+ - "\u01f9\7g\2\2\u01f9\u009e\3\2\2\2\u01fa\u01fb\7h\2\2\u01fb\u01fc\7c\2"+ - "\2\u01fc\u01fd\7n\2\2\u01fd\u01fe\7u\2\2\u01fe\u01ff\7g\2\2\u01ff\u00a0"+ - "\3\2\2\2\u0200\u0201\7\'\2\2\u0201\u0202\7c\2\2\u0202\u0203\7u\2\2\u0203"+ - "\u0204\7o\2\2\u0204\u00a2\3\2\2\2\u0205\u0206\7u\2\2\u0206\u0207\7w\2"+ - "\2\u0207\u0208\7d\2\2\u0208\u00a4\3\2\2\2\u0209\u020a\7/\2\2\u020a\u020b"+ - "\7@\2\2\u020b\u00a6\3\2\2\2\u020c\u020d\7A\2\2\u020d\u00a8\3\2\2\2\u020e"+ - "\u0212\t\2\2\2\u020f\u0211\t\3\2\2\u0210\u020f\3\2\2\2\u0211\u0214\3\2"+ - "\2\2\u0212\u0210\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0215\3\2\2\2\u0214"+ - "\u0212\3\2\2\2\u0215\u0216\5\u00abV\2\u0216\u0217\3\2\2\2\u0217\u0218"+ - "\bU\2\2\u0218\u00aa\3\2\2\2\u0219\u021d\7=\2\2\u021a\u021c\n\2\2\2\u021b"+ - "\u021a\3\2\2\2\u021c\u021f\3\2\2\2\u021d\u021b\3\2\2\2\u021d\u021e\3\2"+ - "\2\2\u021e\u0220\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0221\bV\2\2\u0221"+ - "\u00ac\3\2\2\2\u0222\u0223\t\3\2\2\u0223\u0224\3\2\2\2\u0224\u0225\bW"+ - "\3\2\u0225\u00ae\3\2\2\2\u0226\u0228\t\2\2\2\u0227\u0226\3\2\2\2\u0228"+ - "\u0229\3\2\2\2\u0229\u0227\3\2\2\2\u0229\u022a\3\2\2\2\u022a\u00b0\3\2"+ - "\2\2\u022b\u022f\t\4\2\2\u022c\u022e\t\5\2\2\u022d\u022c\3\2\2\2\u022e"+ - "\u0231\3\2\2\2\u022f\u022d\3\2\2\2\u022f\u0230\3\2\2\2\u0230\u00b2\3\2"+ - "\2\2\u0231\u022f\3\2\2\2\u0232\u023a\4\62;\2\u0233\u0235\4\63;\2\u0234"+ - "\u0236\4\62;\2\u0235\u0234\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0235\3\2"+ - "\2\2\u0237\u0238\3\2\2\2\u0238\u023a\3\2\2\2\u0239\u0232\3\2\2\2\u0239"+ - "\u0233\3\2\2\2\u023a\u00b4\3\2\2\2\u023b\u023d\7&\2\2\u023c\u023e\t\6"+ - "\2\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u023d\3\2\2\2\u023f"+ - "\u0240\3\2\2\2\u0240\u00b6\3\2\2\2\u0241\u0243\7\'\2\2\u0242\u0244\4\62"+ - "\63\2\u0243\u0242\3\2\2\2\u0244\u0245\3\2\2\2\u0245\u0243\3\2\2\2\u0245"+ - "\u0246\3\2\2\2\u0246\u00b8\3\2\2\2\u0247\u024d\5\u00bb^\2\u0248\u024a"+ - "\t\7\2\2\u0249\u024b\t\b\2\2\u024a\u0249\3\2\2\2\u024a\u024b\3\2\2\2\u024b"+ - "\u024c\3\2\2\2\u024c\u024e\5\u00bb^\2\u024d\u0248\3\2\2\2\u024d\u024e"+ - "\3\2\2\2\u024e\u00ba\3\2\2\2\u024f\u0251\4\62;\2\u0250\u024f\3\2\2\2\u0251"+ - "\u0252\3\2\2\2\u0252\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u025a\3\2"+ - "\2\2\u0254\u0256\7\60\2\2\u0255\u0257\4\62;\2\u0256\u0255\3\2\2\2\u0257"+ - "\u0258\3\2\2\2\u0258\u0256\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025b\3\2"+ - "\2\2\u025a\u0254\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u00bc\3\2\2\2\u025c"+ - "\u025d\7^\2\2\u025d\u0261\13\2\2\2\u025e\u025f\7^\2\2\u025f\u0261\5\u00af"+ - "X\2\u0260\u025c\3\2\2\2\u0260\u025e\3\2\2\2\u0261\u00be\3\2\2\2\u0262"+ - "\u0267\7$\2\2\u0263\u0266\5\u00bd_\2\u0264\u0266\n\t\2\2\u0265\u0263\3"+ - "\2\2\2\u0265\u0264\3\2\2\2\u0266\u0269\3\2\2\2\u0267\u0265\3\2\2\2\u0267"+ - "\u0268\3\2\2\2\u0268\u026a\3\2\2\2\u0269\u0267\3\2\2\2\u026a\u026b\7$"+ - "\2\2\u026b\u026c\b`\4\2\u026c\u00c0\3\2\2\2\u026d\u026e\7}\2\2\u026e\u026f"+ - "\7}\2\2\u026f\u0271\3\2\2\2\u0270\u0272\13\2\2\2\u0271\u0270\3\2\2\2\u0272"+ - "\u0273\3\2\2\2\u0273\u0274\3\2\2\2\u0273\u0271\3\2\2\2\u0274\u0275\3\2"+ - "\2\2\u0275\u0276\7\177\2\2\u0276\u0277\7\177\2\2\u0277\u0278\3\2\2\2\u0278"+ - "\u0279\ba\5\2\u0279\u00c2\3\2\2\2\25\2\u0212\u021d\u0229\u022f\u0237\u0239"+ - "\u023d\u023f\u0245\u024a\u024d\u0252\u0258\u025a\u0260\u0265\u0267\u0273"+ - "\6\2\3\2\b\2\2\3`\2\3a\3"; + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\3\2\3\2\3\3\3\3\3\4\3\4\3\4\3\4\3\4"+ + "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+ + "\6\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t"+ + "\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13"+ + "\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3"+ + "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3"+ + "\16\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3"+ + "\21\3\21\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3"+ + "\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3"+ + "\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3"+ + "\31\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3"+ + "\36\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3"+ + "#\3#\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3"+ + "*\3*\3+\3+\3,\3,\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3"+ + "\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\64\3\64\3\65\3\65\3\66\3\66\3"+ + "\66\3\67\3\67\3\67\38\38\38\39\39\39\3:\3:\3;\3;\3<\3<\3=\3=\3=\3=\3>"+ + "\3>\3>\3?\3?\3?\3?\3@\3@\3@\3@\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3D"+ + "\3D\3E\3E\3F\3F\3G\3G\3G\3H\3H\3H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L"+ + "\3M\3M\3M\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3R"+ + "\3R\3R\3R\3S\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3W\3X\3X\3X\3X\3X\3Y\3Y\7Y"+ + "\u0227\nY\fY\16Y\u022a\13Y\3Y\3Y\3Y\3Y\3Z\3Z\7Z\u0232\nZ\fZ\16Z\u0235"+ + "\13Z\3Z\3Z\3[\3[\3[\3[\3\\\6\\\u023e\n\\\r\\\16\\\u023f\3]\3]\7]\u0244"+ + "\n]\f]\16]\u0247\13]\3^\3^\3^\6^\u024c\n^\r^\16^\u024d\5^\u0250\n^\3_"+ + "\3_\6_\u0254\n_\r_\16_\u0255\3`\3`\6`\u025a\n`\r`\16`\u025b\3a\3a\3a\5"+ + "a\u0261\na\3a\5a\u0264\na\3b\6b\u0267\nb\rb\16b\u0268\3b\3b\6b\u026d\n"+ + "b\rb\16b\u026e\5b\u0271\nb\3c\3c\3c\3c\5c\u0277\nc\3d\3d\3d\7d\u027c\n"+ + "d\fd\16d\u027f\13d\3d\3d\3d\3e\3e\3e\3e\6e\u0288\ne\re\16e\u0289\3e\3"+ + "e\3e\3e\3e\3\u0289\2f\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27"+ + "\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33"+ + "\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63"+ + "e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089"+ + "F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+ + "P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+ + "Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3\2\u00c5"+ + "\2\u00c7c\u00c9d\3\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62;"+ + "C\\aac|\5\2\62;CHch\4\2GGgg\4\2--//\6\2\f\f\16\17$$^^\2\u029e\2\3\3\2"+ + "\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17"+ + "\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2"+ + "\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3"+ + "\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3"+ + "\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2"+ + "=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3"+ + "\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2"+ + "\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2"+ + "c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3"+ + "\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2"+ + "\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3"+ + "\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2"+ + "\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097"+ + "\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2"+ + "\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9"+ + "\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2"+ + "\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb"+ + "\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c7\3\2\2"+ + "\2\2\u00c9\3\2\2\2\3\u00cb\3\2\2\2\5\u00cd\3\2\2\2\7\u00cf\3\2\2\2\t\u00d4"+ + "\3\2\2\2\13\u00dc\3\2\2\2\r\u00e6\3\2\2\2\17\u00ea\3\2\2\2\21\u00f3\3"+ + "\2\2\2\23\u00fb\3\2\2\2\25\u0107\3\2\2\2\27\u0113\3\2\2\2\31\u011e\3\2"+ + "\2\2\33\u0126\3\2\2\2\35\u0128\3\2\2\2\37\u012a\3\2\2\2!\u0130\3\2\2\2"+ + "#\u0137\3\2\2\2%\u013c\3\2\2\2\'\u0141\3\2\2\2)\u0147\3\2\2\2+\u014b\3"+ + "\2\2\2-\u0151\3\2\2\2/\u0157\3\2\2\2\61\u015e\3\2\2\2\63\u0160\3\2\2\2"+ + "\65\u0162\3\2\2\2\67\u0165\3\2\2\29\u0168\3\2\2\2;\u016b\3\2\2\2=\u016e"+ + "\3\2\2\2?\u0172\3\2\2\2A\u0176\3\2\2\2C\u017a\3\2\2\2E\u017f\3\2\2\2G"+ + "\u0184\3\2\2\2I\u0187\3\2\2\2K\u018a\3\2\2\2M\u018d\3\2\2\2O\u0190\3\2"+ + "\2\2Q\u0193\3\2\2\2S\u0195\3\2\2\2U\u0197\3\2\2\2W\u0199\3\2\2\2Y\u019b"+ + "\3\2\2\2[\u019e\3\2\2\2]\u01a0\3\2\2\2_\u01a2\3\2\2\2a\u01a5\3\2\2\2c"+ + "\u01a8\3\2\2\2e\u01ac\3\2\2\2g\u01b0\3\2\2\2i\u01b2\3\2\2\2k\u01b4\3\2"+ + "\2\2m\u01b7\3\2\2\2o\u01ba\3\2\2\2q\u01bd\3\2\2\2s\u01c0\3\2\2\2u\u01c2"+ + "\3\2\2\2w\u01c4\3\2\2\2y\u01c6\3\2\2\2{\u01ca\3\2\2\2}\u01cd\3\2\2\2\177"+ + "\u01d1\3\2\2\2\u0081\u01d5\3\2\2\2\u0083\u01d8\3\2\2\2\u0085\u01df\3\2"+ + "\2\2\u0087\u01e1\3\2\2\2\u0089\u01e3\3\2\2\2\u008b\u01e5\3\2\2\2\u008d"+ + "\u01e7\3\2\2\2\u008f\u01ea\3\2\2\2\u0091\u01ed\3\2\2\2\u0093\u01f0\3\2"+ + "\2\2\u0095\u01f3\3\2\2\2\u0097\u01f6\3\2\2\2\u0099\u01f9\3\2\2\2\u009b"+ + "\u01fc\3\2\2\2\u009d\u01ff\3\2\2\2\u009f\u0204\3\2\2\2\u00a1\u020a\3\2"+ + "\2\2\u00a3\u020f\3\2\2\2\u00a5\u0213\3\2\2\2\u00a7\u0216\3\2\2\2\u00a9"+ + "\u0218\3\2\2\2\u00ab\u021a\3\2\2\2\u00ad\u021c\3\2\2\2\u00af\u021f\3\2"+ + "\2\2\u00b1\u0224\3\2\2\2\u00b3\u022f\3\2\2\2\u00b5\u0238\3\2\2\2\u00b7"+ + "\u023d\3\2\2\2\u00b9\u0241\3\2\2\2\u00bb\u024f\3\2\2\2\u00bd\u0251\3\2"+ + "\2\2\u00bf\u0257\3\2\2\2\u00c1\u025d\3\2\2\2\u00c3\u0266\3\2\2\2\u00c5"+ + "\u0276\3\2\2\2\u00c7\u0278\3\2\2\2\u00c9\u0283\3\2\2\2\u00cb\u00cc\7\u0080"+ + "\2\2\u00cc\4\3\2\2\2\u00cd\u00ce\7<\2\2\u00ce\6\3\2\2\2\u00cf\u00d0\7"+ + "i\2\2\u00d0\u00d1\7q\2\2\u00d1\u00d2\7v\2\2\u00d2\u00d3\7q\2\2\u00d3\b"+ + "\3\2\2\2\u00d4\u00d5\7\'\2\2\u00d5\u00d6\7q\2\2\u00d6\u00d7\7w\2\2\u00d7"+ + "\u00d8\7v\2\2\u00d8\u00d9\7r\2\2\u00d9\u00da\7w\2\2\u00da\u00db\7v\2\2"+ + "\u00db\n\3\2\2\2\u00dc\u00dd\7\'\2\2\u00dd\u00de\7n\2\2\u00de\u00df\7"+ + "c\2\2\u00df\u00e0\7w\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2\7e\2\2\u00e2\u00e3"+ + "\7j\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7t\2\2\u00e5\f\3\2\2\2\u00e6\u00e7"+ + "\7\'\2\2\u00e7\u00e8\7|\2\2\u00e8\u00e9\7r\2\2\u00e9\16\3\2\2\2\u00ea"+ + "\u00eb\7\'\2\2\u00eb\u00ec\7c\2\2\u00ec\u00ed\7f\2\2\u00ed\u00ee\7f\2"+ + "\2\u00ee\u00ef\7t\2\2\u00ef\u00f0\7g\2\2\u00f0\u00f1\7u\2\2\u00f1\u00f2"+ + "\7u\2\2\u00f2\20\3\2\2\2\u00f3\u00f4\7\'\2\2\u00f4\u00f5\7k\2\2\u00f5"+ + "\u00f6\7o\2\2\u00f6\u00f7\7r\2\2\u00f7\u00f8\7q\2\2\u00f8\u00f9\7t\2\2"+ + "\u00f9\u00fa\7v\2\2\u00fa\22\3\2\2\2\u00fb\u00fc\7\'\2\2\u00fc\u00fd\7"+ + "d\2\2\u00fd\u00fe\7t\2\2\u00fe\u00ff\7g\2\2\u00ff\u0100\7c\2\2\u0100\u0101"+ + "\7m\2\2\u0101\u0102\7r\2\2\u0102\u0103\7q\2\2\u0103\u0104\7k\2\2\u0104"+ + "\u0105\7p\2\2\u0105\u0106\7v\2\2\u0106\24\3\2\2\2\u0107\u0108\7\'\2\2"+ + "\u0108\u0109\7c\2\2\u0109\u010a\7u\2\2\u010a\u010b\7o\2\2\u010b\u010c"+ + "\7k\2\2\u010c\u010d\7p\2\2\u010d\u010e\7e\2\2\u010e\u010f\7n\2\2\u010f"+ + "\u0110\7w\2\2\u0110\u0111\7f\2\2\u0111\u0112\7g\2\2\u0112\26\3\2\2\2\u0113"+ + "\u0114\7\'\2\2\u0114\u0115\7c\2\2\u0115\u0116\7u\2\2\u0116\u0117\7o\2"+ + "\2\u0117\u0118\7d\2\2\u0118\u0119\7k\2\2\u0119\u011a\7p\2\2\u011a\u011b"+ + "\7c\2\2\u011b\u011c\7t\2\2\u011c\u011d\7{\2\2\u011d\30\3\2\2\2\u011e\u011f"+ + "\7\'\2\2\u011f\u0120\7q\2\2\u0120\u0121\7r\2\2\u0121\u0122\7v\2\2\u0122"+ + "\u0123\7k\2\2\u0123\u0124\7q\2\2\u0124\u0125\7p\2\2\u0125\32\3\2\2\2\u0126"+ + "\u0127\7.\2\2\u0127\34\3\2\2\2\u0128\u0129\7?\2\2\u0129\36\3\2\2\2\u012a"+ + "\u012b\7e\2\2\u012b\u012c\7q\2\2\u012c\u012d\7p\2\2\u012d\u012e\7u\2\2"+ + "\u012e\u012f\7v\2\2\u012f \3\2\2\2\u0130\u0131\7o\2\2\u0131\u0132\7g\2"+ + "\2\u0132\u0133\7o\2\2\u0133\u0134\7q\2\2\u0134\u0135\7t\2\2\u0135\u0136"+ + "\7{\2\2\u0136\"\3\2\2\2\u0137\u0138\7d\2\2\u0138\u0139\7{\2\2\u0139\u013a"+ + "\7v\2\2\u013a\u013b\7g\2\2\u013b$\3\2\2\2\u013c\u013d\7y\2\2\u013d\u013e"+ + "\7q\2\2\u013e\u013f\7t\2\2\u013f\u0140\7f\2\2\u0140&\3\2\2\2\u0141\u0142"+ + "\7h\2\2\u0142\u0143\7n\2\2\u0143\u0144\7q\2\2\u0144\u0145\7c\2\2\u0145"+ + "\u0146\7v\2\2\u0146(\3\2\2\2\u0147\u0148\7u\2\2\u0148\u0149\7v\2\2\u0149"+ + "\u014a\7t\2\2\u014a*\3\2\2\2\u014b\u014c\7u\2\2\u014c\u014d\7v\2\2\u014d"+ + "\u014e\7t\2\2\u014e\u014f\7a\2\2\u014f\u0150\7r\2\2\u0150,\3\2\2\2\u0151"+ + "\u0152\7u\2\2\u0152\u0153\7v\2\2\u0153\u0154\7t\2\2\u0154\u0155\7a\2\2"+ + "\u0155\u0156\7u\2\2\u0156.\3\2\2\2\u0157\u0158\7u\2\2\u0158\u0159\7v\2"+ + "\2\u0159\u015a\7t\2\2\u015a\u015b\7a\2\2\u015b\u015c\7r\2\2\u015c\u015d"+ + "\7u\2\2\u015d\60\3\2\2\2\u015e\u015f\7]\2\2\u015f\62\3\2\2\2\u0160\u0161"+ + "\7_\2\2\u0161\64\3\2\2\2\u0162\u0163\7-\2\2\u0163\u0164\7?\2\2\u0164\66"+ + "\3\2\2\2\u0165\u0166\7/\2\2\u0166\u0167\7?\2\2\u01678\3\2\2\2\u0168\u0169"+ + "\7\61\2\2\u0169\u016a\7?\2\2\u016a:\3\2\2\2\u016b\u016c\7,\2\2\u016c\u016d"+ + "\7?\2\2\u016d<\3\2\2\2\u016e\u016f\7,\2\2\u016f\u0170\7,\2\2\u0170\u0171"+ + "\7?\2\2\u0171>\3\2\2\2\u0172\u0173\7>\2\2\u0173\u0174\7>\2\2\u0174\u0175"+ + "\7?\2\2\u0175@\3\2\2\2\u0176\u0177\7@\2\2\u0177\u0178\7@\2\2\u0178\u0179"+ + "\7?\2\2\u0179B\3\2\2\2\u017a\u017b\7>\2\2\u017b\u017c\7>\2\2\u017c\u017d"+ + "\7B\2\2\u017d\u017e\7?\2\2\u017eD\3\2\2\2\u017f\u0180\7@\2\2\u0180\u0181"+ + "\7@\2\2\u0181\u0182\7B\2\2\u0182\u0183\7?\2\2\u0183F\3\2\2\2\u0184\u0185"+ + "\7(\2\2\u0185\u0186\7?\2\2\u0186H\3\2\2\2\u0187\u0188\7~\2\2\u0188\u0189"+ + "\7?\2\2\u0189J\3\2\2\2\u018a\u018b\7`\2\2\u018b\u018c\7?\2\2\u018cL\3"+ + "\2\2\2\u018d\u018e\7-\2\2\u018e\u018f\7-\2\2\u018fN\3\2\2\2\u0190\u0191"+ + "\7/\2\2\u0191\u0192\7/\2\2\u0192P\3\2\2\2\u0193\u0194\7*\2\2\u0194R\3"+ + "\2\2\2\u0195\u0196\7+\2\2\u0196T\3\2\2\2\u0197\u0198\7-\2\2\u0198V\3\2"+ + "\2\2\u0199\u019a\7/\2\2\u019aX\3\2\2\2\u019b\u019c\7,\2\2\u019c\u019d"+ + "\7,\2\2\u019dZ\3\2\2\2\u019e\u019f\7,\2\2\u019f\\\3\2\2\2\u01a0\u01a1"+ + "\7\61\2\2\u01a1^\3\2\2\2\u01a2\u01a3\7>\2\2\u01a3\u01a4\7>\2\2\u01a4`"+ + "\3\2\2\2\u01a5\u01a6\7@\2\2\u01a6\u01a7\7@\2\2\u01a7b\3\2\2\2\u01a8\u01a9"+ + "\7>\2\2\u01a9\u01aa\7>\2\2\u01aa\u01ab\7B\2\2\u01abd\3\2\2\2\u01ac\u01ad"+ + "\7@\2\2\u01ad\u01ae\7@\2\2\u01ae\u01af\7B\2\2\u01aff\3\2\2\2\u01b0\u01b1"+ + "\7>\2\2\u01b1h\3\2\2\2\u01b2\u01b3\7@\2\2\u01b3j\3\2\2\2\u01b4\u01b5\7"+ + ">\2\2\u01b5\u01b6\7?\2\2\u01b6l\3\2\2\2\u01b7\u01b8\7@\2\2\u01b8\u01b9"+ + "\7?\2\2\u01b9n\3\2\2\2\u01ba\u01bb\7?\2\2\u01bb\u01bc\7?\2\2\u01bcp\3"+ + "\2\2\2\u01bd\u01be\7#\2\2\u01be\u01bf\7?\2\2\u01bfr\3\2\2\2\u01c0\u01c1"+ + "\7(\2\2\u01c1t\3\2\2\2\u01c2\u01c3\7`\2\2\u01c3v\3\2\2\2\u01c4\u01c5\7"+ + "~\2\2\u01c5x\3\2\2\2\u01c6\u01c7\7c\2\2\u01c7\u01c8\7p\2\2\u01c8\u01c9"+ + "\7f\2\2\u01c9z\3\2\2\2\u01ca\u01cb\7q\2\2\u01cb\u01cc\7t\2\2\u01cc|\3"+ + "\2\2\2\u01cd\u01ce\7z\2\2\u01ce\u01cf\7q\2\2\u01cf\u01d0\7t\2\2\u01d0"+ + "~\3\2\2\2\u01d1\u01d2\7p\2\2\u01d2\u01d3\7q\2\2\u01d3\u01d4\7v\2\2\u01d4"+ + "\u0080\3\2\2\2\u01d5\u01d6\7v\2\2\u01d6\u01d7\7q\2\2\u01d7\u0082\3\2\2"+ + "\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7g\2\2\u01da\u01db\7v\2\2\u01db\u01dc"+ + "\7w\2\2\u01dc\u01dd\7t\2\2\u01dd\u01de\7p\2\2\u01de\u0084\3\2\2\2\u01df"+ + "\u01e0\7\60\2\2\u01e0\u0086\3\2\2\2\u01e1\u01e2\7C\2\2\u01e2\u0088\3\2"+ + "\2\2\u01e3\u01e4\7Z\2\2\u01e4\u008a\3\2\2\2\u01e5\u01e6\7[\2\2\u01e6\u008c"+ + "\3\2\2\2\u01e7\u01e8\7C\2\2\u01e8\u01e9\7Z\2\2\u01e9\u008e\3\2\2\2\u01ea"+ + "\u01eb\7C\2\2\u01eb\u01ec\7[\2\2\u01ec\u0090\3\2\2\2\u01ed\u01ee\7Z\2"+ + "\2\u01ee\u01ef\7[\2\2\u01ef\u0092\3\2\2\2\u01f0\u01f1\7R\2\2\u01f1\u01f2"+ + "\7e\2\2\u01f2\u0094\3\2\2\2\u01f3\u01f4\7R\2\2\u01f4\u01f5\7k\2\2\u01f5"+ + "\u0096\3\2\2\2\u01f6\u01f7\7R\2\2\u01f7\u01f8\7|\2\2\u01f8\u0098\3\2\2"+ + "\2\u01f9\u01fa\7R\2\2\u01fa\u01fb\7p\2\2\u01fb\u009a\3\2\2\2\u01fc\u01fd"+ + "\7R\2\2\u01fd\u01fe\7x\2\2\u01fe\u009c\3\2\2\2\u01ff\u0200\7v\2\2\u0200"+ + "\u0201\7t\2\2\u0201\u0202\7w\2\2\u0202\u0203\7g\2\2\u0203\u009e\3\2\2"+ + "\2\u0204\u0205\7h\2\2\u0205\u0206\7c\2\2\u0206\u0207\7n\2\2\u0207\u0208"+ + "\7u\2\2\u0208\u0209\7g\2\2\u0209\u00a0\3\2\2\2\u020a\u020b\7\'\2\2\u020b"+ + "\u020c\7c\2\2\u020c\u020d\7u\2\2\u020d\u020e\7o\2\2\u020e\u00a2\3\2\2"+ + "\2\u020f\u0210\7u\2\2\u0210\u0211\7w\2\2\u0211\u0212\7d\2\2\u0212\u00a4"+ + "\3\2\2\2\u0213\u0214\7/\2\2\u0214\u0215\7@\2\2\u0215\u00a6\3\2\2\2\u0216"+ + "\u0217\7}\2\2\u0217\u00a8\3\2\2\2\u0218\u0219\7\177\2\2\u0219\u00aa\3"+ + "\2\2\2\u021a\u021b\7A\2\2\u021b\u00ac\3\2\2\2\u021c\u021d\7k\2\2\u021d"+ + "\u021e\7h\2\2\u021e\u00ae\3\2\2\2\u021f\u0220\7g\2\2\u0220\u0221\7n\2"+ + "\2\u0221\u0222\7u\2\2\u0222\u0223\7g\2\2\u0223\u00b0\3\2\2\2\u0224\u0228"+ + "\t\2\2\2\u0225\u0227\t\3\2\2\u0226\u0225\3\2\2\2\u0227\u022a\3\2\2\2\u0228"+ + "\u0226\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022b\3\2\2\2\u022a\u0228\3\2"+ + "\2\2\u022b\u022c\5\u00b3Z\2\u022c\u022d\3\2\2\2\u022d\u022e\bY\2\2\u022e"+ + "\u00b2\3\2\2\2\u022f\u0233\7=\2\2\u0230\u0232\n\2\2\2\u0231\u0230\3\2"+ + "\2\2\u0232\u0235\3\2\2\2\u0233\u0231\3\2\2\2\u0233\u0234\3\2\2\2\u0234"+ + "\u0236\3\2\2\2\u0235\u0233\3\2\2\2\u0236\u0237\bZ\2\2\u0237\u00b4\3\2"+ + "\2\2\u0238\u0239\t\3\2\2\u0239\u023a\3\2\2\2\u023a\u023b\b[\3\2\u023b"+ + "\u00b6\3\2\2\2\u023c\u023e\t\2\2\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2"+ + "\2\2\u023f\u023d\3\2\2\2\u023f\u0240\3\2\2\2\u0240\u00b8\3\2\2\2\u0241"+ + "\u0245\t\4\2\2\u0242\u0244\t\5\2\2\u0243\u0242\3\2\2\2\u0244\u0247\3\2"+ + "\2\2\u0245\u0243\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u00ba\3\2\2\2\u0247"+ + "\u0245\3\2\2\2\u0248\u0250\4\62;\2\u0249\u024b\4\63;\2\u024a\u024c\4\62"+ + ";\2\u024b\u024a\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u024b\3\2\2\2\u024d"+ + "\u024e\3\2\2\2\u024e\u0250\3\2\2\2\u024f\u0248\3\2\2\2\u024f\u0249\3\2"+ + "\2\2\u0250\u00bc\3\2\2\2\u0251\u0253\7&\2\2\u0252\u0254\t\6\2\2\u0253"+ + "\u0252\3\2\2\2\u0254\u0255\3\2\2\2\u0255\u0253\3\2\2\2\u0255\u0256\3\2"+ + "\2\2\u0256\u00be\3\2\2\2\u0257\u0259\7\'\2\2\u0258\u025a\4\62\63\2\u0259"+ + "\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u0259\3\2\2\2\u025b\u025c\3\2"+ + "\2\2\u025c\u00c0\3\2\2\2\u025d\u0263\5\u00c3b\2\u025e\u0260\t\7\2\2\u025f"+ + "\u0261\t\b\2\2\u0260\u025f\3\2\2\2\u0260\u0261\3\2\2\2\u0261\u0262\3\2"+ + "\2\2\u0262\u0264\5\u00c3b\2\u0263\u025e\3\2\2\2\u0263\u0264\3\2\2\2\u0264"+ + "\u00c2\3\2\2\2\u0265\u0267\4\62;\2\u0266\u0265\3\2\2\2\u0267\u0268\3\2"+ + "\2\2\u0268\u0266\3\2\2\2\u0268\u0269\3\2\2\2\u0269\u0270\3\2\2\2\u026a"+ + "\u026c\7\60\2\2\u026b\u026d\4\62;\2\u026c\u026b\3\2\2\2\u026d\u026e\3"+ + "\2\2\2\u026e\u026c\3\2\2\2\u026e\u026f\3\2\2\2\u026f\u0271\3\2\2\2\u0270"+ + "\u026a\3\2\2\2\u0270\u0271\3\2\2\2\u0271\u00c4\3\2\2\2\u0272\u0273\7^"+ + "\2\2\u0273\u0277\13\2\2\2\u0274\u0275\7^\2\2\u0275\u0277\5\u00b7\\\2\u0276"+ + "\u0272\3\2\2\2\u0276\u0274\3\2\2\2\u0277\u00c6\3\2\2\2\u0278\u027d\7$"+ + "\2\2\u0279\u027c\5\u00c5c\2\u027a\u027c\n\t\2\2\u027b\u0279\3\2\2\2\u027b"+ + "\u027a\3\2\2\2\u027c\u027f\3\2\2\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2"+ + "\2\2\u027e\u0280\3\2\2\2\u027f\u027d\3\2\2\2\u0280\u0281\7$\2\2\u0281"+ + "\u0282\bd\4\2\u0282\u00c8\3\2\2\2\u0283\u0284\7}\2\2\u0284\u0285\7}\2"+ + "\2\u0285\u0287\3\2\2\2\u0286\u0288\13\2\2\2\u0287\u0286\3\2\2\2\u0288"+ + "\u0289\3\2\2\2\u0289\u028a\3\2\2\2\u0289\u0287\3\2\2\2\u028a\u028b\3\2"+ + "\2\2\u028b\u028c\7\177\2\2\u028c\u028d\7\177\2\2\u028d\u028e\3\2\2\2\u028e"+ + "\u028f\be\5\2\u028f\u00ca\3\2\2\2\25\2\u0228\u0233\u023f\u0245\u024d\u024f"+ + "\u0253\u0255\u025b\u0260\u0263\u0268\u026e\u0270\u0276\u027b\u027d\u0289"+ + "\6\2\3\2\b\2\2\3d\2\3e\3"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/il65/src/il65/parser/il65Lexer.tokens b/il65/src/il65/parser/il65Lexer.tokens index 9a612497d..022c30d33 100644 --- a/il65/src/il65/parser/il65Lexer.tokens +++ b/il65/src/il65/parser/il65Lexer.tokens @@ -81,97 +81,105 @@ T__79=80 T__80=81 T__81=82 T__82=83 -LINECOMMENT=84 -COMMENT=85 -WS=86 -EOL=87 -NAME=88 -DEC_INTEGER=89 -HEX_INTEGER=90 -BIN_INTEGER=91 -FLOAT_NUMBER=92 -STRING=93 -INLINEASMBLOCK=94 +T__83=84 +T__84=85 +T__85=86 +T__86=87 +LINECOMMENT=88 +COMMENT=89 +WS=90 +EOL=91 +NAME=92 +DEC_INTEGER=93 +HEX_INTEGER=94 +BIN_INTEGER=95 +FLOAT_NUMBER=96 +STRING=97 +INLINEASMBLOCK=98 '~'=1 -'{'=2 -'}'=3 -':'=4 -'goto'=5 -'%output'=6 -'%launcher'=7 -'%zp'=8 -'%address'=9 -'%import'=10 -'%breakpoint'=11 -'%asminclude'=12 -'%asmbinary'=13 -'%option'=14 -','=15 -'='=16 -'const'=17 -'memory'=18 -'byte'=19 -'word'=20 -'float'=21 -'str'=22 -'str_p'=23 -'str_s'=24 -'str_ps'=25 -'['=26 -']'=27 -'+='=28 -'-='=29 -'/='=30 -'*='=31 -'**='=32 -'<<='=33 -'>>='=34 -'<<@='=35 -'>>@='=36 -'&='=37 -'|='=38 -'^='=39 -'++'=40 -'--'=41 -'('=42 -')'=43 -'+'=44 -'-'=45 -'**'=46 -'*'=47 -'/'=48 -'<<'=49 -'>>'=50 -'<<@'=51 -'>>@'=52 -'<'=53 -'>'=54 -'<='=55 -'>='=56 -'=='=57 -'!='=58 -'&'=59 -'^'=60 -'|'=61 -'and'=62 -'or'=63 -'xor'=64 -'not'=65 -'to'=66 -'return'=67 -'.'=68 -'A'=69 -'X'=70 -'Y'=71 -'AX'=72 -'AY'=73 -'XY'=74 -'SC'=75 -'SI'=76 -'SZ'=77 +':'=2 +'goto'=3 +'%output'=4 +'%launcher'=5 +'%zp'=6 +'%address'=7 +'%import'=8 +'%breakpoint'=9 +'%asminclude'=10 +'%asmbinary'=11 +'%option'=12 +','=13 +'='=14 +'const'=15 +'memory'=16 +'byte'=17 +'word'=18 +'float'=19 +'str'=20 +'str_p'=21 +'str_s'=22 +'str_ps'=23 +'['=24 +']'=25 +'+='=26 +'-='=27 +'/='=28 +'*='=29 +'**='=30 +'<<='=31 +'>>='=32 +'<<@='=33 +'>>@='=34 +'&='=35 +'|='=36 +'^='=37 +'++'=38 +'--'=39 +'('=40 +')'=41 +'+'=42 +'-'=43 +'**'=44 +'*'=45 +'/'=46 +'<<'=47 +'>>'=48 +'<<@'=49 +'>>@'=50 +'<'=51 +'>'=52 +'<='=53 +'>='=54 +'=='=55 +'!='=56 +'&'=57 +'^'=58 +'|'=59 +'and'=60 +'or'=61 +'xor'=62 +'not'=63 +'to'=64 +'return'=65 +'.'=66 +'A'=67 +'X'=68 +'Y'=69 +'AX'=70 +'AY'=71 +'XY'=72 +'Pc'=73 +'Pi'=74 +'Pz'=75 +'Pn'=76 +'Pv'=77 'true'=78 'false'=79 '%asm'=80 'sub'=81 '->'=82 -'?'=83 +'{'=83 +'}'=84 +'?'=85 +'if'=86 +'else'=87 diff --git a/il65/src/il65/parser/il65Parser.java b/il65/src/il65/parser/il65Parser.java index fb436274d..3bfb4f06a 100644 --- a/il65/src/il65/parser/il65Parser.java +++ b/il65/src/il65/parser/il65Parser.java @@ -28,9 +28,9 @@ public class il65Parser extends Parser { T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66, T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73, T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, T__79=80, - T__80=81, T__81=82, T__82=83, LINECOMMENT=84, COMMENT=85, WS=86, EOL=87, - NAME=88, DEC_INTEGER=89, HEX_INTEGER=90, BIN_INTEGER=91, FLOAT_NUMBER=92, - STRING=93, INLINEASMBLOCK=94; + T__80=81, T__81=82, T__82=83, T__83=84, T__84=85, T__85=86, T__86=87, + LINECOMMENT=88, COMMENT=89, WS=90, EOL=91, NAME=92, DEC_INTEGER=93, HEX_INTEGER=94, + BIN_INTEGER=95, FLOAT_NUMBER=96, STRING=97, INLINEASMBLOCK=98; public static final int RULE_module = 0, RULE_modulestatement = 1, RULE_block = 2, RULE_statement = 3, RULE_labeldef = 4, RULE_unconditionaljump = 5, RULE_directive = 6, RULE_directivearg = 7, @@ -41,9 +41,9 @@ public class il65Parser extends Parser { RULE_returnstmt = 22, RULE_identifier = 23, RULE_scoped_identifier = 24, RULE_register = 25, RULE_integerliteral = 26, RULE_booleanliteral = 27, RULE_arrayliteral = 28, RULE_stringliteral = 29, RULE_floatliteral = 30, - RULE_literalvalue = 31, RULE_inlineasm = 32, RULE_subroutine = 33, RULE_sub_body = 34, + RULE_literalvalue = 31, RULE_inlineasm = 32, RULE_subroutine = 33, RULE_statement_block = 34, RULE_sub_address = 35, RULE_sub_params = 36, RULE_sub_param = 37, RULE_sub_returns = 38, - RULE_sub_return = 39; + RULE_sub_return = 39, RULE_if_stmt = 40, RULE_else_part = 41; public static final String[] ruleNames = { "module", "modulestatement", "block", "statement", "labeldef", "unconditionaljump", "directive", "directivearg", "vardecl", "varinitializer", "constdecl", @@ -51,22 +51,22 @@ public class il65Parser extends Parser { "assign_target", "postincrdecr", "expression", "functioncall", "functioncall_stmt", "expression_list", "returnstmt", "identifier", "scoped_identifier", "register", "integerliteral", "booleanliteral", "arrayliteral", "stringliteral", "floatliteral", - "literalvalue", "inlineasm", "subroutine", "sub_body", "sub_address", - "sub_params", "sub_param", "sub_returns", "sub_return" + "literalvalue", "inlineasm", "subroutine", "statement_block", "sub_address", + "sub_params", "sub_param", "sub_returns", "sub_return", "if_stmt", "else_part" }; private static final String[] _LITERAL_NAMES = { - null, "'~'", "'{'", "'}'", "':'", "'goto'", "'%output'", "'%launcher'", - "'%zp'", "'%address'", "'%import'", "'%breakpoint'", "'%asminclude'", - "'%asmbinary'", "'%option'", "','", "'='", "'const'", "'memory'", "'byte'", - "'word'", "'float'", "'str'", "'str_p'", "'str_s'", "'str_ps'", "'['", - "']'", "'+='", "'-='", "'/='", "'*='", "'**='", "'<<='", "'>>='", "'<<@='", - "'>>@='", "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'", - "'-'", "'**'", "'*'", "'/'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", - "'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", - "'xor'", "'not'", "'to'", "'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'", - "'AY'", "'XY'", "'SC'", "'SI'", "'SZ'", "'true'", "'false'", "'%asm'", - "'sub'", "'->'", "'?'" + null, "'~'", "':'", "'goto'", "'%output'", "'%launcher'", "'%zp'", "'%address'", + "'%import'", "'%breakpoint'", "'%asminclude'", "'%asmbinary'", "'%option'", + "','", "'='", "'const'", "'memory'", "'byte'", "'word'", "'float'", "'str'", + "'str_p'", "'str_s'", "'str_ps'", "'['", "']'", "'+='", "'-='", "'/='", + "'*='", "'**='", "'<<='", "'>>='", "'<<@='", "'>>@='", "'&='", "'|='", + "'^='", "'++'", "'--'", "'('", "')'", "'+'", "'-'", "'**'", "'*'", "'/'", + "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='", + "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", "'xor'", "'not'", "'to'", + "'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'", "'Pc'", + "'Pi'", "'Pz'", "'Pn'", "'Pv'", "'true'", "'false'", "'%asm'", "'sub'", + "'->'", "'{'", "'}'", "'?'", "'if'", "'else'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, null, null, null, null, null, null, null, @@ -76,8 +76,9 @@ public class il65Parser extends Parser { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", - "BIN_INTEGER", "FLOAT_NUMBER", "STRING", "INLINEASMBLOCK" + null, null, null, null, "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", + "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING", + "INLINEASMBLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -153,15 +154,17 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(84); + setState(88); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13))) != 0) || _la==EOL) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11))) != 0) || _la==EOL) { { - setState(82); + setState(86); _errHandler.sync(this); switch (_input.LA(1)) { case T__0: + case T__3: + case T__4: case T__5: case T__6: case T__7: @@ -169,16 +172,14 @@ public class il65Parser extends Parser { case T__9: case T__10: case T__11: - case T__12: - case T__13: { - setState(80); + setState(84); modulestatement(); } break; case EOL: { - setState(81); + setState(85); match(EOL); } break; @@ -186,11 +187,11 @@ public class il65Parser extends Parser { throw new NoViableAltException(this); } } - setState(86); + setState(90); _errHandler.sync(this); _la = _input.LA(1); } - setState(87); + setState(91); match(EOF); } } @@ -222,9 +223,11 @@ public class il65Parser extends Parser { ModulestatementContext _localctx = new ModulestatementContext(_ctx, getState()); enterRule(_localctx, 2, RULE_modulestatement); try { - setState(91); + setState(95); _errHandler.sync(this); switch (_input.LA(1)) { + case T__3: + case T__4: case T__5: case T__6: case T__7: @@ -232,18 +235,16 @@ public class il65Parser extends Parser { case T__9: case T__10: case T__11: - case T__12: - case T__13: enterOuterAlt(_localctx, 1); { - setState(89); + setState(93); directive(); } break; case T__0: enterOuterAlt(_localctx, 2); { - setState(90); + setState(94); block(); } break; @@ -266,19 +267,13 @@ public class il65Parser extends Parser { public IdentifierContext identifier() { return getRuleContext(IdentifierContext.class,0); } - public List EOL() { return getTokens(il65Parser.EOL); } - public TerminalNode EOL(int i) { - return getToken(il65Parser.EOL, i); + public Statement_blockContext statement_block() { + return getRuleContext(Statement_blockContext.class,0); } + public TerminalNode EOL() { return getToken(il65Parser.EOL, 0); } public IntegerliteralContext integerliteral() { return getRuleContext(IntegerliteralContext.class,0); } - public List statement() { - return getRuleContexts(StatementContext.class); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } public BlockContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -292,86 +287,23 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(93); + setState(97); match(T__0); - setState(94); + setState(98); identifier(); - setState(96); + setState(100); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 89)) & ~0x3f) == 0 && ((1L << (_la - 89)) & ((1L << (DEC_INTEGER - 89)) | (1L << (HEX_INTEGER - 89)) | (1L << (BIN_INTEGER - 89)))) != 0)) { + if (((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (DEC_INTEGER - 93)) | (1L << (HEX_INTEGER - 93)) | (1L << (BIN_INTEGER - 93)))) != 0)) { { - setState(95); + setState(99); integerliteral(); } } - setState(98); - match(T__1); - setState(99); - match(EOL); - setState(104); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)) | (1L << (T__79 - 67)) | (1L << (T__80 - 67)) | (1L << (EOL - 67)) | (1L << (NAME - 67)))) != 0)) { - { - setState(102); - _errHandler.sync(this); - switch (_input.LA(1)) { - case T__4: - case T__5: - case T__6: - case T__7: - case T__8: - case T__9: - case T__10: - case T__11: - case T__12: - case T__13: - case T__16: - case T__17: - case T__18: - case T__19: - case T__20: - case T__21: - case T__22: - case T__23: - case T__24: - case T__66: - case T__68: - case T__69: - case T__70: - case T__71: - case T__72: - case T__73: - case T__74: - case T__75: - case T__76: - case T__79: - case T__80: - case NAME: - { - setState(100); - statement(); - } - break; - case EOL: - { - setState(101); - match(EOL); - } - break; - default: - throw new NoViableAltException(this); - } - } - setState(106); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(107); - match(T__2); - setState(108); + setState(102); + statement_block(); + setState(103); match(EOL); } } @@ -417,6 +349,9 @@ public class il65Parser extends Parser { public Functioncall_stmtContext functioncall_stmt() { return getRuleContext(Functioncall_stmtContext.class,0); } + public If_stmtContext if_stmt() { + return getRuleContext(If_stmtContext.class,0); + } public SubroutineContext subroutine() { return getRuleContext(SubroutineContext.class,0); } @@ -439,104 +374,111 @@ public class il65Parser extends Parser { StatementContext _localctx = new StatementContext(_ctx, getState()); enterRule(_localctx, 6, RULE_statement); try { - setState(124); + setState(120); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(110); + setState(105); directive(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(111); + setState(106); varinitializer(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(112); + setState(107); vardecl(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(113); + setState(108); constdecl(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(114); + setState(109); memoryvardecl(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(115); + setState(110); assignment(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(116); + setState(111); augassignment(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(117); + setState(112); unconditionaljump(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(118); + setState(113); postincrdecr(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(119); + setState(114); functioncall_stmt(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(120); - subroutine(); + setState(115); + if_stmt(); } break; case 12: enterOuterAlt(_localctx, 12); { - setState(121); - inlineasm(); + setState(116); + subroutine(); } break; case 13: enterOuterAlt(_localctx, 13); { - setState(122); - labeldef(); + setState(117); + inlineasm(); } break; case 14: enterOuterAlt(_localctx, 14); { - setState(123); + setState(118); + labeldef(); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(119); returnstmt(); } break; @@ -569,10 +511,10 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(126); + setState(122); identifier(); - setState(127); - match(T__3); + setState(123); + match(T__1); } } catch (RecognitionException re) { @@ -608,26 +550,26 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { + setState(125); + match(T__2); setState(129); - match(T__4); - setState(133); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: { - setState(130); + setState(126); integerliteral(); } break; case 2: { - setState(131); + setState(127); identifier(); } break; case 3: { - setState(132); + setState(128); scoped_identifier(); } break; @@ -666,10 +608,10 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(135); + setState(131); ((DirectiveContext)_localctx).directivename = _input.LT(1); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11))) != 0)) ) { ((DirectiveContext)_localctx).directivename = (Token)_errHandler.recoverInline(this); } else { @@ -677,17 +619,17 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(147); + setState(143); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: { - setState(137); + setState(133); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: { - setState(136); + setState(132); directivearg(); } break; @@ -696,21 +638,21 @@ public class il65Parser extends Parser { break; case 2: { - setState(139); + setState(135); directivearg(); - setState(144); + setState(140); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__14) { + while (_la==T__12) { { { - setState(140); - match(T__14); - setState(141); + setState(136); + match(T__12); + setState(137); directivearg(); } } - setState(146); + setState(142); _errHandler.sync(this); _la = _input.LA(1); } @@ -750,20 +692,20 @@ public class il65Parser extends Parser { DirectiveargContext _localctx = new DirectiveargContext(_ctx, getState()); enterRule(_localctx, 14, RULE_directivearg); try { - setState(152); + setState(148); _errHandler.sync(this); switch (_input.LA(1)) { case STRING: enterOuterAlt(_localctx, 1); { - setState(149); + setState(145); stringliteral(); } break; case NAME: enterOuterAlt(_localctx, 2); { - setState(150); + setState(146); identifier(); } break; @@ -772,7 +714,7 @@ public class il65Parser extends Parser { case BIN_INTEGER: enterOuterAlt(_localctx, 3); { - setState(151); + setState(147); integerliteral(); } break; @@ -814,19 +756,19 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(154); + setState(150); datatype(); - setState(156); + setState(152); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__23) { { - setState(155); + setState(151); arrayspec(); } } - setState(158); + setState(154); identifier(); } } @@ -867,23 +809,23 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(160); + setState(156); datatype(); - setState(162); + setState(158); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__25) { + if (_la==T__23) { { - setState(161); + setState(157); arrayspec(); } } - setState(164); + setState(160); identifier(); - setState(165); - match(T__15); - setState(166); + setState(161); + match(T__13); + setState(162); expression(0); } } @@ -914,9 +856,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(168); - match(T__16); - setState(169); + setState(164); + match(T__14); + setState(165); varinitializer(); } } @@ -947,9 +889,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(171); - match(T__17); - setState(172); + setState(167); + match(T__15); + setState(168); varinitializer(); } } @@ -978,9 +920,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(174); + setState(170); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -1021,24 +963,24 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(176); - match(T__25); - setState(177); + setState(172); + match(T__23); + setState(173); expression(0); - setState(180); + setState(176); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__14) { + if (_la==T__12) { { - setState(178); - match(T__14); - setState(179); + setState(174); + match(T__12); + setState(175); expression(0); } } - setState(182); - match(T__26); + setState(178); + match(T__24); } } catch (RecognitionException re) { @@ -1071,11 +1013,11 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(184); + setState(180); assign_target(); - setState(185); - match(T__15); - setState(186); + setState(181); + match(T__13); + setState(182); expression(0); } } @@ -1111,12 +1053,12 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(188); + setState(184); assign_target(); - setState(189); + setState(185); ((AugassignmentContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36))) != 0)) ) { ((AugassignmentContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { @@ -1124,7 +1066,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(190); + setState(186); expression(0); } } @@ -1159,27 +1101,27 @@ public class il65Parser extends Parser { Assign_targetContext _localctx = new Assign_targetContext(_ctx, getState()); enterRule(_localctx, 32, RULE_assign_target); try { - setState(195); + setState(191); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(192); + setState(188); register(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(193); + setState(189); identifier(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(194); + setState(190); scoped_identifier(); } break; @@ -1214,12 +1156,12 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(197); + setState(193); assign_target(); - setState(198); + setState(194); ((PostincrdecrContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); - if ( !(_la==T__39 || _la==T__40) ) { + if ( !(_la==T__37 || _la==T__38) ) { ((PostincrdecrContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { @@ -1293,31 +1235,31 @@ public class il65Parser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(214); + setState(210); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(201); - match(T__41); - setState(202); + setState(197); + match(T__39); + setState(198); expression(0); - setState(203); - match(T__42); + setState(199); + match(T__40); } break; case 2: { - setState(205); + setState(201); functioncall(); } break; case 3: { - setState(206); + setState(202); ((ExpressionContext)_localctx).prefix = _input.LT(1); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__43) | (1L << T__44))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__41) | (1L << T__42))) != 0)) ) { ((ExpressionContext)_localctx).prefix = (Token)_errHandler.recoverInline(this); } else { @@ -1325,66 +1267,66 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(207); + setState(203); expression(19); } break; case 4: { - setState(208); - ((ExpressionContext)_localctx).prefix = match(T__64); - setState(209); + setState(204); + ((ExpressionContext)_localctx).prefix = match(T__62); + setState(205); expression(6); } break; case 5: { - setState(210); + setState(206); literalvalue(); } break; case 6: { - setState(211); + setState(207); register(); } break; case 7: { - setState(212); + setState(208); identifier(); } break; case 8: { - setState(213); + setState(209); scoped_identifier(); } break; } _ctx.stop = _input.LT(-1); - setState(259); + setState(255); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(257); + setState(253); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: { _localctx = new ExpressionContext(_parentctx, _parentState); _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(216); + setState(212); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(217); - ((ExpressionContext)_localctx).bop = match(T__45); - setState(218); + setState(213); + ((ExpressionContext)_localctx).bop = match(T__43); + setState(214); ((ExpressionContext)_localctx).right = expression(19); } break; @@ -1394,12 +1336,12 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(219); + setState(215); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(220); + setState(216); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); - if ( !(_la==T__46 || _la==T__47) ) { + if ( !(_la==T__44 || _la==T__45) ) { ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this); } else { @@ -1407,7 +1349,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(221); + setState(217); ((ExpressionContext)_localctx).right = expression(18); } break; @@ -1417,12 +1359,12 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(222); + setState(218); if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(223); + setState(219); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); - if ( !(_la==T__43 || _la==T__44) ) { + if ( !(_la==T__41 || _la==T__42) ) { ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this); } else { @@ -1430,7 +1372,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(224); + setState(220); ((ExpressionContext)_localctx).right = expression(17); } break; @@ -1440,12 +1382,12 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(225); + setState(221); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(226); + setState(222); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49))) != 0)) ) { ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this); } else { @@ -1453,7 +1395,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(227); + setState(223); ((ExpressionContext)_localctx).right = expression(16); } break; @@ -1463,12 +1405,12 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(228); + setState(224); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(229); + setState(225); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53))) != 0)) ) { ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this); } else { @@ -1476,7 +1418,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(230); + setState(226); ((ExpressionContext)_localctx).right = expression(15); } break; @@ -1486,12 +1428,12 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(231); + setState(227); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(232); + setState(228); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); - if ( !(_la==T__56 || _la==T__57) ) { + if ( !(_la==T__54 || _la==T__55) ) { ((ExpressionContext)_localctx).bop = (Token)_errHandler.recoverInline(this); } else { @@ -1499,7 +1441,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(233); + setState(229); ((ExpressionContext)_localctx).right = expression(14); } break; @@ -1509,11 +1451,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(234); + setState(230); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(235); - ((ExpressionContext)_localctx).bop = match(T__58); - setState(236); + setState(231); + ((ExpressionContext)_localctx).bop = match(T__56); + setState(232); ((ExpressionContext)_localctx).right = expression(13); } break; @@ -1523,11 +1465,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(237); + setState(233); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(238); - ((ExpressionContext)_localctx).bop = match(T__59); - setState(239); + setState(234); + ((ExpressionContext)_localctx).bop = match(T__57); + setState(235); ((ExpressionContext)_localctx).right = expression(12); } break; @@ -1537,11 +1479,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(240); + setState(236); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(241); - ((ExpressionContext)_localctx).bop = match(T__60); - setState(242); + setState(237); + ((ExpressionContext)_localctx).bop = match(T__58); + setState(238); ((ExpressionContext)_localctx).right = expression(11); } break; @@ -1551,11 +1493,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(243); + setState(239); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(244); - ((ExpressionContext)_localctx).bop = match(T__61); - setState(245); + setState(240); + ((ExpressionContext)_localctx).bop = match(T__59); + setState(241); ((ExpressionContext)_localctx).right = expression(10); } break; @@ -1565,11 +1507,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(246); + setState(242); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(247); - ((ExpressionContext)_localctx).bop = match(T__62); - setState(248); + setState(243); + ((ExpressionContext)_localctx).bop = match(T__60); + setState(244); ((ExpressionContext)_localctx).right = expression(9); } break; @@ -1579,11 +1521,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(249); + setState(245); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(250); - ((ExpressionContext)_localctx).bop = match(T__63); - setState(251); + setState(246); + ((ExpressionContext)_localctx).bop = match(T__61); + setState(247); ((ExpressionContext)_localctx).right = expression(8); } break; @@ -1593,11 +1535,11 @@ public class il65Parser extends Parser { _localctx.rangefrom = _prevctx; _localctx.rangefrom = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(252); + setState(248); if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(253); - match(T__65); - setState(254); + setState(249); + match(T__63); + setState(250); ((ExpressionContext)_localctx).rangeto = expression(6); } break; @@ -1605,18 +1547,18 @@ public class il65Parser extends Parser { { _localctx = new ExpressionContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(255); + setState(251); if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(256); + setState(252); arrayspec(); } break; } } } - setState(261); + setState(257); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,18,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); } } } @@ -1654,36 +1596,36 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(264); + setState(260); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: { - setState(262); + setState(258); identifier(); } break; case 2: { - setState(263); + setState(259); scoped_identifier(); } break; } - setState(266); - match(T__41); - setState(268); + setState(262); + match(T__39); + setState(264); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__25) | (1L << T__41) | (1L << T__43) | (1L << T__44))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (T__64 - 65)) | (1L << (T__68 - 65)) | (1L << (T__69 - 65)) | (1L << (T__70 - 65)) | (1L << (T__71 - 65)) | (1L << (T__72 - 65)) | (1L << (T__73 - 65)) | (1L << (T__74 - 65)) | (1L << (T__75 - 65)) | (1L << (T__76 - 65)) | (1L << (T__77 - 65)) | (1L << (T__78 - 65)) | (1L << (NAME - 65)) | (1L << (DEC_INTEGER - 65)) | (1L << (HEX_INTEGER - 65)) | (1L << (BIN_INTEGER - 65)) | (1L << (FLOAT_NUMBER - 65)) | (1L << (STRING - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__23) | (1L << T__39) | (1L << T__41) | (1L << T__42) | (1L << T__62))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)) | (1L << (T__77 - 67)) | (1L << (T__78 - 67)) | (1L << (NAME - 67)) | (1L << (DEC_INTEGER - 67)) | (1L << (HEX_INTEGER - 67)) | (1L << (BIN_INTEGER - 67)) | (1L << (FLOAT_NUMBER - 67)) | (1L << (STRING - 67)))) != 0)) { { - setState(267); + setState(263); expression_list(); } } - setState(270); - match(T__42); + setState(266); + match(T__40); } } catch (RecognitionException re) { @@ -1720,36 +1662,36 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(274); + setState(270); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { case 1: { - setState(272); + setState(268); identifier(); } break; case 2: { - setState(273); + setState(269); scoped_identifier(); } break; } - setState(276); - match(T__41); - setState(278); + setState(272); + match(T__39); + setState(274); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__25) | (1L << T__41) | (1L << T__43) | (1L << T__44))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (T__64 - 65)) | (1L << (T__68 - 65)) | (1L << (T__69 - 65)) | (1L << (T__70 - 65)) | (1L << (T__71 - 65)) | (1L << (T__72 - 65)) | (1L << (T__73 - 65)) | (1L << (T__74 - 65)) | (1L << (T__75 - 65)) | (1L << (T__76 - 65)) | (1L << (T__77 - 65)) | (1L << (T__78 - 65)) | (1L << (NAME - 65)) | (1L << (DEC_INTEGER - 65)) | (1L << (HEX_INTEGER - 65)) | (1L << (BIN_INTEGER - 65)) | (1L << (FLOAT_NUMBER - 65)) | (1L << (STRING - 65)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__23) | (1L << T__39) | (1L << T__41) | (1L << T__42) | (1L << T__62))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)) | (1L << (T__77 - 67)) | (1L << (T__78 - 67)) | (1L << (NAME - 67)) | (1L << (DEC_INTEGER - 67)) | (1L << (HEX_INTEGER - 67)) | (1L << (BIN_INTEGER - 67)) | (1L << (FLOAT_NUMBER - 67)) | (1L << (STRING - 67)))) != 0)) { { - setState(277); + setState(273); expression_list(); } } - setState(280); - match(T__42); + setState(276); + match(T__40); } } catch (RecognitionException re) { @@ -1783,21 +1725,21 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(282); + setState(278); expression(0); - setState(287); + setState(283); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__14) { + while (_la==T__12) { { { - setState(283); - match(T__14); - setState(284); + setState(279); + match(T__12); + setState(280); expression(0); } } - setState(289); + setState(285); _errHandler.sync(this); _la = _input.LA(1); } @@ -1830,14 +1772,14 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(290); - match(T__66); - setState(292); + setState(286); + match(T__64); + setState(288); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { case 1: { - setState(291); + setState(287); expression_list(); } break; @@ -1869,7 +1811,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(294); + setState(290); match(NAME); } } @@ -1902,9 +1844,9 @@ public class il65Parser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(296); + setState(292); match(NAME); - setState(299); + setState(295); _errHandler.sync(this); _alt = 1; do { @@ -1912,9 +1854,9 @@ public class il65Parser extends Parser { case 1: { { - setState(297); - match(T__67); - setState(298); + setState(293); + match(T__65); + setState(294); match(NAME); } } @@ -1922,9 +1864,9 @@ public class il65Parser extends Parser { default: throw new NoViableAltException(this); } - setState(301); + setState(297); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,25,_ctx); + _alt = getInterpreter().adaptivePredict(_input,23,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1953,9 +1895,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(303); + setState(299); _la = _input.LA(1); - if ( !(((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (T__68 - 69)) | (1L << (T__69 - 69)) | (1L << (T__70 - 69)) | (1L << (T__71 - 69)) | (1L << (T__72 - 69)) | (1L << (T__73 - 69)) | (1L << (T__74 - 69)) | (1L << (T__75 - 69)) | (1L << (T__76 - 69)))) != 0)) ) { + if ( !(((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -1993,9 +1935,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(305); + setState(301); _la = _input.LA(1); - if ( !(((((_la - 89)) & ~0x3f) == 0 && ((1L << (_la - 89)) & ((1L << (DEC_INTEGER - 89)) | (1L << (HEX_INTEGER - 89)) | (1L << (BIN_INTEGER - 89)))) != 0)) ) { + if ( !(((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (DEC_INTEGER - 93)) | (1L << (HEX_INTEGER - 93)) | (1L << (BIN_INTEGER - 93)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -2030,7 +1972,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(307); + setState(303); _la = _input.LA(1); if ( !(_la==T__77 || _la==T__78) ) { _errHandler.recoverInline(this); @@ -2073,28 +2015,28 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(309); - match(T__25); - setState(310); + setState(305); + match(T__23); + setState(306); expression(0); - setState(315); + setState(311); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__14) { + while (_la==T__12) { { { - setState(311); - match(T__14); - setState(312); + setState(307); + match(T__12); + setState(308); expression(0); } } - setState(317); + setState(313); _errHandler.sync(this); _la = _input.LA(1); } - setState(318); - match(T__26); + setState(314); + match(T__24); } } catch (RecognitionException re) { @@ -2122,7 +2064,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(320); + setState(316); match(STRING); } } @@ -2151,7 +2093,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(322); + setState(318); match(FLOAT_NUMBER); } } @@ -2192,7 +2134,7 @@ public class il65Parser extends Parser { LiteralvalueContext _localctx = new LiteralvalueContext(_ctx, getState()); enterRule(_localctx, 62, RULE_literalvalue); try { - setState(329); + setState(325); _errHandler.sync(this); switch (_input.LA(1)) { case DEC_INTEGER: @@ -2200,7 +2142,7 @@ public class il65Parser extends Parser { case BIN_INTEGER: enterOuterAlt(_localctx, 1); { - setState(324); + setState(320); integerliteral(); } break; @@ -2208,28 +2150,28 @@ public class il65Parser extends Parser { case T__78: enterOuterAlt(_localctx, 2); { - setState(325); + setState(321); booleanliteral(); } break; - case T__25: + case T__23: enterOuterAlt(_localctx, 3); { - setState(326); + setState(322); arrayliteral(); } break; case STRING: enterOuterAlt(_localctx, 4); { - setState(327); + setState(323); stringliteral(); } break; case FLOAT_NUMBER: enterOuterAlt(_localctx, 5); { - setState(328); + setState(324); floatliteral(); } break; @@ -2262,9 +2204,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(331); + setState(327); match(T__79); - setState(332); + setState(328); match(INLINEASMBLOCK); } } @@ -2286,15 +2228,16 @@ public class il65Parser extends Parser { public Sub_addressContext sub_address() { return getRuleContext(Sub_addressContext.class,0); } - public Sub_bodyContext sub_body() { - return getRuleContext(Sub_bodyContext.class,0); - } public Sub_paramsContext sub_params() { return getRuleContext(Sub_paramsContext.class,0); } public Sub_returnsContext sub_returns() { return getRuleContext(Sub_returnsContext.class,0); } + public Statement_blockContext statement_block() { + return getRuleContext(Statement_blockContext.class,0); + } + public TerminalNode EOL() { return getToken(il65Parser.EOL, 0); } public SubroutineContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2308,53 +2251,57 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(334); + setState(330); match(T__80); - setState(335); + setState(331); identifier(); - setState(336); - match(T__41); - setState(338); + setState(332); + match(T__39); + setState(334); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(337); + setState(333); sub_params(); } } - setState(340); - match(T__42); - setState(341); + setState(336); + match(T__40); + setState(337); match(T__81); - setState(342); - match(T__41); - setState(344); + setState(338); + match(T__39); + setState(340); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (T__68 - 69)) | (1L << (T__69 - 69)) | (1L << (T__70 - 69)) | (1L << (T__71 - 69)) | (1L << (T__72 - 69)) | (1L << (T__73 - 69)) | (1L << (T__74 - 69)) | (1L << (T__75 - 69)) | (1L << (T__76 - 69)) | (1L << (T__82 - 69)))) != 0)) { + if (((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)) | (1L << (T__84 - 67)))) != 0)) { { - setState(343); + setState(339); sub_returns(); } } - setState(346); - match(T__42); - setState(349); + setState(342); + match(T__40); + setState(347); _errHandler.sync(this); switch (_input.LA(1)) { - case T__15: + case T__13: { - setState(347); + setState(343); sub_address(); } break; - case T__1: + case T__82: { - setState(348); - sub_body(); + { + setState(344); + statement_block(); + setState(345); + match(EOL); + } } break; default: @@ -2373,7 +2320,7 @@ public class il65Parser extends Parser { return _localctx; } - public static class Sub_bodyContext extends ParserRuleContext { + public static class Statement_blockContext extends ParserRuleContext { public List EOL() { return getTokens(il65Parser.EOL); } public TerminalNode EOL(int i) { return getToken(il65Parser.EOL, i); @@ -2384,31 +2331,33 @@ public class il65Parser extends Parser { public StatementContext statement(int i) { return getRuleContext(StatementContext.class,i); } - public Sub_bodyContext(ParserRuleContext parent, int invokingState) { + public Statement_blockContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_sub_body; } + @Override public int getRuleIndex() { return RULE_statement_block; } } - public final Sub_bodyContext sub_body() throws RecognitionException { - Sub_bodyContext _localctx = new Sub_bodyContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_sub_body); + public final Statement_blockContext statement_block() throws RecognitionException { + Statement_blockContext _localctx = new Statement_blockContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_statement_block); int _la; try { enterOuterAlt(_localctx, 1); { - setState(351); - match(T__1); - setState(352); + setState(349); + match(T__82); + setState(350); match(EOL); - setState(357); + setState(355); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__75 - 67)) | (1L << (T__76 - 67)) | (1L << (T__79 - 67)) | (1L << (T__80 - 67)) | (1L << (EOL - 67)) | (1L << (NAME - 67)))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (T__64 - 65)) | (1L << (T__66 - 65)) | (1L << (T__67 - 65)) | (1L << (T__68 - 65)) | (1L << (T__69 - 65)) | (1L << (T__70 - 65)) | (1L << (T__71 - 65)) | (1L << (T__72 - 65)) | (1L << (T__73 - 65)) | (1L << (T__74 - 65)) | (1L << (T__75 - 65)) | (1L << (T__76 - 65)) | (1L << (T__79 - 65)) | (1L << (T__80 - 65)) | (1L << (T__85 - 65)) | (1L << (EOL - 65)) | (1L << (NAME - 65)))) != 0)) { { - setState(355); + setState(353); _errHandler.sync(this); switch (_input.LA(1)) { + case T__2: + case T__3: case T__4: case T__5: case T__6: @@ -2417,8 +2366,8 @@ public class il65Parser extends Parser { case T__9: case T__10: case T__11: - case T__12: - case T__13: + case T__14: + case T__15: case T__16: case T__17: case T__18: @@ -2426,9 +2375,9 @@ public class il65Parser extends Parser { case T__20: case T__21: case T__22: - case T__23: - case T__24: + case T__64: case T__66: + case T__67: case T__68: case T__69: case T__70: @@ -2440,15 +2389,16 @@ public class il65Parser extends Parser { case T__76: case T__79: case T__80: + case T__85: case NAME: { - setState(353); + setState(351); statement(); } break; case EOL: { - setState(354); + setState(352); match(EOL); } break; @@ -2456,14 +2406,12 @@ public class il65Parser extends Parser { throw new NoViableAltException(this); } } - setState(359); + setState(357); _errHandler.sync(this); _la = _input.LA(1); } - setState(360); - match(T__2); - setState(361); - match(EOL); + setState(358); + match(T__83); } } catch (RecognitionException re) { @@ -2493,9 +2441,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(363); - match(T__15); - setState(364); + setState(360); + match(T__13); + setState(361); integerliteral(); } } @@ -2530,21 +2478,21 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(366); + setState(363); sub_param(); - setState(371); + setState(368); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__14) { + while (_la==T__12) { { { - setState(367); - match(T__14); - setState(368); + setState(364); + match(T__12); + setState(365); sub_param(); } } - setState(373); + setState(370); _errHandler.sync(this); _la = _input.LA(1); } @@ -2580,11 +2528,11 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(374); + setState(371); identifier(); - setState(375); - match(T__3); - setState(376); + setState(372); + match(T__1); + setState(373); register(); } } @@ -2617,16 +2565,18 @@ public class il65Parser extends Parser { enterRule(_localctx, 76, RULE_sub_returns); int _la; try { - setState(387); + setState(384); _errHandler.sync(this); switch (_input.LA(1)) { - case T__82: + case T__84: enterOuterAlt(_localctx, 1); { - setState(378); - match(T__82); + setState(375); + match(T__84); } break; + case T__66: + case T__67: case T__68: case T__69: case T__70: @@ -2639,21 +2589,21 @@ public class il65Parser extends Parser { enterOuterAlt(_localctx, 2); { { - setState(379); + setState(376); sub_return(); - setState(384); + setState(381); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__14) { + while (_la==T__12) { { { - setState(380); - match(T__14); - setState(381); + setState(377); + match(T__12); + setState(378); sub_return(); } } - setState(386); + setState(383); _errHandler.sync(this); _la = _input.LA(1); } @@ -2692,15 +2642,15 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(389); + setState(386); register(); - setState(391); + setState(388); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__82) { + if (_la==T__84) { { - setState(390); - match(T__82); + setState(387); + match(T__84); } } @@ -2717,6 +2667,239 @@ public class il65Parser extends Parser { return _localctx; } + public static class If_stmtContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List EOL() { return getTokens(il65Parser.EOL); } + public TerminalNode EOL(int i) { + return getToken(il65Parser.EOL, i); + } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public Statement_blockContext statement_block() { + return getRuleContext(Statement_blockContext.class,0); + } + public Else_partContext else_part() { + return getRuleContext(Else_partContext.class,0); + } + public If_stmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_if_stmt; } + } + + public final If_stmtContext if_stmt() throws RecognitionException { + If_stmtContext _localctx = new If_stmtContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_if_stmt); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(390); + match(T__85); + setState(391); + match(T__39); + setState(392); + expression(0); + setState(393); + match(T__40); + setState(395); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EOL) { + { + setState(394); + match(EOL); + } + } + + setState(399); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__2: + case T__3: + case T__4: + case T__5: + case T__6: + case T__7: + case T__8: + case T__9: + case T__10: + case T__11: + case T__14: + case T__15: + case T__16: + case T__17: + case T__18: + case T__19: + case T__20: + case T__21: + case T__22: + case T__64: + case T__66: + case T__67: + case T__68: + case T__69: + case T__70: + case T__71: + case T__72: + case T__73: + case T__74: + case T__75: + case T__76: + case T__79: + case T__80: + case T__85: + case NAME: + { + setState(397); + statement(); + } + break; + case T__82: + { + setState(398); + statement_block(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(402); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + case 1: + { + setState(401); + match(EOL); + } + break; + } + setState(405); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__86) { + { + setState(404); + else_part(); + } + } + + setState(407); + match(EOL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class Else_partContext extends ParserRuleContext { + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public Statement_blockContext statement_block() { + return getRuleContext(Statement_blockContext.class,0); + } + public TerminalNode EOL() { return getToken(il65Parser.EOL, 0); } + public Else_partContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_else_part; } + } + + public final Else_partContext else_part() throws RecognitionException { + Else_partContext _localctx = new Else_partContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_else_part); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(409); + match(T__86); + setState(411); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==EOL) { + { + setState(410); + match(EOL); + } + } + + setState(415); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__2: + case T__3: + case T__4: + case T__5: + case T__6: + case T__7: + case T__8: + case T__9: + case T__10: + case T__11: + case T__14: + case T__15: + case T__16: + case T__17: + case T__18: + case T__19: + case T__20: + case T__21: + case T__22: + case T__64: + case T__66: + case T__67: + case T__68: + case T__69: + case T__70: + case T__71: + case T__72: + case T__73: + case T__74: + case T__75: + case T__76: + case T__79: + case T__80: + case T__85: + case NAME: + { + setState(413); + statement(); + } + break; + case T__82: + { + setState(414); + statement_block(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { case 18: @@ -2759,148 +2942,157 @@ public class il65Parser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3`\u018c\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3d\u01a4\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)\3\2\3\2\7\2U\n"+ - "\2\f\2\16\2X\13\2\3\2\3\2\3\3\3\3\5\3^\n\3\3\4\3\4\3\4\5\4c\n\4\3\4\3"+ - "\4\3\4\3\4\7\4i\n\4\f\4\16\4l\13\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5"+ - "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5\177\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3"+ - "\7\5\7\u0088\n\7\3\b\3\b\5\b\u008c\n\b\3\b\3\b\3\b\7\b\u0091\n\b\f\b\16"+ - "\b\u0094\13\b\5\b\u0096\n\b\3\t\3\t\3\t\5\t\u009b\n\t\3\n\3\n\5\n\u009f"+ - "\n\n\3\n\3\n\3\13\3\13\5\13\u00a5\n\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f"+ - "\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\17\5\17\u00b7\n\17\3\17\3\17\3"+ - "\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\5\22\u00c6\n\22"+ - "\3\23\3\23\3\23\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\u00d9\n\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+ + "\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\7\2Y\n\2\f\2\16\2\\\13\2\3\2\3\2\3\3\3\3\5\3b\n\3\3\4\3\4\3\4\5"+ + "\4g\n\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+ + "\5\3\5\3\5\5\5{\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\5\7\u0084\n\7\3\b\3\b"+ + "\5\b\u0088\n\b\3\b\3\b\3\b\7\b\u008d\n\b\f\b\16\b\u0090\13\b\5\b\u0092"+ + "\n\b\3\t\3\t\3\t\5\t\u0097\n\t\3\n\3\n\5\n\u009b\n\n\3\n\3\n\3\13\3\13"+ + "\5\13\u00a1\n\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16"+ + "\3\17\3\17\3\17\3\17\5\17\u00b3\n\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21"+ + "\3\21\3\21\3\21\3\22\3\22\3\22\5\22\u00c2\n\22\3\23\3\23\3\23\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\u00d5"+ + "\n\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\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\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\7\24\u0104\n\24\f\24\16\24\u0107\13\24\3\25"+ - "\3\25\5\25\u010b\n\25\3\25\3\25\5\25\u010f\n\25\3\25\3\25\3\26\3\26\5"+ - "\26\u0115\n\26\3\26\3\26\5\26\u0119\n\26\3\26\3\26\3\27\3\27\3\27\7\27"+ - "\u0120\n\27\f\27\16\27\u0123\13\27\3\30\3\30\5\30\u0127\n\30\3\31\3\31"+ - "\3\32\3\32\3\32\6\32\u012e\n\32\r\32\16\32\u012f\3\33\3\33\3\34\3\34\3"+ - "\35\3\35\3\36\3\36\3\36\3\36\7\36\u013c\n\36\f\36\16\36\u013f\13\36\3"+ - "\36\3\36\3\37\3\37\3 \3 \3!\3!\3!\3!\3!\5!\u014c\n!\3\"\3\"\3\"\3#\3#"+ - "\3#\3#\5#\u0155\n#\3#\3#\3#\3#\5#\u015b\n#\3#\3#\3#\5#\u0160\n#\3$\3$"+ - "\3$\3$\7$\u0166\n$\f$\16$\u0169\13$\3$\3$\3$\3%\3%\3%\3&\3&\3&\7&\u0174"+ - "\n&\f&\16&\u0177\13&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\7(\u0181\n(\f(\16(\u0184"+ - "\13(\5(\u0186\n(\3)\3)\5)\u018a\n)\3)\2\3&*\2\4\6\b\n\f\16\20\22\24\26"+ - "\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNP\2\17\3\2\b\20\3\2\25\33"+ - "\3\2\36)\3\2*+\4\2\3\3./\3\2\61\62\3\2./\3\2\63\66\3\2\67:\3\2;<\3\2G"+ - "O\3\2[]\3\2PQ\2\u01ac\2V\3\2\2\2\4]\3\2\2\2\6_\3\2\2\2\b~\3\2\2\2\n\u0080"+ - "\3\2\2\2\f\u0083\3\2\2\2\16\u0089\3\2\2\2\20\u009a\3\2\2\2\22\u009c\3"+ - "\2\2\2\24\u00a2\3\2\2\2\26\u00aa\3\2\2\2\30\u00ad\3\2\2\2\32\u00b0\3\2"+ - "\2\2\34\u00b2\3\2\2\2\36\u00ba\3\2\2\2 \u00be\3\2\2\2\"\u00c5\3\2\2\2"+ - "$\u00c7\3\2\2\2&\u00d8\3\2\2\2(\u010a\3\2\2\2*\u0114\3\2\2\2,\u011c\3"+ - "\2\2\2.\u0124\3\2\2\2\60\u0128\3\2\2\2\62\u012a\3\2\2\2\64\u0131\3\2\2"+ - "\2\66\u0133\3\2\2\28\u0135\3\2\2\2:\u0137\3\2\2\2<\u0142\3\2\2\2>\u0144"+ - "\3\2\2\2@\u014b\3\2\2\2B\u014d\3\2\2\2D\u0150\3\2\2\2F\u0161\3\2\2\2H"+ - "\u016d\3\2\2\2J\u0170\3\2\2\2L\u0178\3\2\2\2N\u0185\3\2\2\2P\u0187\3\2"+ - "\2\2RU\5\4\3\2SU\7Y\2\2TR\3\2\2\2TS\3\2\2\2UX\3\2\2\2VT\3\2\2\2VW\3\2"+ - "\2\2WY\3\2\2\2XV\3\2\2\2YZ\7\2\2\3Z\3\3\2\2\2[^\5\16\b\2\\^\5\6\4\2]["+ - "\3\2\2\2]\\\3\2\2\2^\5\3\2\2\2_`\7\3\2\2`b\5\60\31\2ac\5\66\34\2ba\3\2"+ - "\2\2bc\3\2\2\2cd\3\2\2\2de\7\4\2\2ej\7Y\2\2fi\5\b\5\2gi\7Y\2\2hf\3\2\2"+ - "\2hg\3\2\2\2il\3\2\2\2jh\3\2\2\2jk\3\2\2\2km\3\2\2\2lj\3\2\2\2mn\7\5\2"+ - "\2no\7Y\2\2o\7\3\2\2\2p\177\5\16\b\2q\177\5\24\13\2r\177\5\22\n\2s\177"+ - "\5\26\f\2t\177\5\30\r\2u\177\5\36\20\2v\177\5 \21\2w\177\5\f\7\2x\177"+ - "\5$\23\2y\177\5*\26\2z\177\5D#\2{\177\5B\"\2|\177\5\n\6\2}\177\5.\30\2"+ - "~p\3\2\2\2~q\3\2\2\2~r\3\2\2\2~s\3\2\2\2~t\3\2\2\2~u\3\2\2\2~v\3\2\2\2"+ - "~w\3\2\2\2~x\3\2\2\2~y\3\2\2\2~z\3\2\2\2~{\3\2\2\2~|\3\2\2\2~}\3\2\2\2"+ - "\177\t\3\2\2\2\u0080\u0081\5\60\31\2\u0081\u0082\7\6\2\2\u0082\13\3\2"+ - "\2\2\u0083\u0087\7\7\2\2\u0084\u0088\5\66\34\2\u0085\u0088\5\60\31\2\u0086"+ - "\u0088\5\62\32\2\u0087\u0084\3\2\2\2\u0087\u0085\3\2\2\2\u0087\u0086\3"+ - "\2\2\2\u0088\r\3\2\2\2\u0089\u0095\t\2\2\2\u008a\u008c\5\20\t\2\u008b"+ - "\u008a\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u0096\3\2\2\2\u008d\u0092\5\20"+ - "\t\2\u008e\u008f\7\21\2\2\u008f\u0091\5\20\t\2\u0090\u008e\3\2\2\2\u0091"+ - "\u0094\3\2\2\2\u0092\u0090\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0096\3\2"+ - "\2\2\u0094\u0092\3\2\2\2\u0095\u008b\3\2\2\2\u0095\u008d\3\2\2\2\u0096"+ - "\17\3\2\2\2\u0097\u009b\5<\37\2\u0098\u009b\5\60\31\2\u0099\u009b\5\66"+ - "\34\2\u009a\u0097\3\2\2\2\u009a\u0098\3\2\2\2\u009a\u0099\3\2\2\2\u009b"+ - "\21\3\2\2\2\u009c\u009e\5\32\16\2\u009d\u009f\5\34\17\2\u009e\u009d\3"+ - "\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a1\5\60\31\2\u00a1"+ - "\23\3\2\2\2\u00a2\u00a4\5\32\16\2\u00a3\u00a5\5\34\17\2\u00a4\u00a3\3"+ - "\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a7\5\60\31\2\u00a7"+ - "\u00a8\7\22\2\2\u00a8\u00a9\5&\24\2\u00a9\25\3\2\2\2\u00aa\u00ab\7\23"+ - "\2\2\u00ab\u00ac\5\24\13\2\u00ac\27\3\2\2\2\u00ad\u00ae\7\24\2\2\u00ae"+ - "\u00af\5\24\13\2\u00af\31\3\2\2\2\u00b0\u00b1\t\3\2\2\u00b1\33\3\2\2\2"+ - "\u00b2\u00b3\7\34\2\2\u00b3\u00b6\5&\24\2\u00b4\u00b5\7\21\2\2\u00b5\u00b7"+ - "\5&\24\2\u00b6\u00b4\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b8\3\2\2\2\u00b8"+ - "\u00b9\7\35\2\2\u00b9\35\3\2\2\2\u00ba\u00bb\5\"\22\2\u00bb\u00bc\7\22"+ - "\2\2\u00bc\u00bd\5&\24\2\u00bd\37\3\2\2\2\u00be\u00bf\5\"\22\2\u00bf\u00c0"+ - "\t\4\2\2\u00c0\u00c1\5&\24\2\u00c1!\3\2\2\2\u00c2\u00c6\5\64\33\2\u00c3"+ - "\u00c6\5\60\31\2\u00c4\u00c6\5\62\32\2\u00c5\u00c2\3\2\2\2\u00c5\u00c3"+ - "\3\2\2\2\u00c5\u00c4\3\2\2\2\u00c6#\3\2\2\2\u00c7\u00c8\5\"\22\2\u00c8"+ - "\u00c9\t\5\2\2\u00c9%\3\2\2\2\u00ca\u00cb\b\24\1\2\u00cb\u00cc\7,\2\2"+ - "\u00cc\u00cd\5&\24\2\u00cd\u00ce\7-\2\2\u00ce\u00d9\3\2\2\2\u00cf\u00d9"+ - "\5(\25\2\u00d0\u00d1\t\6\2\2\u00d1\u00d9\5&\24\25\u00d2\u00d3\7C\2\2\u00d3"+ - "\u00d9\5&\24\b\u00d4\u00d9\5@!\2\u00d5\u00d9\5\64\33\2\u00d6\u00d9\5\60"+ - "\31\2\u00d7\u00d9\5\62\32\2\u00d8\u00ca\3\2\2\2\u00d8\u00cf\3\2\2\2\u00d8"+ - "\u00d0\3\2\2\2\u00d8\u00d2\3\2\2\2\u00d8\u00d4\3\2\2\2\u00d8\u00d5\3\2"+ - "\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d7\3\2\2\2\u00d9\u0105\3\2\2\2\u00da"+ - "\u00db\f\24\2\2\u00db\u00dc\7\60\2\2\u00dc\u0104\5&\24\25\u00dd\u00de"+ - "\f\23\2\2\u00de\u00df\t\7\2\2\u00df\u0104\5&\24\24\u00e0\u00e1\f\22\2"+ - "\2\u00e1\u00e2\t\b\2\2\u00e2\u0104\5&\24\23\u00e3\u00e4\f\21\2\2\u00e4"+ - "\u00e5\t\t\2\2\u00e5\u0104\5&\24\22\u00e6\u00e7\f\20\2\2\u00e7\u00e8\t"+ - "\n\2\2\u00e8\u0104\5&\24\21\u00e9\u00ea\f\17\2\2\u00ea\u00eb\t\13\2\2"+ - "\u00eb\u0104\5&\24\20\u00ec\u00ed\f\16\2\2\u00ed\u00ee\7=\2\2\u00ee\u0104"+ - "\5&\24\17\u00ef\u00f0\f\r\2\2\u00f0\u00f1\7>\2\2\u00f1\u0104\5&\24\16"+ - "\u00f2\u00f3\f\f\2\2\u00f3\u00f4\7?\2\2\u00f4\u0104\5&\24\r\u00f5\u00f6"+ - "\f\13\2\2\u00f6\u00f7\7@\2\2\u00f7\u0104\5&\24\f\u00f8\u00f9\f\n\2\2\u00f9"+ - "\u00fa\7A\2\2\u00fa\u0104\5&\24\13\u00fb\u00fc\f\t\2\2\u00fc\u00fd\7B"+ - "\2\2\u00fd\u0104\5&\24\n\u00fe\u00ff\f\7\2\2\u00ff\u0100\7D\2\2\u0100"+ - "\u0104\5&\24\b\u0101\u0102\f\27\2\2\u0102\u0104\5\34\17\2\u0103\u00da"+ - "\3\2\2\2\u0103\u00dd\3\2\2\2\u0103\u00e0\3\2\2\2\u0103\u00e3\3\2\2\2\u0103"+ - "\u00e6\3\2\2\2\u0103\u00e9\3\2\2\2\u0103\u00ec\3\2\2\2\u0103\u00ef\3\2"+ - "\2\2\u0103\u00f2\3\2\2\2\u0103\u00f5\3\2\2\2\u0103\u00f8\3\2\2\2\u0103"+ - "\u00fb\3\2\2\2\u0103\u00fe\3\2\2\2\u0103\u0101\3\2\2\2\u0104\u0107\3\2"+ - "\2\2\u0105\u0103\3\2\2\2\u0105\u0106\3\2\2\2\u0106\'\3\2\2\2\u0107\u0105"+ - "\3\2\2\2\u0108\u010b\5\60\31\2\u0109\u010b\5\62\32\2\u010a\u0108\3\2\2"+ - "\2\u010a\u0109\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010e\7,\2\2\u010d\u010f"+ - "\5,\27\2\u010e\u010d\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2\u0110"+ - "\u0111\7-\2\2\u0111)\3\2\2\2\u0112\u0115\5\60\31\2\u0113\u0115\5\62\32"+ - "\2\u0114\u0112\3\2\2\2\u0114\u0113\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0118"+ - "\7,\2\2\u0117\u0119\5,\27\2\u0118\u0117\3\2\2\2\u0118\u0119\3\2\2\2\u0119"+ - "\u011a\3\2\2\2\u011a\u011b\7-\2\2\u011b+\3\2\2\2\u011c\u0121\5&\24\2\u011d"+ - "\u011e\7\21\2\2\u011e\u0120\5&\24\2\u011f\u011d\3\2\2\2\u0120\u0123\3"+ - "\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122-\3\2\2\2\u0123\u0121"+ - "\3\2\2\2\u0124\u0126\7E\2\2\u0125\u0127\5,\27\2\u0126\u0125\3\2\2\2\u0126"+ - "\u0127\3\2\2\2\u0127/\3\2\2\2\u0128\u0129\7Z\2\2\u0129\61\3\2\2\2\u012a"+ - "\u012d\7Z\2\2\u012b\u012c\7F\2\2\u012c\u012e\7Z\2\2\u012d\u012b\3\2\2"+ - "\2\u012e\u012f\3\2\2\2\u012f\u012d\3\2\2\2\u012f\u0130\3\2\2\2\u0130\63"+ - "\3\2\2\2\u0131\u0132\t\f\2\2\u0132\65\3\2\2\2\u0133\u0134\t\r\2\2\u0134"+ - "\67\3\2\2\2\u0135\u0136\t\16\2\2\u01369\3\2\2\2\u0137\u0138\7\34\2\2\u0138"+ - "\u013d\5&\24\2\u0139\u013a\7\21\2\2\u013a\u013c\5&\24\2\u013b\u0139\3"+ - "\2\2\2\u013c\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e"+ - "\u0140\3\2\2\2\u013f\u013d\3\2\2\2\u0140\u0141\7\35\2\2\u0141;\3\2\2\2"+ - "\u0142\u0143\7_\2\2\u0143=\3\2\2\2\u0144\u0145\7^\2\2\u0145?\3\2\2\2\u0146"+ - "\u014c\5\66\34\2\u0147\u014c\58\35\2\u0148\u014c\5:\36\2\u0149\u014c\5"+ - "<\37\2\u014a\u014c\5> \2\u014b\u0146\3\2\2\2\u014b\u0147\3\2\2\2\u014b"+ - "\u0148\3\2\2\2\u014b\u0149\3\2\2\2\u014b\u014a\3\2\2\2\u014cA\3\2\2\2"+ - "\u014d\u014e\7R\2\2\u014e\u014f\7`\2\2\u014fC\3\2\2\2\u0150\u0151\7S\2"+ - "\2\u0151\u0152\5\60\31\2\u0152\u0154\7,\2\2\u0153\u0155\5J&\2\u0154\u0153"+ - "\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0156\3\2\2\2\u0156\u0157\7-\2\2\u0157"+ - "\u0158\7T\2\2\u0158\u015a\7,\2\2\u0159\u015b\5N(\2\u015a\u0159\3\2\2\2"+ - "\u015a\u015b\3\2\2\2\u015b\u015c\3\2\2\2\u015c\u015f\7-\2\2\u015d\u0160"+ - "\5H%\2\u015e\u0160\5F$\2\u015f\u015d\3\2\2\2\u015f\u015e\3\2\2\2\u0160"+ - "E\3\2\2\2\u0161\u0162\7\4\2\2\u0162\u0167\7Y\2\2\u0163\u0166\5\b\5\2\u0164"+ - "\u0166\7Y\2\2\u0165\u0163\3\2\2\2\u0165\u0164\3\2\2\2\u0166\u0169\3\2"+ - "\2\2\u0167\u0165\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u016a\3\2\2\2\u0169"+ - "\u0167\3\2\2\2\u016a\u016b\7\5\2\2\u016b\u016c\7Y\2\2\u016cG\3\2\2\2\u016d"+ - "\u016e\7\22\2\2\u016e\u016f\5\66\34\2\u016fI\3\2\2\2\u0170\u0175\5L\'"+ - "\2\u0171\u0172\7\21\2\2\u0172\u0174\5L\'\2\u0173\u0171\3\2\2\2\u0174\u0177"+ - "\3\2\2\2\u0175\u0173\3\2\2\2\u0175\u0176\3\2\2\2\u0176K\3\2\2\2\u0177"+ - "\u0175\3\2\2\2\u0178\u0179\5\60\31\2\u0179\u017a\7\6\2\2\u017a\u017b\5"+ - "\64\33\2\u017bM\3\2\2\2\u017c\u0186\7U\2\2\u017d\u0182\5P)\2\u017e\u017f"+ - "\7\21\2\2\u017f\u0181\5P)\2\u0180\u017e\3\2\2\2\u0181\u0184\3\2\2\2\u0182"+ - "\u0180\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0186\3\2\2\2\u0184\u0182\3\2"+ - "\2\2\u0185\u017c\3\2\2\2\u0185\u017d\3\2\2\2\u0186O\3\2\2\2\u0187\u0189"+ - "\5\64\33\2\u0188\u018a\7U\2\2\u0189\u0188\3\2\2\2\u0189\u018a\3\2\2\2"+ - "\u018aQ\3\2\2\2\'TV]bhj~\u0087\u008b\u0092\u0095\u009a\u009e\u00a4\u00b6"+ - "\u00c5\u00d8\u0103\u0105\u010a\u010e\u0114\u0118\u0121\u0126\u012f\u013d"+ - "\u014b\u0154\u015a\u015f\u0165\u0167\u0175\u0182\u0185\u0189"; + "\7\24\u0100\n\24\f\24\16\24\u0103\13\24\3\25\3\25\5\25\u0107\n\25\3\25"+ + "\3\25\5\25\u010b\n\25\3\25\3\25\3\26\3\26\5\26\u0111\n\26\3\26\3\26\5"+ + "\26\u0115\n\26\3\26\3\26\3\27\3\27\3\27\7\27\u011c\n\27\f\27\16\27\u011f"+ + "\13\27\3\30\3\30\5\30\u0123\n\30\3\31\3\31\3\32\3\32\3\32\6\32\u012a\n"+ + "\32\r\32\16\32\u012b\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\36"+ + "\7\36\u0138\n\36\f\36\16\36\u013b\13\36\3\36\3\36\3\37\3\37\3 \3 \3!\3"+ + "!\3!\3!\3!\5!\u0148\n!\3\"\3\"\3\"\3#\3#\3#\3#\5#\u0151\n#\3#\3#\3#\3"+ + "#\5#\u0157\n#\3#\3#\3#\3#\3#\5#\u015e\n#\3$\3$\3$\3$\7$\u0164\n$\f$\16"+ + "$\u0167\13$\3$\3$\3%\3%\3%\3&\3&\3&\7&\u0171\n&\f&\16&\u0174\13&\3\'\3"+ + "\'\3\'\3\'\3(\3(\3(\3(\7(\u017e\n(\f(\16(\u0181\13(\5(\u0183\n(\3)\3)"+ + "\5)\u0187\n)\3*\3*\3*\3*\3*\5*\u018e\n*\3*\3*\5*\u0192\n*\3*\5*\u0195"+ + "\n*\3*\5*\u0198\n*\3*\3*\3+\3+\5+\u019e\n+\3+\3+\5+\u01a2\n+\3+\2\3&,"+ + "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFH"+ + "JLNPRT\2\17\3\2\6\16\3\2\23\31\3\2\34\'\3\2()\4\2\3\3,-\3\2/\60\3\2,-"+ + "\3\2\61\64\3\2\658\3\29:\3\2EO\3\2_a\3\2PQ\2\u01c7\2Z\3\2\2\2\4a\3\2\2"+ + "\2\6c\3\2\2\2\bz\3\2\2\2\n|\3\2\2\2\f\177\3\2\2\2\16\u0085\3\2\2\2\20"+ + "\u0096\3\2\2\2\22\u0098\3\2\2\2\24\u009e\3\2\2\2\26\u00a6\3\2\2\2\30\u00a9"+ + "\3\2\2\2\32\u00ac\3\2\2\2\34\u00ae\3\2\2\2\36\u00b6\3\2\2\2 \u00ba\3\2"+ + "\2\2\"\u00c1\3\2\2\2$\u00c3\3\2\2\2&\u00d4\3\2\2\2(\u0106\3\2\2\2*\u0110"+ + "\3\2\2\2,\u0118\3\2\2\2.\u0120\3\2\2\2\60\u0124\3\2\2\2\62\u0126\3\2\2"+ + "\2\64\u012d\3\2\2\2\66\u012f\3\2\2\28\u0131\3\2\2\2:\u0133\3\2\2\2<\u013e"+ + "\3\2\2\2>\u0140\3\2\2\2@\u0147\3\2\2\2B\u0149\3\2\2\2D\u014c\3\2\2\2F"+ + "\u015f\3\2\2\2H\u016a\3\2\2\2J\u016d\3\2\2\2L\u0175\3\2\2\2N\u0182\3\2"+ + "\2\2P\u0184\3\2\2\2R\u0188\3\2\2\2T\u019b\3\2\2\2VY\5\4\3\2WY\7]\2\2X"+ + "V\3\2\2\2XW\3\2\2\2Y\\\3\2\2\2ZX\3\2\2\2Z[\3\2\2\2[]\3\2\2\2\\Z\3\2\2"+ + "\2]^\7\2\2\3^\3\3\2\2\2_b\5\16\b\2`b\5\6\4\2a_\3\2\2\2a`\3\2\2\2b\5\3"+ + "\2\2\2cd\7\3\2\2df\5\60\31\2eg\5\66\34\2fe\3\2\2\2fg\3\2\2\2gh\3\2\2\2"+ + "hi\5F$\2ij\7]\2\2j\7\3\2\2\2k{\5\16\b\2l{\5\24\13\2m{\5\22\n\2n{\5\26"+ + "\f\2o{\5\30\r\2p{\5\36\20\2q{\5 \21\2r{\5\f\7\2s{\5$\23\2t{\5*\26\2u{"+ + "\5R*\2v{\5D#\2w{\5B\"\2x{\5\n\6\2y{\5.\30\2zk\3\2\2\2zl\3\2\2\2zm\3\2"+ + "\2\2zn\3\2\2\2zo\3\2\2\2zp\3\2\2\2zq\3\2\2\2zr\3\2\2\2zs\3\2\2\2zt\3\2"+ + "\2\2zu\3\2\2\2zv\3\2\2\2zw\3\2\2\2zx\3\2\2\2zy\3\2\2\2{\t\3\2\2\2|}\5"+ + "\60\31\2}~\7\4\2\2~\13\3\2\2\2\177\u0083\7\5\2\2\u0080\u0084\5\66\34\2"+ + "\u0081\u0084\5\60\31\2\u0082\u0084\5\62\32\2\u0083\u0080\3\2\2\2\u0083"+ + "\u0081\3\2\2\2\u0083\u0082\3\2\2\2\u0084\r\3\2\2\2\u0085\u0091\t\2\2\2"+ + "\u0086\u0088\5\20\t\2\u0087\u0086\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0092"+ + "\3\2\2\2\u0089\u008e\5\20\t\2\u008a\u008b\7\17\2\2\u008b\u008d\5\20\t"+ + "\2\u008c\u008a\3\2\2\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f"+ + "\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0091\u0087\3\2\2\2\u0091"+ + "\u0089\3\2\2\2\u0092\17\3\2\2\2\u0093\u0097\5<\37\2\u0094\u0097\5\60\31"+ + "\2\u0095\u0097\5\66\34\2\u0096\u0093\3\2\2\2\u0096\u0094\3\2\2\2\u0096"+ + "\u0095\3\2\2\2\u0097\21\3\2\2\2\u0098\u009a\5\32\16\2\u0099\u009b\5\34"+ + "\17\2\u009a\u0099\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c\3\2\2\2\u009c"+ + "\u009d\5\60\31\2\u009d\23\3\2\2\2\u009e\u00a0\5\32\16\2\u009f\u00a1\5"+ + "\34\17\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2"+ + "\u00a3\5\60\31\2\u00a3\u00a4\7\20\2\2\u00a4\u00a5\5&\24\2\u00a5\25\3\2"+ + "\2\2\u00a6\u00a7\7\21\2\2\u00a7\u00a8\5\24\13\2\u00a8\27\3\2\2\2\u00a9"+ + "\u00aa\7\22\2\2\u00aa\u00ab\5\24\13\2\u00ab\31\3\2\2\2\u00ac\u00ad\t\3"+ + "\2\2\u00ad\33\3\2\2\2\u00ae\u00af\7\32\2\2\u00af\u00b2\5&\24\2\u00b0\u00b1"+ + "\7\17\2\2\u00b1\u00b3\5&\24\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2"+ + "\u00b3\u00b4\3\2\2\2\u00b4\u00b5\7\33\2\2\u00b5\35\3\2\2\2\u00b6\u00b7"+ + "\5\"\22\2\u00b7\u00b8\7\20\2\2\u00b8\u00b9\5&\24\2\u00b9\37\3\2\2\2\u00ba"+ + "\u00bb\5\"\22\2\u00bb\u00bc\t\4\2\2\u00bc\u00bd\5&\24\2\u00bd!\3\2\2\2"+ + "\u00be\u00c2\5\64\33\2\u00bf\u00c2\5\60\31\2\u00c0\u00c2\5\62\32\2\u00c1"+ + "\u00be\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1\u00c0\3\2\2\2\u00c2#\3\2\2\2"+ + "\u00c3\u00c4\5\"\22\2\u00c4\u00c5\t\5\2\2\u00c5%\3\2\2\2\u00c6\u00c7\b"+ + "\24\1\2\u00c7\u00c8\7*\2\2\u00c8\u00c9\5&\24\2\u00c9\u00ca\7+\2\2\u00ca"+ + "\u00d5\3\2\2\2\u00cb\u00d5\5(\25\2\u00cc\u00cd\t\6\2\2\u00cd\u00d5\5&"+ + "\24\25\u00ce\u00cf\7A\2\2\u00cf\u00d5\5&\24\b\u00d0\u00d5\5@!\2\u00d1"+ + "\u00d5\5\64\33\2\u00d2\u00d5\5\60\31\2\u00d3\u00d5\5\62\32\2\u00d4\u00c6"+ + "\3\2\2\2\u00d4\u00cb\3\2\2\2\u00d4\u00cc\3\2\2\2\u00d4\u00ce\3\2\2\2\u00d4"+ + "\u00d0\3\2\2\2\u00d4\u00d1\3\2\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d3\3\2"+ + "\2\2\u00d5\u0101\3\2\2\2\u00d6\u00d7\f\24\2\2\u00d7\u00d8\7.\2\2\u00d8"+ + "\u0100\5&\24\25\u00d9\u00da\f\23\2\2\u00da\u00db\t\7\2\2\u00db\u0100\5"+ + "&\24\24\u00dc\u00dd\f\22\2\2\u00dd\u00de\t\b\2\2\u00de\u0100\5&\24\23"+ + "\u00df\u00e0\f\21\2\2\u00e0\u00e1\t\t\2\2\u00e1\u0100\5&\24\22\u00e2\u00e3"+ + "\f\20\2\2\u00e3\u00e4\t\n\2\2\u00e4\u0100\5&\24\21\u00e5\u00e6\f\17\2"+ + "\2\u00e6\u00e7\t\13\2\2\u00e7\u0100\5&\24\20\u00e8\u00e9\f\16\2\2\u00e9"+ + "\u00ea\7;\2\2\u00ea\u0100\5&\24\17\u00eb\u00ec\f\r\2\2\u00ec\u00ed\7<"+ + "\2\2\u00ed\u0100\5&\24\16\u00ee\u00ef\f\f\2\2\u00ef\u00f0\7=\2\2\u00f0"+ + "\u0100\5&\24\r\u00f1\u00f2\f\13\2\2\u00f2\u00f3\7>\2\2\u00f3\u0100\5&"+ + "\24\f\u00f4\u00f5\f\n\2\2\u00f5\u00f6\7?\2\2\u00f6\u0100\5&\24\13\u00f7"+ + "\u00f8\f\t\2\2\u00f8\u00f9\7@\2\2\u00f9\u0100\5&\24\n\u00fa\u00fb\f\7"+ + "\2\2\u00fb\u00fc\7B\2\2\u00fc\u0100\5&\24\b\u00fd\u00fe\f\27\2\2\u00fe"+ + "\u0100\5\34\17\2\u00ff\u00d6\3\2\2\2\u00ff\u00d9\3\2\2\2\u00ff\u00dc\3"+ + "\2\2\2\u00ff\u00df\3\2\2\2\u00ff\u00e2\3\2\2\2\u00ff\u00e5\3\2\2\2\u00ff"+ + "\u00e8\3\2\2\2\u00ff\u00eb\3\2\2\2\u00ff\u00ee\3\2\2\2\u00ff\u00f1\3\2"+ + "\2\2\u00ff\u00f4\3\2\2\2\u00ff\u00f7\3\2\2\2\u00ff\u00fa\3\2\2\2\u00ff"+ + "\u00fd\3\2\2\2\u0100\u0103\3\2\2\2\u0101\u00ff\3\2\2\2\u0101\u0102\3\2"+ + "\2\2\u0102\'\3\2\2\2\u0103\u0101\3\2\2\2\u0104\u0107\5\60\31\2\u0105\u0107"+ + "\5\62\32\2\u0106\u0104\3\2\2\2\u0106\u0105\3\2\2\2\u0107\u0108\3\2\2\2"+ + "\u0108\u010a\7*\2\2\u0109\u010b\5,\27\2\u010a\u0109\3\2\2\2\u010a\u010b"+ + "\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010d\7+\2\2\u010d)\3\2\2\2\u010e\u0111"+ + "\5\60\31\2\u010f\u0111\5\62\32\2\u0110\u010e\3\2\2\2\u0110\u010f\3\2\2"+ + "\2\u0111\u0112\3\2\2\2\u0112\u0114\7*\2\2\u0113\u0115\5,\27\2\u0114\u0113"+ + "\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0117\7+\2\2\u0117"+ + "+\3\2\2\2\u0118\u011d\5&\24\2\u0119\u011a\7\17\2\2\u011a\u011c\5&\24\2"+ + "\u011b\u0119\3\2\2\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e"+ + "\3\2\2\2\u011e-\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0122\7C\2\2\u0121\u0123"+ + "\5,\27\2\u0122\u0121\3\2\2\2\u0122\u0123\3\2\2\2\u0123/\3\2\2\2\u0124"+ + "\u0125\7^\2\2\u0125\61\3\2\2\2\u0126\u0129\7^\2\2\u0127\u0128\7D\2\2\u0128"+ + "\u012a\7^\2\2\u0129\u0127\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u0129\3\2"+ + "\2\2\u012b\u012c\3\2\2\2\u012c\63\3\2\2\2\u012d\u012e\t\f\2\2\u012e\65"+ + "\3\2\2\2\u012f\u0130\t\r\2\2\u0130\67\3\2\2\2\u0131\u0132\t\16\2\2\u0132"+ + "9\3\2\2\2\u0133\u0134\7\32\2\2\u0134\u0139\5&\24\2\u0135\u0136\7\17\2"+ + "\2\u0136\u0138\5&\24\2\u0137\u0135\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137"+ + "\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u013c\3\2\2\2\u013b\u0139\3\2\2\2\u013c"+ + "\u013d\7\33\2\2\u013d;\3\2\2\2\u013e\u013f\7c\2\2\u013f=\3\2\2\2\u0140"+ + "\u0141\7b\2\2\u0141?\3\2\2\2\u0142\u0148\5\66\34\2\u0143\u0148\58\35\2"+ + "\u0144\u0148\5:\36\2\u0145\u0148\5<\37\2\u0146\u0148\5> \2\u0147\u0142"+ + "\3\2\2\2\u0147\u0143\3\2\2\2\u0147\u0144\3\2\2\2\u0147\u0145\3\2\2\2\u0147"+ + "\u0146\3\2\2\2\u0148A\3\2\2\2\u0149\u014a\7R\2\2\u014a\u014b\7d\2\2\u014b"+ + "C\3\2\2\2\u014c\u014d\7S\2\2\u014d\u014e\5\60\31\2\u014e\u0150\7*\2\2"+ + "\u014f\u0151\5J&\2\u0150\u014f\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u0152"+ + "\3\2\2\2\u0152\u0153\7+\2\2\u0153\u0154\7T\2\2\u0154\u0156\7*\2\2\u0155"+ + "\u0157\5N(\2\u0156\u0155\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0158\3\2\2"+ + "\2\u0158\u015d\7+\2\2\u0159\u015e\5H%\2\u015a\u015b\5F$\2\u015b\u015c"+ + "\7]\2\2\u015c\u015e\3\2\2\2\u015d\u0159\3\2\2\2\u015d\u015a\3\2\2\2\u015e"+ + "E\3\2\2\2\u015f\u0160\7U\2\2\u0160\u0165\7]\2\2\u0161\u0164\5\b\5\2\u0162"+ + "\u0164\7]\2\2\u0163\u0161\3\2\2\2\u0163\u0162\3\2\2\2\u0164\u0167\3\2"+ + "\2\2\u0165\u0163\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0168\3\2\2\2\u0167"+ + "\u0165\3\2\2\2\u0168\u0169\7V\2\2\u0169G\3\2\2\2\u016a\u016b\7\20\2\2"+ + "\u016b\u016c\5\66\34\2\u016cI\3\2\2\2\u016d\u0172\5L\'\2\u016e\u016f\7"+ + "\17\2\2\u016f\u0171\5L\'\2\u0170\u016e\3\2\2\2\u0171\u0174\3\2\2\2\u0172"+ + "\u0170\3\2\2\2\u0172\u0173\3\2\2\2\u0173K\3\2\2\2\u0174\u0172\3\2\2\2"+ + "\u0175\u0176\5\60\31\2\u0176\u0177\7\4\2\2\u0177\u0178\5\64\33\2\u0178"+ + "M\3\2\2\2\u0179\u0183\7W\2\2\u017a\u017f\5P)\2\u017b\u017c\7\17\2\2\u017c"+ + "\u017e\5P)\2\u017d\u017b\3\2\2\2\u017e\u0181\3\2\2\2\u017f\u017d\3\2\2"+ + "\2\u017f\u0180\3\2\2\2\u0180\u0183\3\2\2\2\u0181\u017f\3\2\2\2\u0182\u0179"+ + "\3\2\2\2\u0182\u017a\3\2\2\2\u0183O\3\2\2\2\u0184\u0186\5\64\33\2\u0185"+ + "\u0187\7W\2\2\u0186\u0185\3\2\2\2\u0186\u0187\3\2\2\2\u0187Q\3\2\2\2\u0188"+ + "\u0189\7X\2\2\u0189\u018a\7*\2\2\u018a\u018b\5&\24\2\u018b\u018d\7+\2"+ + "\2\u018c\u018e\7]\2\2\u018d\u018c\3\2\2\2\u018d\u018e\3\2\2\2\u018e\u0191"+ + "\3\2\2\2\u018f\u0192\5\b\5\2\u0190\u0192\5F$\2\u0191\u018f\3\2\2\2\u0191"+ + "\u0190\3\2\2\2\u0192\u0194\3\2\2\2\u0193\u0195\7]\2\2\u0194\u0193\3\2"+ + "\2\2\u0194\u0195\3\2\2\2\u0195\u0197\3\2\2\2\u0196\u0198\5T+\2\u0197\u0196"+ + "\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019a\7]\2\2\u019a"+ + "S\3\2\2\2\u019b\u019d\7Y\2\2\u019c\u019e\7]\2\2\u019d\u019c\3\2\2\2\u019d"+ + "\u019e\3\2\2\2\u019e\u01a1\3\2\2\2\u019f\u01a2\5\b\5\2\u01a0\u01a2\5F"+ + "$\2\u01a1\u019f\3\2\2\2\u01a1\u01a0\3\2\2\2\u01a2U\3\2\2\2+XZafz\u0083"+ + "\u0087\u008e\u0091\u0096\u009a\u00a0\u00b2\u00c1\u00d4\u00ff\u0101\u0106"+ + "\u010a\u0110\u0114\u011d\u0122\u012b\u0139\u0147\u0150\u0156\u015d\u0163"+ + "\u0165\u0172\u017f\u0182\u0186\u018d\u0191\u0194\u0197\u019d\u01a1"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/lib65/c64lib.ill b/lib65/c64lib.ill index 993789f35..0efe32834 100644 --- a/lib65/c64lib.ill +++ b/lib65/c64lib.ill @@ -197,12 +197,12 @@ sub CINT () -> (?) = $FF81 ; (alias: SCINIT) initialize screen editor and sub IOINIT () -> (A?, X?) = $FF84 ; initialize I/O devices (CIA, SID, IRQ) sub RAMTAS () -> (?) = $FF87 ; initialize RAM, tape buffer, screen sub RESTOR () -> (?) = $FF8A ; restore default I/O vectors -sub VECTOR (dir: SC, userptr: XY) -> (A?, Y?) = $FF8D ; read/set I/O vector table +sub VECTOR (dir: Pc, userptr: XY) -> (A?, Y?) = $FF8D ; read/set I/O vector table sub SETMSG (value: A) -> () = $FF90 ; set Kernal message control flag sub SECOND (address: A) -> (A?) = $FF93 ; (alias: LSTNSA) send secondary address after LISTEN sub TKSA (address: A) -> (A?) = $FF96 ; (alias: TALKSA) send secondary address after TALK -sub MEMTOP (dir: SC, address: XY) -> (XY) = $FF99 ; read/set top of memory pointer -sub MEMBOT (dir: SC, address: XY) -> (XY) = $FF9C ; read/set bottom of memory pointer +sub MEMTOP (dir: Pc, address: XY) -> (XY) = $FF99 ; read/set top of memory pointer +sub MEMBOT (dir: Pc, address: XY) -> (XY) = $FF9C ; read/set bottom of memory pointer sub SCNKEY () -> (?) = $FF9F ; scan the keyboard sub SETTMO (timeout: A) -> () = $FFA2 ; set time-out flag for IEEE bus sub ACPTR () -> (A) = $FFA5 ; (alias: IECIN) input byte from serial bus @@ -221,16 +221,16 @@ sub CHKOUT (logical: X) -> (A?, X?) = $FFC9 ; (via 800 ($320)) define an outp sub CLRCHN () -> (A?, X?) = $FFCC ; (via 802 ($322)) restore default devices sub CHRIN () -> (A, Y?) = $FFCF ; (via 804 ($324)) input a character (for keyboard, read a whole line from the screen) A=byte read. sub CHROUT (char: A) -> () = $FFD2 ; (via 806 ($326)) output a character -sub LOAD (verify: A, address: XY) -> (SC, A, X, Y) = $FFD5 ; (via 816 ($330)) load from device -sub SAVE (zp_startaddr: A, endaddr: XY) -> (SC, A) = $FFD8 ; (via 818 ($332)) save to a device +sub LOAD (verify: A, address: XY) -> (Pc, A, X, Y) = $FFD5 ; (via 816 ($330)) load from device +sub SAVE (zp_startaddr: A, endaddr: XY) -> (Pc, A) = $FFD8 ; (via 818 ($332)) save to a device sub SETTIM (low: A, middle: X, high: Y) -> () = $FFDB ; set the software clock sub RDTIM () -> (A, X, Y) = $FFDE ; read the software clock -sub STOP () -> (SZ, SC, A?, X?) = $FFE1 ; (via 808 ($328)) check the STOP key +sub STOP () -> (Pz, Pc, A?, X?) = $FFE1 ; (via 808 ($328)) check the STOP key sub GETIN () -> (A, X?, Y?) = $FFE4 ; (via 810 ($32A)) get a character sub CLALL () -> (A?, X?) = $FFE7 ; (via 812 ($32C)) close all files sub UDTIM () -> (A?, X?) = $FFEA ; update the software clock sub SCREEN () -> (X, Y) = $FFED ; read number of screen rows and columns -sub PLOT (dir: SC, col: Y, row: X) -> (X, Y) = $FFF0 ; read/set position of cursor on screen +sub PLOT (dir: Pc, col: Y, row: X) -> (X, Y) = $FFF0 ; read/set position of cursor on screen sub IOBASE () -> (X, Y) = $FFF3 ; read base address of I/O devices ; ---- end of C64 kernal routines ---- @@ -489,7 +489,7 @@ _loop lda #0 } -sub scroll_left_full (alsocolors: SC) -> (A?, X?, Y?) { +sub scroll_left_full (alsocolors: Pc) -> (A?, X?, Y?) { ; ---- scroll the whole screen 1 character to the left ; contents of the rightmost column are unchanged, you should clear/refill this yourself ; Carry flag determines if screen color data must be scrolled too @@ -548,7 +548,7 @@ _scroll_screen ; scroll the screen memory } -sub scroll_right_full (alsocolors: SC) -> (A?, X?) { +sub scroll_right_full (alsocolors: Pc) -> (A?, X?) { ; ---- scroll the whole screen 1 character to the right ; contents of the leftmost column are unchanged, you should clear/refill this yourself ; Carry flag determines if screen color data must be scrolled too @@ -599,7 +599,7 @@ _scroll_screen ; scroll the screen memory } -sub scroll_up_full (alsocolors: SC) -> (A?, X?) { +sub scroll_up_full (alsocolors: Pc) -> (A?, X?) { ; ---- scroll the whole screen 1 character up ; contents of the bottom row are unchanged, you should refill/clear this yourself ; Carry flag determines if screen color data must be scrolled too @@ -650,7 +650,7 @@ _scroll_screen ; scroll the screen memory } -sub scroll_down_full (alsocolors: SC) -> (A?, X?) { +sub scroll_down_full (alsocolors: Pc) -> (A?, X?) { ; ---- scroll the whole screen 1 character down ; contents of the top row are unchanged, you should refill/clear this yourself ; Carry flag determines if screen color data must be scrolled too @@ -934,7 +934,7 @@ _print_tens txa } -sub print_byte_hex (prefix: SC, ubyte: A) -> (?) { +sub print_byte_hex (prefix: Pc, ubyte: A) -> (?) { ; ---- print the byte in A in hex form (if Carry is set, a radix prefix '$' is printed as well) %asm {{ bcc + @@ -951,7 +951,7 @@ sub print_byte_hex (prefix: SC, ubyte: A) -> (?) { } -sub print_word_hex (prefix: SC, dataword: XY) -> (?) { +sub print_word_hex (prefix: Pc, dataword: XY) -> (?) { ; ---- print the (unsigned) word in X/Y in hexadecimal form (4 digits) ; (if Carry is set, a radix prefix '$' is printed as well) %asm {{