mirror of
https://github.com/irmen/prog8.git
synced 2024-09-07 03:54:27 +00:00
if statement
This commit is contained in:
parent
bd6a05df73
commit
397fdc61cd
@ -256,12 +256,11 @@ using a couple of instructions.
|
|||||||
Loops
|
Loops
|
||||||
-----
|
-----
|
||||||
|
|
||||||
The *for*-loop is used to iterate over a range of values. Iteration steps by 1,
|
The *for*-loop is used to iterate over a range of values. Iteration is done in steps of 1, but you can change this.
|
||||||
but you can set it to something else as well.
|
|
||||||
The *while*-loop is used to repeat a piece of code while a certain condition is still true.
|
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.
|
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
|
Conditional Execution
|
||||||
|
@ -275,7 +275,7 @@ The following names are reserved, they have a special meaning::
|
|||||||
|
|
||||||
A X Y ; 6502 hardware registers
|
A X Y ; 6502 hardware registers
|
||||||
AX AY XY ; 16-bit pseudo register pairs
|
AX AY XY ; 16-bit pseudo register pairs
|
||||||
SC SI SZ ; bits of the 6502 hardware status register
|
Pc Pi Pz Pn Pv ; bits of the 6502 hardware status register
|
||||||
|
|
||||||
|
|
||||||
Operators
|
Operators
|
||||||
@ -414,7 +414,9 @@ Loops
|
|||||||
|
|
||||||
for loop
|
for loop
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
@todo::
|
.. todo:: not implemented yet, for now you can use the if statement with gotos to implement a for-loop.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
for <loopvar> in <range> [ step <amount> ] {
|
for <loopvar> in <range> [ step <amount> ] {
|
||||||
; do something...
|
; do something...
|
||||||
@ -425,7 +427,9 @@ for loop
|
|||||||
|
|
||||||
while loop
|
while loop
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
@todo::
|
.. todo:: not implemented yet, for now you can use the if statement with gotos to implement a while-loop.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
while <condition> {
|
while <condition> {
|
||||||
; do something...
|
; do something...
|
||||||
@ -434,9 +438,12 @@ while loop
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
repeat--until 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 {
|
repeat {
|
||||||
; do something...
|
; do something...
|
||||||
@ -465,26 +472,14 @@ to another piece of code that eventually returns).
|
|||||||
conditional execution
|
conditional execution
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@todo::
|
With the 'if' / 'else' statement you can execute code depending on the value of a condition::
|
||||||
|
|
||||||
if <condition> goto <location>
|
if ( <expression> ) <statements> [else <statements> ]
|
||||||
if <condition> then <simple_stateument> [else <simple_statement> ]
|
|
||||||
|
|
||||||
if <condition> {
|
where <statements> can be just a single statement, or a block, such as this::
|
||||||
|
|
||||||
|
if ( <expression> ) {
|
||||||
<statements>
|
<statements>
|
||||||
}
|
} else {
|
||||||
[ else {
|
|
||||||
<alternative statements>
|
<alternative statements>
|
||||||
} ]
|
}
|
||||||
|
|
||||||
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.
|
|
||||||
|
@ -46,11 +46,7 @@ module : (modulestatement | EOL)* EOF ;
|
|||||||
|
|
||||||
modulestatement: directive | block ;
|
modulestatement: directive | block ;
|
||||||
|
|
||||||
block:
|
block: '~' identifier integerliteral? statement_block EOL ;
|
||||||
'~' identifier integerliteral? '{' EOL
|
|
||||||
(statement | EOL)*
|
|
||||||
'}' EOL
|
|
||||||
;
|
|
||||||
|
|
||||||
statement :
|
statement :
|
||||||
directive
|
directive
|
||||||
@ -63,6 +59,7 @@ statement :
|
|||||||
| unconditionaljump
|
| unconditionaljump
|
||||||
| postincrdecr
|
| postincrdecr
|
||||||
| functioncall_stmt
|
| functioncall_stmt
|
||||||
|
| if_stmt
|
||||||
| subroutine
|
| subroutine
|
||||||
| inlineasm
|
| inlineasm
|
||||||
| labeldef
|
| labeldef
|
||||||
@ -155,7 +152,7 @@ identifier : NAME ;
|
|||||||
|
|
||||||
scoped_identifier : NAME ('.' 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 ;
|
integerliteral : DEC_INTEGER | HEX_INTEGER | BIN_INTEGER ;
|
||||||
|
|
||||||
@ -179,21 +176,26 @@ inlineasm : '%asm' INLINEASMBLOCK;
|
|||||||
|
|
||||||
|
|
||||||
subroutine :
|
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
|
'{' EOL
|
||||||
(statement | EOL) *
|
(statement | EOL) *
|
||||||
'}' EOL
|
'}'
|
||||||
;
|
;
|
||||||
|
|
||||||
sub_address : '=' integerliteral ;
|
sub_address : '=' integerliteral ;
|
||||||
|
|
||||||
sub_params : sub_param (',' sub_param)* ;
|
sub_params : sub_param (',' sub_param)* ;
|
||||||
|
|
||||||
sub_param: identifier ':' register ;
|
sub_param: identifier ':' register;
|
||||||
|
|
||||||
sub_returns : '?' | ( sub_return (',' sub_return)* ) ;
|
sub_returns : '?' | ( sub_return (',' sub_return)* ) ;
|
||||||
|
|
||||||
sub_return: register '?'? ;
|
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
|
||||||
|
@ -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")
|
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_string("\nYou have ")
|
||||||
c64scr.print_byte_decimal(attempts_left)
|
c64scr.print_byte_decimal(attempts_left)
|
||||||
c64scr.print_string(" guess")
|
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? ")
|
c64scr.print_string(" left.\nWhat is your next guess? ")
|
||||||
Y = c64scr.input_chars(guess)
|
Y = c64scr.input_chars(guess)
|
||||||
c64.CHROUT("\n")
|
c64.CHROUT("\n")
|
||||||
freadstr_arg = guess
|
freadstr_arg = guess
|
||||||
c64.FREADSTR(A)
|
c64.FREADSTR(A)
|
||||||
AY = c64flt.GETADRAY()
|
AY = c64flt.GETADRAY()
|
||||||
A -= secretnumber ; @todo condition so we can do if guess > secretnumber....
|
if(A==secretnumber) {
|
||||||
; @todo (conditional): if_zero goto correct_guess
|
|
||||||
; @todo (conditional): if_gt goto too_high
|
|
||||||
c64scr.print_string("That is too ")
|
|
||||||
c64scr.print_string("low!\n")
|
|
||||||
goto continue
|
|
||||||
|
|
||||||
correct_guess:
|
|
||||||
c64scr.print_string("\nThat's my number, impressive!\n")
|
c64scr.print_string("\nThat's my number, impressive!\n")
|
||||||
goodbye()
|
goto goodbye
|
||||||
return
|
}
|
||||||
|
|
||||||
too_high:
|
|
||||||
c64scr.print_string("That is too ")
|
c64scr.print_string("That is too ")
|
||||||
|
if(A > secretnumber)
|
||||||
|
c64scr.print_string("low!\n")
|
||||||
|
else
|
||||||
c64scr.print_string("high!\n")
|
c64scr.print_string("high!\n")
|
||||||
|
|
||||||
continue:
|
|
||||||
attempts_left--
|
attempts_left--
|
||||||
; @todo (conditional): if_zero attempts_left goto game_over
|
if(attempts_left>0) goto ask_guess
|
||||||
goto printloop
|
|
||||||
|
|
||||||
game_over:
|
game_over:
|
||||||
c64scr.print_string("\nToo bad! It was: ")
|
c64scr.print_string("\nToo bad! It was: ")
|
||||||
c64scr.print_byte_decimal(secretnumber)
|
c64scr.print_byte_decimal(secretnumber)
|
||||||
c64.CHROUT("\n")
|
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")
|
c64scr.print_string("\nThanks for playing. Bye!\n")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -16,10 +16,34 @@
|
|||||||
const float zwop = -1.7014118345e+38
|
const float zwop = -1.7014118345e+38
|
||||||
const float zwop2 = -1.7014118345e+38
|
const float zwop2 = -1.7014118345e+38
|
||||||
const float blerp2 = zwop / 2.22
|
const float blerp2 = zwop / 2.22
|
||||||
|
const byte equal = 4==4
|
||||||
|
const byte equal2 = (4+hopla)>0
|
||||||
|
|
||||||
XY = hopla*2+hopla1
|
XY = hopla*2+hopla1
|
||||||
A = "derp" * %000100
|
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)
|
main.foo(1,2,3)
|
||||||
|
|
||||||
mega:
|
mega:
|
||||||
|
@ -26,9 +26,11 @@ enum class Register {
|
|||||||
AX,
|
AX,
|
||||||
AY,
|
AY,
|
||||||
XY,
|
XY,
|
||||||
SI,
|
PC,
|
||||||
SC,
|
PI,
|
||||||
SZ
|
PZ,
|
||||||
|
PN,
|
||||||
|
PV
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -91,6 +93,13 @@ interface IAstProcessor {
|
|||||||
fun process(jump: Jump): IStatement {
|
fun process(jump: Jump): IStatement {
|
||||||
return jump
|
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<IStatement>, var
|
||||||
|
elsepart: List<IStatement>) : 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 ****************/
|
/***************** 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 {
|
private fun il65Parser.BlockContext.toAst(withPosition: Boolean) : IStatement {
|
||||||
val block= Block(identifier().text,
|
val block= Block(identifier().text,
|
||||||
integerliteral()?.toAst(),
|
integerliteral()?.toAst(),
|
||||||
statement().map { it.toAst(withPosition) })
|
statement_block().toAst(withPosition))
|
||||||
block.position = toPosition(withPosition)
|
block.position = toPosition(withPosition)
|
||||||
return block
|
return block
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun il65Parser.Statement_blockContext.toAst(withPosition: Boolean): List<IStatement>
|
||||||
|
= statement().map { it.toAst(withPosition) }
|
||||||
|
|
||||||
|
|
||||||
private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatement {
|
private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatement {
|
||||||
val vardecl = vardecl()
|
val vardecl = vardecl()
|
||||||
if(vardecl!=null) {
|
if(vardecl!=null) {
|
||||||
@ -749,6 +778,12 @@ private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatemen
|
|||||||
val jump = unconditionaljump()?.toAst(withPosition)
|
val jump = unconditionaljump()?.toAst(withPosition)
|
||||||
if(jump!=null) return jump
|
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)
|
val returnstmt = returnstmt()?.toAst(withPosition)
|
||||||
if(returnstmt!=null) return returnstmt
|
if(returnstmt!=null) return returnstmt
|
||||||
|
|
||||||
@ -758,13 +793,9 @@ private fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatemen
|
|||||||
val asm = inlineasm()?.toAst(withPosition)
|
val asm = inlineasm()?.toAst(withPosition)
|
||||||
if(asm!=null) return asm
|
if(asm!=null) return asm
|
||||||
|
|
||||||
val fcall = functioncall_stmt()?.toAst(withPosition)
|
|
||||||
if(fcall!=null) return fcall
|
|
||||||
|
|
||||||
throw UnsupportedOperationException(text)
|
throw UnsupportedOperationException(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun il65Parser.Functioncall_stmtContext.toAst(withPosition: Boolean): IStatement {
|
private fun il65Parser.Functioncall_stmtContext.toAst(withPosition: Boolean): IStatement {
|
||||||
val location =
|
val location =
|
||||||
if(identifier()!=null) identifier()?.toAst(withPosition)
|
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_params()==null) emptyList() else sub_params().toAst(),
|
||||||
if(sub_returns()==null) emptyList() else sub_returns().toAst(),
|
if(sub_returns()==null) emptyList() else sub_returns().toAst(),
|
||||||
sub_address()?.integerliteral()?.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)
|
sub.position = toPosition(withPosition)
|
||||||
return sub
|
return sub
|
||||||
}
|
}
|
||||||
@ -989,3 +1020,16 @@ private fun il65Parser.BooleanliteralContext.toAst() = when(text) {
|
|||||||
private fun il65Parser.ArrayliteralContext.toAst(withPosition: Boolean) =
|
private fun il65Parser.ArrayliteralContext.toAst(withPosition: Boolean) =
|
||||||
expression().map { it.toAst(withPosition) }
|
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<IStatement> {
|
||||||
|
return statement_block()?.toAst(withPosition) ?: listOf(statement().toAst(withPosition))
|
||||||
|
}
|
||||||
|
@ -81,97 +81,105 @@ T__79=80
|
|||||||
T__80=81
|
T__80=81
|
||||||
T__81=82
|
T__81=82
|
||||||
T__82=83
|
T__82=83
|
||||||
LINECOMMENT=84
|
T__83=84
|
||||||
COMMENT=85
|
T__84=85
|
||||||
WS=86
|
T__85=86
|
||||||
EOL=87
|
T__86=87
|
||||||
NAME=88
|
LINECOMMENT=88
|
||||||
DEC_INTEGER=89
|
COMMENT=89
|
||||||
HEX_INTEGER=90
|
WS=90
|
||||||
BIN_INTEGER=91
|
EOL=91
|
||||||
FLOAT_NUMBER=92
|
NAME=92
|
||||||
STRING=93
|
DEC_INTEGER=93
|
||||||
INLINEASMBLOCK=94
|
HEX_INTEGER=94
|
||||||
|
BIN_INTEGER=95
|
||||||
|
FLOAT_NUMBER=96
|
||||||
|
STRING=97
|
||||||
|
INLINEASMBLOCK=98
|
||||||
'~'=1
|
'~'=1
|
||||||
'{'=2
|
':'=2
|
||||||
'}'=3
|
'goto'=3
|
||||||
':'=4
|
'%output'=4
|
||||||
'goto'=5
|
'%launcher'=5
|
||||||
'%output'=6
|
'%zp'=6
|
||||||
'%launcher'=7
|
'%address'=7
|
||||||
'%zp'=8
|
'%import'=8
|
||||||
'%address'=9
|
'%breakpoint'=9
|
||||||
'%import'=10
|
'%asminclude'=10
|
||||||
'%breakpoint'=11
|
'%asmbinary'=11
|
||||||
'%asminclude'=12
|
'%option'=12
|
||||||
'%asmbinary'=13
|
','=13
|
||||||
'%option'=14
|
'='=14
|
||||||
','=15
|
'const'=15
|
||||||
'='=16
|
'memory'=16
|
||||||
'const'=17
|
'byte'=17
|
||||||
'memory'=18
|
'word'=18
|
||||||
'byte'=19
|
'float'=19
|
||||||
'word'=20
|
'str'=20
|
||||||
'float'=21
|
'str_p'=21
|
||||||
'str'=22
|
'str_s'=22
|
||||||
'str_p'=23
|
'str_ps'=23
|
||||||
'str_s'=24
|
'['=24
|
||||||
'str_ps'=25
|
']'=25
|
||||||
'['=26
|
'+='=26
|
||||||
']'=27
|
'-='=27
|
||||||
'+='=28
|
'/='=28
|
||||||
'-='=29
|
'*='=29
|
||||||
'/='=30
|
'**='=30
|
||||||
'*='=31
|
'<<='=31
|
||||||
'**='=32
|
'>>='=32
|
||||||
'<<='=33
|
'<<@='=33
|
||||||
'>>='=34
|
'>>@='=34
|
||||||
'<<@='=35
|
'&='=35
|
||||||
'>>@='=36
|
'|='=36
|
||||||
'&='=37
|
'^='=37
|
||||||
'|='=38
|
'++'=38
|
||||||
'^='=39
|
'--'=39
|
||||||
'++'=40
|
'('=40
|
||||||
'--'=41
|
')'=41
|
||||||
'('=42
|
'+'=42
|
||||||
')'=43
|
'-'=43
|
||||||
'+'=44
|
'**'=44
|
||||||
'-'=45
|
'*'=45
|
||||||
'**'=46
|
'/'=46
|
||||||
'*'=47
|
'<<'=47
|
||||||
'/'=48
|
'>>'=48
|
||||||
'<<'=49
|
'<<@'=49
|
||||||
'>>'=50
|
'>>@'=50
|
||||||
'<<@'=51
|
'<'=51
|
||||||
'>>@'=52
|
'>'=52
|
||||||
'<'=53
|
'<='=53
|
||||||
'>'=54
|
'>='=54
|
||||||
'<='=55
|
'=='=55
|
||||||
'>='=56
|
'!='=56
|
||||||
'=='=57
|
'&'=57
|
||||||
'!='=58
|
'^'=58
|
||||||
'&'=59
|
'|'=59
|
||||||
'^'=60
|
'and'=60
|
||||||
'|'=61
|
'or'=61
|
||||||
'and'=62
|
'xor'=62
|
||||||
'or'=63
|
'not'=63
|
||||||
'xor'=64
|
'to'=64
|
||||||
'not'=65
|
'return'=65
|
||||||
'to'=66
|
'.'=66
|
||||||
'return'=67
|
'A'=67
|
||||||
'.'=68
|
'X'=68
|
||||||
'A'=69
|
'Y'=69
|
||||||
'X'=70
|
'AX'=70
|
||||||
'Y'=71
|
'AY'=71
|
||||||
'AX'=72
|
'XY'=72
|
||||||
'AY'=73
|
'Pc'=73
|
||||||
'XY'=74
|
'Pi'=74
|
||||||
'SC'=75
|
'Pz'=75
|
||||||
'SI'=76
|
'Pn'=76
|
||||||
'SZ'=77
|
'Pv'=77
|
||||||
'true'=78
|
'true'=78
|
||||||
'false'=79
|
'false'=79
|
||||||
'%asm'=80
|
'%asm'=80
|
||||||
'sub'=81
|
'sub'=81
|
||||||
'->'=82
|
'->'=82
|
||||||
'?'=83
|
'{'=83
|
||||||
|
'}'=84
|
||||||
|
'?'=85
|
||||||
|
'if'=86
|
||||||
|
'else'=87
|
||||||
|
@ -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__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__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__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,
|
T__80=81, T__81=82, T__82=83, T__83=84, T__84=85, T__85=86, T__86=87,
|
||||||
NAME=88, DEC_INTEGER=89, HEX_INTEGER=90, BIN_INTEGER=91, FLOAT_NUMBER=92,
|
LINECOMMENT=88, COMMENT=89, WS=90, EOL=91, NAME=92, DEC_INTEGER=93, HEX_INTEGER=94,
|
||||||
STRING=93, INLINEASMBLOCK=94;
|
BIN_INTEGER=95, FLOAT_NUMBER=96, STRING=97, INLINEASMBLOCK=98;
|
||||||
public static String[] channelNames = {
|
public static String[] channelNames = {
|
||||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
"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__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__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__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",
|
"T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "LINECOMMENT", "COMMENT",
|
||||||
"HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "FNUMBER", "STRING_ESCAPE_SEQ",
|
"WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER",
|
||||||
"STRING", "INLINEASMBLOCK"
|
"FNUMBER", "STRING_ESCAPE_SEQ", "STRING", "INLINEASMBLOCK"
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final String[] _LITERAL_NAMES = {
|
private static final String[] _LITERAL_NAMES = {
|
||||||
null, "'~'", "'{'", "'}'", "':'", "'goto'", "'%output'", "'%launcher'",
|
null, "'~'", "':'", "'goto'", "'%output'", "'%launcher'", "'%zp'", "'%address'",
|
||||||
"'%zp'", "'%address'", "'%import'", "'%breakpoint'", "'%asminclude'",
|
"'%import'", "'%breakpoint'", "'%asminclude'", "'%asmbinary'", "'%option'",
|
||||||
"'%asmbinary'", "'%option'", "','", "'='", "'const'", "'memory'", "'byte'",
|
"','", "'='", "'const'", "'memory'", "'byte'", "'word'", "'float'", "'str'",
|
||||||
"'word'", "'float'", "'str'", "'str_p'", "'str_s'", "'str_ps'", "'['",
|
"'str_p'", "'str_s'", "'str_ps'", "'['", "']'", "'+='", "'-='", "'/='",
|
||||||
"']'", "'+='", "'-='", "'/='", "'*='", "'**='", "'<<='", "'>>='", "'<<@='",
|
"'*='", "'**='", "'<<='", "'>>='", "'<<@='", "'>>@='", "'&='", "'|='",
|
||||||
"'>>@='", "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'",
|
"'^='", "'++'", "'--'", "'('", "')'", "'+'", "'-'", "'**'", "'*'", "'/'",
|
||||||
"'-'", "'**'", "'*'", "'/'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'",
|
"'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='",
|
||||||
"'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'", "'and'", "'or'",
|
"'!='", "'&'", "'^'", "'|'", "'and'", "'or'", "'xor'", "'not'", "'to'",
|
||||||
"'xor'", "'not'", "'to'", "'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'",
|
"'return'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'", "'Pc'",
|
||||||
"'AY'", "'XY'", "'SC'", "'SI'", "'SZ'", "'true'", "'false'", "'%asm'",
|
"'Pi'", "'Pz'", "'Pn'", "'Pv'", "'true'", "'false'", "'%asm'", "'sub'",
|
||||||
"'sub'", "'->'", "'?'"
|
"'->'", "'{'", "'}'", "'?'", "'if'", "'else'"
|
||||||
};
|
};
|
||||||
private static final String[] _SYMBOLIC_NAMES = {
|
private static final String[] _SYMBOLIC_NAMES = {
|
||||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||||
@ -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,
|
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",
|
null, null, null, null, "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME",
|
||||||
"BIN_INTEGER", "FLOAT_NUMBER", "STRING", "INLINEASMBLOCK"
|
"DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING",
|
||||||
|
"INLINEASMBLOCK"
|
||||||
};
|
};
|
||||||
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
|
||||||
|
|
||||||
@ -139,10 +140,10 @@ public class il65Lexer extends Lexer {
|
|||||||
@Override
|
@Override
|
||||||
public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
|
public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
|
||||||
switch (ruleIndex) {
|
switch (ruleIndex) {
|
||||||
case 94:
|
case 98:
|
||||||
STRING_action((RuleContext)_localctx, actionIndex);
|
STRING_action((RuleContext)_localctx, actionIndex);
|
||||||
break;
|
break;
|
||||||
case 95:
|
case 99:
|
||||||
INLINEASMBLOCK_action((RuleContext)_localctx, actionIndex);
|
INLINEASMBLOCK_action((RuleContext)_localctx, actionIndex);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -171,7 +172,7 @@ public class il65Lexer extends Lexer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String _serializedATN =
|
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"+
|
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
|
||||||
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
|
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
|
||||||
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
|
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
|
||||||
@ -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"+
|
"\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"+
|
"\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"+
|
"\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"+
|
"`\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\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"\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 "+
|
"\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"+
|
||||||
"\3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3$\3$\3%\3%\3%\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&\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*\3+\3+\3,\3,\3-\3-\3-\3.\3.\3/\3/\3\60\3\60\3\60\3\61\3\61\3\61\3"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"9\39\3:\3:\3:\3;\3;\3;\3<\3<\3=\3=\3>\3>\3?\3?\3?\3?\3@\3@\3@\3A\3A\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>"+
|
||||||
"A\3A\3B\3B\3B\3B\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3F\3F\3G\3G\3H\3"+
|
"\3>\3>\3?\3?\3?\3?\3@\3@\3@\3@\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3C\3C\3D"+
|
||||||
"H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3N\3N\3O\3O\3O\3O\3"+
|
"\3D\3E\3E\3F\3F\3G\3G\3G\3H\3H\3H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L"+
|
||||||
"O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3S\3S\3S\3T\3T\3U\3U\7"+
|
"\3M\3M\3M\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3R"+
|
||||||
"U\u0211\nU\fU\16U\u0214\13U\3U\3U\3U\3U\3V\3V\7V\u021c\nV\fV\16V\u021f"+
|
"\3R\3R\3R\3S\3S\3S\3T\3T\3U\3U\3V\3V\3W\3W\3W\3X\3X\3X\3X\3X\3Y\3Y\7Y"+
|
||||||
"\13V\3V\3V\3W\3W\3W\3W\3X\6X\u0228\nX\rX\16X\u0229\3Y\3Y\7Y\u022e\nY\f"+
|
"\u0227\nY\fY\16Y\u022a\13Y\3Y\3Y\3Y\3Y\3Z\3Z\7Z\u0232\nZ\fZ\16Z\u0235"+
|
||||||
"Y\16Y\u0231\13Y\3Z\3Z\3Z\6Z\u0236\nZ\rZ\16Z\u0237\5Z\u023a\nZ\3[\3[\6"+
|
"\13Z\3Z\3Z\3[\3[\3[\3[\3\\\6\\\u023e\n\\\r\\\16\\\u023f\3]\3]\7]\u0244"+
|
||||||
"[\u023e\n[\r[\16[\u023f\3\\\3\\\6\\\u0244\n\\\r\\\16\\\u0245\3]\3]\3]"+
|
"\n]\f]\16]\u0247\13]\3^\3^\3^\6^\u024c\n^\r^\16^\u024d\5^\u0250\n^\3_"+
|
||||||
"\5]\u024b\n]\3]\5]\u024e\n]\3^\6^\u0251\n^\r^\16^\u0252\3^\3^\6^\u0257"+
|
"\3_\6_\u0254\n_\r_\16_\u0255\3`\3`\6`\u025a\n`\r`\16`\u025b\3a\3a\3a\5"+
|
||||||
"\n^\r^\16^\u0258\5^\u025b\n^\3_\3_\3_\3_\5_\u0261\n_\3`\3`\3`\7`\u0266"+
|
"a\u0261\na\3a\5a\u0264\na\3b\6b\u0267\nb\rb\16b\u0268\3b\3b\6b\u026d\n"+
|
||||||
"\n`\f`\16`\u0269\13`\3`\3`\3`\3a\3a\3a\3a\6a\u0272\na\ra\16a\u0273\3a"+
|
"b\rb\16b\u026e\5b\u0271\nb\3c\3c\3c\3c\5c\u0277\nc\3d\3d\3d\7d\u027c\n"+
|
||||||
"\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"+
|
"d\fd\16d\u027f\13d\3d\3d\3d\3e\3e\3e\3e\6e\u0288\ne\re\16e\u0289\3e\3"+
|
||||||
"\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+
|
"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"+
|
||||||
"\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+
|
"\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33"+
|
||||||
"c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087"+
|
"\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63"+
|
||||||
"E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009b"+
|
"e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089"+
|
||||||
"O\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00af"+
|
"F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+
|
||||||
"Y\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb\2\u00bd\2\u00bf_\u00c1`\3"+
|
"P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+
|
||||||
"\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62;C\\aac|\5\2\62;CHc"+
|
"Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3\2\u00c5"+
|
||||||
"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"+
|
"\2\u00c7c\u00c9d\3\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62;"+
|
||||||
"\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"+
|
"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\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\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"+
|
||||||
"\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"+
|
"\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)\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\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\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\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\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"+
|
"\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"+
|
||||||
"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"+
|
"=\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\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\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\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"+
|
"\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"+
|
||||||
"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"+
|
"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"+
|
||||||
"\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\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\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"+
|
"\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"+
|
||||||
"\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\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\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"+
|
"\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\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2"+
|
"\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\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"+
|
"\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\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2"+
|
"\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\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"+
|
"\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"+
|
||||||
"\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\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c7\3\2\2"+
|
||||||
"\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\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"+
|
||||||
"\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"+
|
"\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"+
|
||||||
"%\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\23\u00fb\3\2\2\2\25\u0107\3\2\2\2\27\u0113\3\2\2\2\31\u011e\3\2"+
|
||||||
"\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\2\33\u0126\3\2\2\2\35\u0128\3\2\2\2\37\u012a\3\2\2\2!\u0130\3\2\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"+
|
"#\u0137\3\2\2\2%\u013c\3\2\2\2\'\u0141\3\2\2\2)\u0147\3\2\2\2+\u014b\3"+
|
||||||
"\3\2\2\2A\u016a\3\2\2\2C\u016e\3\2\2\2E\u0172\3\2\2\2G\u0176\3\2\2\2I"+
|
"\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"+
|
||||||
"\u017b\3\2\2\2K\u0180\3\2\2\2M\u0183\3\2\2\2O\u0186\3\2\2\2Q\u0189\3\2"+
|
"\65\u0162\3\2\2\2\67\u0165\3\2\2\29\u0168\3\2\2\2;\u016b\3\2\2\2=\u016e"+
|
||||||
"\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?\u0172\3\2\2\2A\u0176\3\2\2\2C\u017a\3\2\2\2E\u017f\3\2\2\2G"+
|
||||||
"\3\2\2\2]\u0197\3\2\2\2_\u019a\3\2\2\2a\u019c\3\2\2\2c\u019e\3\2\2\2e"+
|
"\u0184\3\2\2\2I\u0187\3\2\2\2K\u018a\3\2\2\2M\u018d\3\2\2\2O\u0190\3\2"+
|
||||||
"\u01a1\3\2\2\2g\u01a4\3\2\2\2i\u01a8\3\2\2\2k\u01ac\3\2\2\2m\u01ae\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"+
|
||||||
"\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\2[\u019e\3\2\2\2]\u01a0\3\2\2\2_\u01a2\3\2\2\2a\u01a5\3\2\2\2c"+
|
||||||
"\3\2\2\2y\u01be\3\2\2\2{\u01c0\3\2\2\2}\u01c2\3\2\2\2\177\u01c6\3\2\2"+
|
"\u01a8\3\2\2\2e\u01ac\3\2\2\2g\u01b0\3\2\2\2i\u01b2\3\2\2\2k\u01b4\3\2"+
|
||||||
"\2\u0081\u01c9\3\2\2\2\u0083\u01cd\3\2\2\2\u0085\u01d1\3\2\2\2\u0087\u01d4"+
|
"\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\2\u0089\u01db\3\2\2\2\u008b\u01dd\3\2\2\2\u008d\u01df\3\2\2\2\u008f"+
|
"\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"+
|
||||||
"\u01e1\3\2\2\2\u0091\u01e3\3\2\2\2\u0093\u01e6\3\2\2\2\u0095\u01e9\3\2"+
|
"\u01d1\3\2\2\2\u0081\u01d5\3\2\2\2\u0083\u01d8\3\2\2\2\u0085\u01df\3\2"+
|
||||||
"\2\2\u0097\u01ec\3\2\2\2\u0099\u01ef\3\2\2\2\u009b\u01f2\3\2\2\2\u009d"+
|
"\2\2\u0087\u01e1\3\2\2\2\u0089\u01e3\3\2\2\2\u008b\u01e5\3\2\2\2\u008d"+
|
||||||
"\u01f5\3\2\2\2\u009f\u01fa\3\2\2\2\u00a1\u0200\3\2\2\2\u00a3\u0205\3\2"+
|
"\u01e7\3\2\2\2\u008f\u01ea\3\2\2\2\u0091\u01ed\3\2\2\2\u0093\u01f0\3\2"+
|
||||||
"\2\2\u00a5\u0209\3\2\2\2\u00a7\u020c\3\2\2\2\u00a9\u020e\3\2\2\2\u00ab"+
|
"\2\2\u0095\u01f3\3\2\2\2\u0097\u01f6\3\2\2\2\u0099\u01f9\3\2\2\2\u009b"+
|
||||||
"\u0219\3\2\2\2\u00ad\u0222\3\2\2\2\u00af\u0227\3\2\2\2\u00b1\u022b\3\2"+
|
"\u01fc\3\2\2\2\u009d\u01ff\3\2\2\2\u009f\u0204\3\2\2\2\u00a1\u020a\3\2"+
|
||||||
"\2\2\u00b3\u0239\3\2\2\2\u00b5\u023b\3\2\2\2\u00b7\u0241\3\2\2\2\u00b9"+
|
"\2\2\u00a3\u020f\3\2\2\2\u00a5\u0213\3\2\2\2\u00a7\u0216\3\2\2\2\u00a9"+
|
||||||
"\u0247\3\2\2\2\u00bb\u0250\3\2\2\2\u00bd\u0260\3\2\2\2\u00bf\u0262\3\2"+
|
"\u0218\3\2\2\2\u00ab\u021a\3\2\2\2\u00ad\u021c\3\2\2\2\u00af\u021f\3\2"+
|
||||||
"\2\2\u00c1\u026d\3\2\2\2\u00c3\u00c4\7\u0080\2\2\u00c4\4\3\2\2\2\u00c5"+
|
"\2\2\u00b1\u0224\3\2\2\2\u00b3\u022f\3\2\2\2\u00b5\u0238\3\2\2\2\u00b7"+
|
||||||
"\u00c6\7}\2\2\u00c6\6\3\2\2\2\u00c7\u00c8\7\177\2\2\u00c8\b\3\2\2\2\u00c9"+
|
"\u023d\3\2\2\2\u00b9\u0241\3\2\2\2\u00bb\u024f\3\2\2\2\u00bd\u0251\3\2"+
|
||||||
"\u00ca\7<\2\2\u00ca\n\3\2\2\2\u00cb\u00cc\7i\2\2\u00cc\u00cd\7q\2\2\u00cd"+
|
"\2\2\u00bf\u0257\3\2\2\2\u00c1\u025d\3\2\2\2\u00c3\u0266\3\2\2\2\u00c5"+
|
||||||
"\u00ce\7v\2\2\u00ce\u00cf\7q\2\2\u00cf\f\3\2\2\2\u00d0\u00d1\7\'\2\2\u00d1"+
|
"\u0276\3\2\2\2\u00c7\u0278\3\2\2\2\u00c9\u0283\3\2\2\2\u00cb\u00cc\7\u0080"+
|
||||||
"\u00d2\7q\2\2\u00d2\u00d3\7w\2\2\u00d3\u00d4\7v\2\2\u00d4\u00d5\7r\2\2"+
|
"\2\2\u00cc\4\3\2\2\2\u00cd\u00ce\7<\2\2\u00ce\6\3\2\2\2\u00cf\u00d0\7"+
|
||||||
"\u00d5\u00d6\7w\2\2\u00d6\u00d7\7v\2\2\u00d7\16\3\2\2\2\u00d8\u00d9\7"+
|
"i\2\2\u00d0\u00d1\7q\2\2\u00d1\u00d2\7v\2\2\u00d2\u00d3\7q\2\2\u00d3\b"+
|
||||||
"\'\2\2\u00d9\u00da\7n\2\2\u00da\u00db\7c\2\2\u00db\u00dc\7w\2\2\u00dc"+
|
"\3\2\2\2\u00d4\u00d5\7\'\2\2\u00d5\u00d6\7q\2\2\u00d6\u00d7\7w\2\2\u00d7"+
|
||||||
"\u00dd\7p\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7j\2\2\u00df\u00e0\7g\2\2"+
|
"\u00d8\7v\2\2\u00d8\u00d9\7r\2\2\u00d9\u00da\7w\2\2\u00da\u00db\7v\2\2"+
|
||||||
"\u00e0\u00e1\7t\2\2\u00e1\20\3\2\2\2\u00e2\u00e3\7\'\2\2\u00e3\u00e4\7"+
|
"\u00db\n\3\2\2\2\u00dc\u00dd\7\'\2\2\u00dd\u00de\7n\2\2\u00de\u00df\7"+
|
||||||
"|\2\2\u00e4\u00e5\7r\2\2\u00e5\22\3\2\2\2\u00e6\u00e7\7\'\2\2\u00e7\u00e8"+
|
"c\2\2\u00df\u00e0\7w\2\2\u00e0\u00e1\7p\2\2\u00e1\u00e2\7e\2\2\u00e2\u00e3"+
|
||||||
"\7c\2\2\u00e8\u00e9\7f\2\2\u00e9\u00ea\7f\2\2\u00ea\u00eb\7t\2\2\u00eb"+
|
"\7j\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7t\2\2\u00e5\f\3\2\2\2\u00e6\u00e7"+
|
||||||
"\u00ec\7g\2\2\u00ec\u00ed\7u\2\2\u00ed\u00ee\7u\2\2\u00ee\24\3\2\2\2\u00ef"+
|
"\7\'\2\2\u00e7\u00e8\7|\2\2\u00e8\u00e9\7r\2\2\u00e9\16\3\2\2\2\u00ea"+
|
||||||
"\u00f0\7\'\2\2\u00f0\u00f1\7k\2\2\u00f1\u00f2\7o\2\2\u00f2\u00f3\7r\2"+
|
"\u00eb\7\'\2\2\u00eb\u00ec\7c\2\2\u00ec\u00ed\7f\2\2\u00ed\u00ee\7f\2"+
|
||||||
"\2\u00f3\u00f4\7q\2\2\u00f4\u00f5\7t\2\2\u00f5\u00f6\7v\2\2\u00f6\26\3"+
|
"\2\u00ee\u00ef\7t\2\2\u00ef\u00f0\7g\2\2\u00f0\u00f1\7u\2\2\u00f1\u00f2"+
|
||||||
"\2\2\2\u00f7\u00f8\7\'\2\2\u00f8\u00f9\7d\2\2\u00f9\u00fa\7t\2\2\u00fa"+
|
"\7u\2\2\u00f2\20\3\2\2\2\u00f3\u00f4\7\'\2\2\u00f4\u00f5\7k\2\2\u00f5"+
|
||||||
"\u00fb\7g\2\2\u00fb\u00fc\7c\2\2\u00fc\u00fd\7m\2\2\u00fd\u00fe\7r\2\2"+
|
"\u00f6\7o\2\2\u00f6\u00f7\7r\2\2\u00f7\u00f8\7q\2\2\u00f8\u00f9\7t\2\2"+
|
||||||
"\u00fe\u00ff\7q\2\2\u00ff\u0100\7k\2\2\u0100\u0101\7p\2\2\u0101\u0102"+
|
"\u00f9\u00fa\7v\2\2\u00fa\22\3\2\2\2\u00fb\u00fc\7\'\2\2\u00fc\u00fd\7"+
|
||||||
"\7v\2\2\u0102\30\3\2\2\2\u0103\u0104\7\'\2\2\u0104\u0105\7c\2\2\u0105"+
|
"d\2\2\u00fd\u00fe\7t\2\2\u00fe\u00ff\7g\2\2\u00ff\u0100\7c\2\2\u0100\u0101"+
|
||||||
"\u0106\7u\2\2\u0106\u0107\7o\2\2\u0107\u0108\7k\2\2\u0108\u0109\7p\2\2"+
|
"\7m\2\2\u0101\u0102\7r\2\2\u0102\u0103\7q\2\2\u0103\u0104\7k\2\2\u0104"+
|
||||||
"\u0109\u010a\7e\2\2\u010a\u010b\7n\2\2\u010b\u010c\7w\2\2\u010c\u010d"+
|
"\u0105\7p\2\2\u0105\u0106\7v\2\2\u0106\24\3\2\2\2\u0107\u0108\7\'\2\2"+
|
||||||
"\7f\2\2\u010d\u010e\7g\2\2\u010e\32\3\2\2\2\u010f\u0110\7\'\2\2\u0110"+
|
"\u0108\u0109\7c\2\2\u0109\u010a\7u\2\2\u010a\u010b\7o\2\2\u010b\u010c"+
|
||||||
"\u0111\7c\2\2\u0111\u0112\7u\2\2\u0112\u0113\7o\2\2\u0113\u0114\7d\2\2"+
|
"\7k\2\2\u010c\u010d\7p\2\2\u010d\u010e\7e\2\2\u010e\u010f\7n\2\2\u010f"+
|
||||||
"\u0114\u0115\7k\2\2\u0115\u0116\7p\2\2\u0116\u0117\7c\2\2\u0117\u0118"+
|
"\u0110\7w\2\2\u0110\u0111\7f\2\2\u0111\u0112\7g\2\2\u0112\26\3\2\2\2\u0113"+
|
||||||
"\7t\2\2\u0118\u0119\7{\2\2\u0119\34\3\2\2\2\u011a\u011b\7\'\2\2\u011b"+
|
"\u0114\7\'\2\2\u0114\u0115\7c\2\2\u0115\u0116\7u\2\2\u0116\u0117\7o\2"+
|
||||||
"\u011c\7q\2\2\u011c\u011d\7r\2\2\u011d\u011e\7v\2\2\u011e\u011f\7k\2\2"+
|
"\2\u0117\u0118\7d\2\2\u0118\u0119\7k\2\2\u0119\u011a\7p\2\2\u011a\u011b"+
|
||||||
"\u011f\u0120\7q\2\2\u0120\u0121\7p\2\2\u0121\36\3\2\2\2\u0122\u0123\7"+
|
"\7c\2\2\u011b\u011c\7t\2\2\u011c\u011d\7{\2\2\u011d\30\3\2\2\2\u011e\u011f"+
|
||||||
".\2\2\u0123 \3\2\2\2\u0124\u0125\7?\2\2\u0125\"\3\2\2\2\u0126\u0127\7"+
|
"\7\'\2\2\u011f\u0120\7q\2\2\u0120\u0121\7r\2\2\u0121\u0122\7v\2\2\u0122"+
|
||||||
"e\2\2\u0127\u0128\7q\2\2\u0128\u0129\7p\2\2\u0129\u012a\7u\2\2\u012a\u012b"+
|
"\u0123\7k\2\2\u0123\u0124\7q\2\2\u0124\u0125\7p\2\2\u0125\32\3\2\2\2\u0126"+
|
||||||
"\7v\2\2\u012b$\3\2\2\2\u012c\u012d\7o\2\2\u012d\u012e\7g\2\2\u012e\u012f"+
|
"\u0127\7.\2\2\u0127\34\3\2\2\2\u0128\u0129\7?\2\2\u0129\36\3\2\2\2\u012a"+
|
||||||
"\7o\2\2\u012f\u0130\7q\2\2\u0130\u0131\7t\2\2\u0131\u0132\7{\2\2\u0132"+
|
"\u012b\7e\2\2\u012b\u012c\7q\2\2\u012c\u012d\7p\2\2\u012d\u012e\7u\2\2"+
|
||||||
"&\3\2\2\2\u0133\u0134\7d\2\2\u0134\u0135\7{\2\2\u0135\u0136\7v\2\2\u0136"+
|
"\u012e\u012f\7v\2\2\u012f \3\2\2\2\u0130\u0131\7o\2\2\u0131\u0132\7g\2"+
|
||||||
"\u0137\7g\2\2\u0137(\3\2\2\2\u0138\u0139\7y\2\2\u0139\u013a\7q\2\2\u013a"+
|
"\2\u0132\u0133\7o\2\2\u0133\u0134\7q\2\2\u0134\u0135\7t\2\2\u0135\u0136"+
|
||||||
"\u013b\7t\2\2\u013b\u013c\7f\2\2\u013c*\3\2\2\2\u013d\u013e\7h\2\2\u013e"+
|
"\7{\2\2\u0136\"\3\2\2\2\u0137\u0138\7d\2\2\u0138\u0139\7{\2\2\u0139\u013a"+
|
||||||
"\u013f\7n\2\2\u013f\u0140\7q\2\2\u0140\u0141\7c\2\2\u0141\u0142\7v\2\2"+
|
"\7v\2\2\u013a\u013b\7g\2\2\u013b$\3\2\2\2\u013c\u013d\7y\2\2\u013d\u013e"+
|
||||||
"\u0142,\3\2\2\2\u0143\u0144\7u\2\2\u0144\u0145\7v\2\2\u0145\u0146\7t\2"+
|
"\7q\2\2\u013e\u013f\7t\2\2\u013f\u0140\7f\2\2\u0140&\3\2\2\2\u0141\u0142"+
|
||||||
"\2\u0146.\3\2\2\2\u0147\u0148\7u\2\2\u0148\u0149\7v\2\2\u0149\u014a\7"+
|
"\7h\2\2\u0142\u0143\7n\2\2\u0143\u0144\7q\2\2\u0144\u0145\7c\2\2\u0145"+
|
||||||
"t\2\2\u014a\u014b\7a\2\2\u014b\u014c\7r\2\2\u014c\60\3\2\2\2\u014d\u014e"+
|
"\u0146\7v\2\2\u0146(\3\2\2\2\u0147\u0148\7u\2\2\u0148\u0149\7v\2\2\u0149"+
|
||||||
"\7u\2\2\u014e\u014f\7v\2\2\u014f\u0150\7t\2\2\u0150\u0151\7a\2\2\u0151"+
|
"\u014a\7t\2\2\u014a*\3\2\2\2\u014b\u014c\7u\2\2\u014c\u014d\7v\2\2\u014d"+
|
||||||
"\u0152\7u\2\2\u0152\62\3\2\2\2\u0153\u0154\7u\2\2\u0154\u0155\7v\2\2\u0155"+
|
"\u014e\7t\2\2\u014e\u014f\7a\2\2\u014f\u0150\7r\2\2\u0150,\3\2\2\2\u0151"+
|
||||||
"\u0156\7t\2\2\u0156\u0157\7a\2\2\u0157\u0158\7r\2\2\u0158\u0159\7u\2\2"+
|
"\u0152\7u\2\2\u0152\u0153\7v\2\2\u0153\u0154\7t\2\2\u0154\u0155\7a\2\2"+
|
||||||
"\u0159\64\3\2\2\2\u015a\u015b\7]\2\2\u015b\66\3\2\2\2\u015c\u015d\7_\2"+
|
"\u0155\u0156\7u\2\2\u0156.\3\2\2\2\u0157\u0158\7u\2\2\u0158\u0159\7v\2"+
|
||||||
"\2\u015d8\3\2\2\2\u015e\u015f\7-\2\2\u015f\u0160\7?\2\2\u0160:\3\2\2\2"+
|
"\2\u0159\u015a\7t\2\2\u015a\u015b\7a\2\2\u015b\u015c\7r\2\2\u015c\u015d"+
|
||||||
"\u0161\u0162\7/\2\2\u0162\u0163\7?\2\2\u0163<\3\2\2\2\u0164\u0165\7\61"+
|
"\7u\2\2\u015d\60\3\2\2\2\u015e\u015f\7]\2\2\u015f\62\3\2\2\2\u0160\u0161"+
|
||||||
"\2\2\u0165\u0166\7?\2\2\u0166>\3\2\2\2\u0167\u0168\7,\2\2\u0168\u0169"+
|
"\7_\2\2\u0161\64\3\2\2\2\u0162\u0163\7-\2\2\u0163\u0164\7?\2\2\u0164\66"+
|
||||||
"\7?\2\2\u0169@\3\2\2\2\u016a\u016b\7,\2\2\u016b\u016c\7,\2\2\u016c\u016d"+
|
"\3\2\2\2\u0165\u0166\7/\2\2\u0166\u0167\7?\2\2\u01678\3\2\2\2\u0168\u0169"+
|
||||||
"\7?\2\2\u016dB\3\2\2\2\u016e\u016f\7>\2\2\u016f\u0170\7>\2\2\u0170\u0171"+
|
"\7\61\2\2\u0169\u016a\7?\2\2\u016a:\3\2\2\2\u016b\u016c\7,\2\2\u016c\u016d"+
|
||||||
"\7?\2\2\u0171D\3\2\2\2\u0172\u0173\7@\2\2\u0173\u0174\7@\2\2\u0174\u0175"+
|
"\7?\2\2\u016d<\3\2\2\2\u016e\u016f\7,\2\2\u016f\u0170\7,\2\2\u0170\u0171"+
|
||||||
"\7?\2\2\u0175F\3\2\2\2\u0176\u0177\7>\2\2\u0177\u0178\7>\2\2\u0178\u0179"+
|
"\7?\2\2\u0171>\3\2\2\2\u0172\u0173\7>\2\2\u0173\u0174\7>\2\2\u0174\u0175"+
|
||||||
"\7B\2\2\u0179\u017a\7?\2\2\u017aH\3\2\2\2\u017b\u017c\7@\2\2\u017c\u017d"+
|
"\7?\2\2\u0175@\3\2\2\2\u0176\u0177\7@\2\2\u0177\u0178\7@\2\2\u0178\u0179"+
|
||||||
"\7@\2\2\u017d\u017e\7B\2\2\u017e\u017f\7?\2\2\u017fJ\3\2\2\2\u0180\u0181"+
|
"\7?\2\2\u0179B\3\2\2\2\u017a\u017b\7>\2\2\u017b\u017c\7>\2\2\u017c\u017d"+
|
||||||
"\7(\2\2\u0181\u0182\7?\2\2\u0182L\3\2\2\2\u0183\u0184\7~\2\2\u0184\u0185"+
|
"\7B\2\2\u017d\u017e\7?\2\2\u017eD\3\2\2\2\u017f\u0180\7@\2\2\u0180\u0181"+
|
||||||
"\7?\2\2\u0185N\3\2\2\2\u0186\u0187\7`\2\2\u0187\u0188\7?\2\2\u0188P\3"+
|
"\7@\2\2\u0181\u0182\7B\2\2\u0182\u0183\7?\2\2\u0183F\3\2\2\2\u0184\u0185"+
|
||||||
"\2\2\2\u0189\u018a\7-\2\2\u018a\u018b\7-\2\2\u018bR\3\2\2\2\u018c\u018d"+
|
"\7(\2\2\u0185\u0186\7?\2\2\u0186H\3\2\2\2\u0187\u0188\7~\2\2\u0188\u0189"+
|
||||||
"\7/\2\2\u018d\u018e\7/\2\2\u018eT\3\2\2\2\u018f\u0190\7*\2\2\u0190V\3"+
|
"\7?\2\2\u0189J\3\2\2\2\u018a\u018b\7`\2\2\u018b\u018c\7?\2\2\u018cL\3"+
|
||||||
"\2\2\2\u0191\u0192\7+\2\2\u0192X\3\2\2\2\u0193\u0194\7-\2\2\u0194Z\3\2"+
|
"\2\2\2\u018d\u018e\7-\2\2\u018e\u018f\7-\2\2\u018fN\3\2\2\2\u0190\u0191"+
|
||||||
"\2\2\u0195\u0196\7/\2\2\u0196\\\3\2\2\2\u0197\u0198\7,\2\2\u0198\u0199"+
|
"\7/\2\2\u0191\u0192\7/\2\2\u0192P\3\2\2\2\u0193\u0194\7*\2\2\u0194R\3"+
|
||||||
"\7,\2\2\u0199^\3\2\2\2\u019a\u019b\7,\2\2\u019b`\3\2\2\2\u019c\u019d\7"+
|
"\2\2\2\u0195\u0196\7+\2\2\u0196T\3\2\2\2\u0197\u0198\7-\2\2\u0198V\3\2"+
|
||||||
"\61\2\2\u019db\3\2\2\2\u019e\u019f\7>\2\2\u019f\u01a0\7>\2\2\u01a0d\3"+
|
"\2\2\u0199\u019a\7/\2\2\u019aX\3\2\2\2\u019b\u019c\7,\2\2\u019c\u019d"+
|
||||||
"\2\2\2\u01a1\u01a2\7@\2\2\u01a2\u01a3\7@\2\2\u01a3f\3\2\2\2\u01a4\u01a5"+
|
"\7,\2\2\u019dZ\3\2\2\2\u019e\u019f\7,\2\2\u019f\\\3\2\2\2\u01a0\u01a1"+
|
||||||
"\7>\2\2\u01a5\u01a6\7>\2\2\u01a6\u01a7\7B\2\2\u01a7h\3\2\2\2\u01a8\u01a9"+
|
"\7\61\2\2\u01a1^\3\2\2\2\u01a2\u01a3\7>\2\2\u01a3\u01a4\7>\2\2\u01a4`"+
|
||||||
"\7@\2\2\u01a9\u01aa\7@\2\2\u01aa\u01ab\7B\2\2\u01abj\3\2\2\2\u01ac\u01ad"+
|
"\3\2\2\2\u01a5\u01a6\7@\2\2\u01a6\u01a7\7@\2\2\u01a7b\3\2\2\2\u01a8\u01a9"+
|
||||||
"\7>\2\2\u01adl\3\2\2\2\u01ae\u01af\7@\2\2\u01afn\3\2\2\2\u01b0\u01b1\7"+
|
"\7>\2\2\u01a9\u01aa\7>\2\2\u01aa\u01ab\7B\2\2\u01abd\3\2\2\2\u01ac\u01ad"+
|
||||||
">\2\2\u01b1\u01b2\7?\2\2\u01b2p\3\2\2\2\u01b3\u01b4\7@\2\2\u01b4\u01b5"+
|
"\7@\2\2\u01ad\u01ae\7@\2\2\u01ae\u01af\7B\2\2\u01aff\3\2\2\2\u01b0\u01b1"+
|
||||||
"\7?\2\2\u01b5r\3\2\2\2\u01b6\u01b7\7?\2\2\u01b7\u01b8\7?\2\2\u01b8t\3"+
|
"\7>\2\2\u01b1h\3\2\2\2\u01b2\u01b3\7@\2\2\u01b3j\3\2\2\2\u01b4\u01b5\7"+
|
||||||
"\2\2\2\u01b9\u01ba\7#\2\2\u01ba\u01bb\7?\2\2\u01bbv\3\2\2\2\u01bc\u01bd"+
|
">\2\2\u01b5\u01b6\7?\2\2\u01b6l\3\2\2\2\u01b7\u01b8\7@\2\2\u01b8\u01b9"+
|
||||||
"\7(\2\2\u01bdx\3\2\2\2\u01be\u01bf\7`\2\2\u01bfz\3\2\2\2\u01c0\u01c1\7"+
|
"\7?\2\2\u01b9n\3\2\2\2\u01ba\u01bb\7?\2\2\u01bb\u01bc\7?\2\2\u01bcp\3"+
|
||||||
"~\2\2\u01c1|\3\2\2\2\u01c2\u01c3\7c\2\2\u01c3\u01c4\7p\2\2\u01c4\u01c5"+
|
"\2\2\2\u01bd\u01be\7#\2\2\u01be\u01bf\7?\2\2\u01bfr\3\2\2\2\u01c0\u01c1"+
|
||||||
"\7f\2\2\u01c5~\3\2\2\2\u01c6\u01c7\7q\2\2\u01c7\u01c8\7t\2\2\u01c8\u0080"+
|
"\7(\2\2\u01c1t\3\2\2\2\u01c2\u01c3\7`\2\2\u01c3v\3\2\2\2\u01c4\u01c5\7"+
|
||||||
"\3\2\2\2\u01c9\u01ca\7z\2\2\u01ca\u01cb\7q\2\2\u01cb\u01cc\7t\2\2\u01cc"+
|
"~\2\2\u01c5x\3\2\2\2\u01c6\u01c7\7c\2\2\u01c7\u01c8\7p\2\2\u01c8\u01c9"+
|
||||||
"\u0082\3\2\2\2\u01cd\u01ce\7p\2\2\u01ce\u01cf\7q\2\2\u01cf\u01d0\7v\2"+
|
"\7f\2\2\u01c9z\3\2\2\2\u01ca\u01cb\7q\2\2\u01cb\u01cc\7t\2\2\u01cc|\3"+
|
||||||
"\2\u01d0\u0084\3\2\2\2\u01d1\u01d2\7v\2\2\u01d2\u01d3\7q\2\2\u01d3\u0086"+
|
"\2\2\2\u01cd\u01ce\7z\2\2\u01ce\u01cf\7q\2\2\u01cf\u01d0\7t\2\2\u01d0"+
|
||||||
"\3\2\2\2\u01d4\u01d5\7t\2\2\u01d5\u01d6\7g\2\2\u01d6\u01d7\7v\2\2\u01d7"+
|
"~\3\2\2\2\u01d1\u01d2\7p\2\2\u01d2\u01d3\7q\2\2\u01d3\u01d4\7v\2\2\u01d4"+
|
||||||
"\u01d8\7w\2\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7p\2\2\u01da\u0088\3\2\2"+
|
"\u0080\3\2\2\2\u01d5\u01d6\7v\2\2\u01d6\u01d7\7q\2\2\u01d7\u0082\3\2\2"+
|
||||||
"\2\u01db\u01dc\7\60\2\2\u01dc\u008a\3\2\2\2\u01dd\u01de\7C\2\2\u01de\u008c"+
|
"\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7g\2\2\u01da\u01db\7v\2\2\u01db\u01dc"+
|
||||||
"\3\2\2\2\u01df\u01e0\7Z\2\2\u01e0\u008e\3\2\2\2\u01e1\u01e2\7[\2\2\u01e2"+
|
"\7w\2\2\u01dc\u01dd\7t\2\2\u01dd\u01de\7p\2\2\u01de\u0084\3\2\2\2\u01df"+
|
||||||
"\u0090\3\2\2\2\u01e3\u01e4\7C\2\2\u01e4\u01e5\7Z\2\2\u01e5\u0092\3\2\2"+
|
"\u01e0\7\60\2\2\u01e0\u0086\3\2\2\2\u01e1\u01e2\7C\2\2\u01e2\u0088\3\2"+
|
||||||
"\2\u01e6\u01e7\7C\2\2\u01e7\u01e8\7[\2\2\u01e8\u0094\3\2\2\2\u01e9\u01ea"+
|
"\2\2\u01e3\u01e4\7Z\2\2\u01e4\u008a\3\2\2\2\u01e5\u01e6\7[\2\2\u01e6\u008c"+
|
||||||
"\7Z\2\2\u01ea\u01eb\7[\2\2\u01eb\u0096\3\2\2\2\u01ec\u01ed\7U\2\2\u01ed"+
|
"\3\2\2\2\u01e7\u01e8\7C\2\2\u01e8\u01e9\7Z\2\2\u01e9\u008e\3\2\2\2\u01ea"+
|
||||||
"\u01ee\7E\2\2\u01ee\u0098\3\2\2\2\u01ef\u01f0\7U\2\2\u01f0\u01f1\7K\2"+
|
"\u01eb\7C\2\2\u01eb\u01ec\7[\2\2\u01ec\u0090\3\2\2\2\u01ed\u01ee\7Z\2"+
|
||||||
"\2\u01f1\u009a\3\2\2\2\u01f2\u01f3\7U\2\2\u01f3\u01f4\7\\\2\2\u01f4\u009c"+
|
"\2\u01ee\u01ef\7[\2\2\u01ef\u0092\3\2\2\2\u01f0\u01f1\7R\2\2\u01f1\u01f2"+
|
||||||
"\3\2\2\2\u01f5\u01f6\7v\2\2\u01f6\u01f7\7t\2\2\u01f7\u01f8\7w\2\2\u01f8"+
|
"\7e\2\2\u01f2\u0094\3\2\2\2\u01f3\u01f4\7R\2\2\u01f4\u01f5\7k\2\2\u01f5"+
|
||||||
"\u01f9\7g\2\2\u01f9\u009e\3\2\2\2\u01fa\u01fb\7h\2\2\u01fb\u01fc\7c\2"+
|
"\u0096\3\2\2\2\u01f6\u01f7\7R\2\2\u01f7\u01f8\7|\2\2\u01f8\u0098\3\2\2"+
|
||||||
"\2\u01fc\u01fd\7n\2\2\u01fd\u01fe\7u\2\2\u01fe\u01ff\7g\2\2\u01ff\u00a0"+
|
"\2\u01f9\u01fa\7R\2\2\u01fa\u01fb\7p\2\2\u01fb\u009a\3\2\2\2\u01fc\u01fd"+
|
||||||
"\3\2\2\2\u0200\u0201\7\'\2\2\u0201\u0202\7c\2\2\u0202\u0203\7u\2\2\u0203"+
|
"\7R\2\2\u01fd\u01fe\7x\2\2\u01fe\u009c\3\2\2\2\u01ff\u0200\7v\2\2\u0200"+
|
||||||
"\u0204\7o\2\2\u0204\u00a2\3\2\2\2\u0205\u0206\7u\2\2\u0206\u0207\7w\2"+
|
"\u0201\7t\2\2\u0201\u0202\7w\2\2\u0202\u0203\7g\2\2\u0203\u009e\3\2\2"+
|
||||||
"\2\u0207\u0208\7d\2\2\u0208\u00a4\3\2\2\2\u0209\u020a\7/\2\2\u020a\u020b"+
|
"\2\u0204\u0205\7h\2\2\u0205\u0206\7c\2\2\u0206\u0207\7n\2\2\u0207\u0208"+
|
||||||
"\7@\2\2\u020b\u00a6\3\2\2\2\u020c\u020d\7A\2\2\u020d\u00a8\3\2\2\2\u020e"+
|
"\7u\2\2\u0208\u0209\7g\2\2\u0209\u00a0\3\2\2\2\u020a\u020b\7\'\2\2\u020b"+
|
||||||
"\u0212\t\2\2\2\u020f\u0211\t\3\2\2\u0210\u020f\3\2\2\2\u0211\u0214\3\2"+
|
"\u020c\7c\2\2\u020c\u020d\7u\2\2\u020d\u020e\7o\2\2\u020e\u00a2\3\2\2"+
|
||||||
"\2\2\u0212\u0210\3\2\2\2\u0212\u0213\3\2\2\2\u0213\u0215\3\2\2\2\u0214"+
|
"\2\u020f\u0210\7u\2\2\u0210\u0211\7w\2\2\u0211\u0212\7d\2\2\u0212\u00a4"+
|
||||||
"\u0212\3\2\2\2\u0215\u0216\5\u00abV\2\u0216\u0217\3\2\2\2\u0217\u0218"+
|
"\3\2\2\2\u0213\u0214\7/\2\2\u0214\u0215\7@\2\2\u0215\u00a6\3\2\2\2\u0216"+
|
||||||
"\bU\2\2\u0218\u00aa\3\2\2\2\u0219\u021d\7=\2\2\u021a\u021c\n\2\2\2\u021b"+
|
"\u0217\7}\2\2\u0217\u00a8\3\2\2\2\u0218\u0219\7\177\2\2\u0219\u00aa\3"+
|
||||||
"\u021a\3\2\2\2\u021c\u021f\3\2\2\2\u021d\u021b\3\2\2\2\u021d\u021e\3\2"+
|
"\2\2\2\u021a\u021b\7A\2\2\u021b\u00ac\3\2\2\2\u021c\u021d\7k\2\2\u021d"+
|
||||||
"\2\2\u021e\u0220\3\2\2\2\u021f\u021d\3\2\2\2\u0220\u0221\bV\2\2\u0221"+
|
"\u021e\7h\2\2\u021e\u00ae\3\2\2\2\u021f\u0220\7g\2\2\u0220\u0221\7n\2"+
|
||||||
"\u00ac\3\2\2\2\u0222\u0223\t\3\2\2\u0223\u0224\3\2\2\2\u0224\u0225\bW"+
|
"\2\u0221\u0222\7u\2\2\u0222\u0223\7g\2\2\u0223\u00b0\3\2\2\2\u0224\u0228"+
|
||||||
"\3\2\u0225\u00ae\3\2\2\2\u0226\u0228\t\2\2\2\u0227\u0226\3\2\2\2\u0228"+
|
"\t\2\2\2\u0225\u0227\t\3\2\2\u0226\u0225\3\2\2\2\u0227\u022a\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"+
|
"\u0226\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022b\3\2\2\2\u022a\u0228\3\2"+
|
||||||
"\2\2\u022b\u022f\t\4\2\2\u022c\u022e\t\5\2\2\u022d\u022c\3\2\2\2\u022e"+
|
"\2\2\u022b\u022c\5\u00b3Z\2\u022c\u022d\3\2\2\2\u022d\u022e\bY\2\2\u022e"+
|
||||||
"\u0231\3\2\2\2\u022f\u022d\3\2\2\2\u022f\u0230\3\2\2\2\u0230\u00b2\3\2"+
|
"\u00b2\3\2\2\2\u022f\u0233\7=\2\2\u0230\u0232\n\2\2\2\u0231\u0230\3\2"+
|
||||||
"\2\2\u0231\u022f\3\2\2\2\u0232\u023a\4\62;\2\u0233\u0235\4\63;\2\u0234"+
|
"\2\2\u0232\u0235\3\2\2\2\u0233\u0231\3\2\2\2\u0233\u0234\3\2\2\2\u0234"+
|
||||||
"\u0236\4\62;\2\u0235\u0234\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0235\3\2"+
|
"\u0236\3\2\2\2\u0235\u0233\3\2\2\2\u0236\u0237\bZ\2\2\u0237\u00b4\3\2"+
|
||||||
"\2\2\u0237\u0238\3\2\2\2\u0238\u023a\3\2\2\2\u0239\u0232\3\2\2\2\u0239"+
|
"\2\2\u0238\u0239\t\3\2\2\u0239\u023a\3\2\2\2\u023a\u023b\b[\3\2\u023b"+
|
||||||
"\u0233\3\2\2\2\u023a\u00b4\3\2\2\2\u023b\u023d\7&\2\2\u023c\u023e\t\6"+
|
"\u00b6\3\2\2\2\u023c\u023e\t\2\2\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2"+
|
||||||
"\2\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u023d\3\2\2\2\u023f"+
|
"\2\2\u023f\u023d\3\2\2\2\u023f\u0240\3\2\2\2\u0240\u00b8\3\2\2\2\u0241"+
|
||||||
"\u0240\3\2\2\2\u0240\u00b6\3\2\2\2\u0241\u0243\7\'\2\2\u0242\u0244\4\62"+
|
"\u0245\t\4\2\2\u0242\u0244\t\5\2\2\u0243\u0242\3\2\2\2\u0244\u0247\3\2"+
|
||||||
"\63\2\u0243\u0242\3\2\2\2\u0244\u0245\3\2\2\2\u0245\u0243\3\2\2\2\u0245"+
|
"\2\2\u0245\u0243\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u00ba\3\2\2\2\u0247"+
|
||||||
"\u0246\3\2\2\2\u0246\u00b8\3\2\2\2\u0247\u024d\5\u00bb^\2\u0248\u024a"+
|
"\u0245\3\2\2\2\u0248\u0250\4\62;\2\u0249\u024b\4\63;\2\u024a\u024c\4\62"+
|
||||||
"\t\7\2\2\u0249\u024b\t\b\2\2\u024a\u0249\3\2\2\2\u024a\u024b\3\2\2\2\u024b"+
|
";\2\u024b\u024a\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u024b\3\2\2\2\u024d"+
|
||||||
"\u024c\3\2\2\2\u024c\u024e\5\u00bb^\2\u024d\u0248\3\2\2\2\u024d\u024e"+
|
"\u024e\3\2\2\2\u024e\u0250\3\2\2\2\u024f\u0248\3\2\2\2\u024f\u0249\3\2"+
|
||||||
"\3\2\2\2\u024e\u00ba\3\2\2\2\u024f\u0251\4\62;\2\u0250\u024f\3\2\2\2\u0251"+
|
"\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\u0252\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u025a\3\2"+
|
"\u0252\3\2\2\2\u0254\u0255\3\2\2\2\u0255\u0253\3\2\2\2\u0255\u0256\3\2"+
|
||||||
"\2\2\u0254\u0256\7\60\2\2\u0255\u0257\4\62;\2\u0256\u0255\3\2\2\2\u0257"+
|
"\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\u0258\u0256\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025b\3\2"+
|
"\u0258\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u0259\3\2\2\2\u025b\u025c\3\2"+
|
||||||
"\2\2\u025a\u0254\3\2\2\2\u025a\u025b\3\2\2\2\u025b\u00bc\3\2\2\2\u025c"+
|
"\2\2\u025c\u00c0\3\2\2\2\u025d\u0263\5\u00c3b\2\u025e\u0260\t\7\2\2\u025f"+
|
||||||
"\u025d\7^\2\2\u025d\u0261\13\2\2\2\u025e\u025f\7^\2\2\u025f\u0261\5\u00af"+
|
"\u0261\t\b\2\2\u0260\u025f\3\2\2\2\u0260\u0261\3\2\2\2\u0261\u0262\3\2"+
|
||||||
"X\2\u0260\u025c\3\2\2\2\u0260\u025e\3\2\2\2\u0261\u00be\3\2\2\2\u0262"+
|
"\2\2\u0262\u0264\5\u00c3b\2\u0263\u025e\3\2\2\2\u0263\u0264\3\2\2\2\u0264"+
|
||||||
"\u0267\7$\2\2\u0263\u0266\5\u00bd_\2\u0264\u0266\n\t\2\2\u0265\u0263\3"+
|
"\u00c2\3\2\2\2\u0265\u0267\4\62;\2\u0266\u0265\3\2\2\2\u0267\u0268\3\2"+
|
||||||
"\2\2\2\u0265\u0264\3\2\2\2\u0266\u0269\3\2\2\2\u0267\u0265\3\2\2\2\u0267"+
|
"\2\2\u0268\u0266\3\2\2\2\u0268\u0269\3\2\2\2\u0269\u0270\3\2\2\2\u026a"+
|
||||||
"\u0268\3\2\2\2\u0268\u026a\3\2\2\2\u0269\u0267\3\2\2\2\u026a\u026b\7$"+
|
"\u026c\7\60\2\2\u026b\u026d\4\62;\2\u026c\u026b\3\2\2\2\u026d\u026e\3"+
|
||||||
"\2\2\u026b\u026c\b`\4\2\u026c\u00c0\3\2\2\2\u026d\u026e\7}\2\2\u026e\u026f"+
|
"\2\2\2\u026e\u026c\3\2\2\2\u026e\u026f\3\2\2\2\u026f\u0271\3\2\2\2\u0270"+
|
||||||
"\7}\2\2\u026f\u0271\3\2\2\2\u0270\u0272\13\2\2\2\u0271\u0270\3\2\2\2\u0272"+
|
"\u026a\3\2\2\2\u0270\u0271\3\2\2\2\u0271\u00c4\3\2\2\2\u0272\u0273\7^"+
|
||||||
"\u0273\3\2\2\2\u0273\u0274\3\2\2\2\u0273\u0271\3\2\2\2\u0274\u0275\3\2"+
|
"\2\2\u0273\u0277\13\2\2\2\u0274\u0275\7^\2\2\u0275\u0277\5\u00b7\\\2\u0276"+
|
||||||
"\2\2\u0275\u0276\7\177\2\2\u0276\u0277\7\177\2\2\u0277\u0278\3\2\2\2\u0278"+
|
"\u0272\3\2\2\2\u0276\u0274\3\2\2\2\u0277\u00c6\3\2\2\2\u0278\u027d\7$"+
|
||||||
"\u0279\ba\5\2\u0279\u00c2\3\2\2\2\25\2\u0212\u021d\u0229\u022f\u0237\u0239"+
|
"\2\2\u0279\u027c\5\u00c5c\2\u027a\u027c\n\t\2\2\u027b\u0279\3\2\2\2\u027b"+
|
||||||
"\u023d\u023f\u0245\u024a\u024d\u0252\u0258\u025a\u0260\u0265\u0267\u0273"+
|
"\u027a\3\2\2\2\u027c\u027f\3\2\2\2\u027d\u027b\3\2\2\2\u027d\u027e\3\2"+
|
||||||
"\6\2\3\2\b\2\2\3`\2\3a\3";
|
"\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 =
|
public static final ATN _ATN =
|
||||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||||
static {
|
static {
|
||||||
|
@ -81,97 +81,105 @@ T__79=80
|
|||||||
T__80=81
|
T__80=81
|
||||||
T__81=82
|
T__81=82
|
||||||
T__82=83
|
T__82=83
|
||||||
LINECOMMENT=84
|
T__83=84
|
||||||
COMMENT=85
|
T__84=85
|
||||||
WS=86
|
T__85=86
|
||||||
EOL=87
|
T__86=87
|
||||||
NAME=88
|
LINECOMMENT=88
|
||||||
DEC_INTEGER=89
|
COMMENT=89
|
||||||
HEX_INTEGER=90
|
WS=90
|
||||||
BIN_INTEGER=91
|
EOL=91
|
||||||
FLOAT_NUMBER=92
|
NAME=92
|
||||||
STRING=93
|
DEC_INTEGER=93
|
||||||
INLINEASMBLOCK=94
|
HEX_INTEGER=94
|
||||||
|
BIN_INTEGER=95
|
||||||
|
FLOAT_NUMBER=96
|
||||||
|
STRING=97
|
||||||
|
INLINEASMBLOCK=98
|
||||||
'~'=1
|
'~'=1
|
||||||
'{'=2
|
':'=2
|
||||||
'}'=3
|
'goto'=3
|
||||||
':'=4
|
'%output'=4
|
||||||
'goto'=5
|
'%launcher'=5
|
||||||
'%output'=6
|
'%zp'=6
|
||||||
'%launcher'=7
|
'%address'=7
|
||||||
'%zp'=8
|
'%import'=8
|
||||||
'%address'=9
|
'%breakpoint'=9
|
||||||
'%import'=10
|
'%asminclude'=10
|
||||||
'%breakpoint'=11
|
'%asmbinary'=11
|
||||||
'%asminclude'=12
|
'%option'=12
|
||||||
'%asmbinary'=13
|
','=13
|
||||||
'%option'=14
|
'='=14
|
||||||
','=15
|
'const'=15
|
||||||
'='=16
|
'memory'=16
|
||||||
'const'=17
|
'byte'=17
|
||||||
'memory'=18
|
'word'=18
|
||||||
'byte'=19
|
'float'=19
|
||||||
'word'=20
|
'str'=20
|
||||||
'float'=21
|
'str_p'=21
|
||||||
'str'=22
|
'str_s'=22
|
||||||
'str_p'=23
|
'str_ps'=23
|
||||||
'str_s'=24
|
'['=24
|
||||||
'str_ps'=25
|
']'=25
|
||||||
'['=26
|
'+='=26
|
||||||
']'=27
|
'-='=27
|
||||||
'+='=28
|
'/='=28
|
||||||
'-='=29
|
'*='=29
|
||||||
'/='=30
|
'**='=30
|
||||||
'*='=31
|
'<<='=31
|
||||||
'**='=32
|
'>>='=32
|
||||||
'<<='=33
|
'<<@='=33
|
||||||
'>>='=34
|
'>>@='=34
|
||||||
'<<@='=35
|
'&='=35
|
||||||
'>>@='=36
|
'|='=36
|
||||||
'&='=37
|
'^='=37
|
||||||
'|='=38
|
'++'=38
|
||||||
'^='=39
|
'--'=39
|
||||||
'++'=40
|
'('=40
|
||||||
'--'=41
|
')'=41
|
||||||
'('=42
|
'+'=42
|
||||||
')'=43
|
'-'=43
|
||||||
'+'=44
|
'**'=44
|
||||||
'-'=45
|
'*'=45
|
||||||
'**'=46
|
'/'=46
|
||||||
'*'=47
|
'<<'=47
|
||||||
'/'=48
|
'>>'=48
|
||||||
'<<'=49
|
'<<@'=49
|
||||||
'>>'=50
|
'>>@'=50
|
||||||
'<<@'=51
|
'<'=51
|
||||||
'>>@'=52
|
'>'=52
|
||||||
'<'=53
|
'<='=53
|
||||||
'>'=54
|
'>='=54
|
||||||
'<='=55
|
'=='=55
|
||||||
'>='=56
|
'!='=56
|
||||||
'=='=57
|
'&'=57
|
||||||
'!='=58
|
'^'=58
|
||||||
'&'=59
|
'|'=59
|
||||||
'^'=60
|
'and'=60
|
||||||
'|'=61
|
'or'=61
|
||||||
'and'=62
|
'xor'=62
|
||||||
'or'=63
|
'not'=63
|
||||||
'xor'=64
|
'to'=64
|
||||||
'not'=65
|
'return'=65
|
||||||
'to'=66
|
'.'=66
|
||||||
'return'=67
|
'A'=67
|
||||||
'.'=68
|
'X'=68
|
||||||
'A'=69
|
'Y'=69
|
||||||
'X'=70
|
'AX'=70
|
||||||
'Y'=71
|
'AY'=71
|
||||||
'AX'=72
|
'XY'=72
|
||||||
'AY'=73
|
'Pc'=73
|
||||||
'XY'=74
|
'Pi'=74
|
||||||
'SC'=75
|
'Pz'=75
|
||||||
'SI'=76
|
'Pn'=76
|
||||||
'SZ'=77
|
'Pv'=77
|
||||||
'true'=78
|
'true'=78
|
||||||
'false'=79
|
'false'=79
|
||||||
'%asm'=80
|
'%asm'=80
|
||||||
'sub'=81
|
'sub'=81
|
||||||
'->'=82
|
'->'=82
|
||||||
'?'=83
|
'{'=83
|
||||||
|
'}'=84
|
||||||
|
'?'=85
|
||||||
|
'if'=86
|
||||||
|
'else'=87
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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 IOINIT () -> (A?, X?) = $FF84 ; initialize I/O devices (CIA, SID, IRQ)
|
||||||
sub RAMTAS () -> (?) = $FF87 ; initialize RAM, tape buffer, screen
|
sub RAMTAS () -> (?) = $FF87 ; initialize RAM, tape buffer, screen
|
||||||
sub RESTOR () -> (?) = $FF8A ; restore default I/O vectors
|
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 SETMSG (value: A) -> () = $FF90 ; set Kernal message control flag
|
||||||
sub SECOND (address: A) -> (A?) = $FF93 ; (alias: LSTNSA) send secondary address after LISTEN
|
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 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 MEMTOP (dir: Pc, 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 MEMBOT (dir: Pc, address: XY) -> (XY) = $FF9C ; read/set bottom of memory pointer
|
||||||
sub SCNKEY () -> (?) = $FF9F ; scan the keyboard
|
sub SCNKEY () -> (?) = $FF9F ; scan the keyboard
|
||||||
sub SETTMO (timeout: A) -> () = $FFA2 ; set time-out flag for IEEE bus
|
sub SETTMO (timeout: A) -> () = $FFA2 ; set time-out flag for IEEE bus
|
||||||
sub ACPTR () -> (A) = $FFA5 ; (alias: IECIN) input byte from serial 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 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 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 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 LOAD (verify: A, address: XY) -> (Pc, 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 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 SETTIM (low: A, middle: X, high: Y) -> () = $FFDB ; set the software clock
|
||||||
sub RDTIM () -> (A, X, Y) = $FFDE ; read 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 GETIN () -> (A, X?, Y?) = $FFE4 ; (via 810 ($32A)) get a character
|
||||||
sub CLALL () -> (A?, X?) = $FFE7 ; (via 812 ($32C)) close all files
|
sub CLALL () -> (A?, X?) = $FFE7 ; (via 812 ($32C)) close all files
|
||||||
sub UDTIM () -> (A?, X?) = $FFEA ; update the software clock
|
sub UDTIM () -> (A?, X?) = $FFEA ; update the software clock
|
||||||
sub SCREEN () -> (X, Y) = $FFED ; read number of screen rows and columns
|
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
|
sub IOBASE () -> (X, Y) = $FFF3 ; read base address of I/O devices
|
||||||
|
|
||||||
; ---- end of C64 kernal routines ----
|
; ---- 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
|
; ---- scroll the whole screen 1 character to the left
|
||||||
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; 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
|
; ---- scroll the whole screen 1 character to the right
|
||||||
; contents of the leftmost column are unchanged, you should clear/refill this yourself
|
; contents of the leftmost column are unchanged, you should clear/refill this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; 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
|
; ---- scroll the whole screen 1 character up
|
||||||
; contents of the bottom row are unchanged, you should refill/clear this yourself
|
; contents of the bottom row are unchanged, you should refill/clear this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; 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
|
; ---- scroll the whole screen 1 character down
|
||||||
; contents of the top row are unchanged, you should refill/clear this yourself
|
; contents of the top row are unchanged, you should refill/clear this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; 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)
|
; ---- print the byte in A in hex form (if Carry is set, a radix prefix '$' is printed as well)
|
||||||
%asm {{
|
%asm {{
|
||||||
bcc +
|
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)
|
; ---- print the (unsigned) word in X/Y in hexadecimal form (4 digits)
|
||||||
; (if Carry is set, a radix prefix '$' is printed as well)
|
; (if Carry is set, a radix prefix '$' is printed as well)
|
||||||
%asm {{
|
%asm {{
|
||||||
|
Loading…
Reference in New Issue
Block a user