mirror of
https://github.com/irmen/prog8.git
synced 2025-02-26 11:29:24 +00:00
more grammar
This commit is contained in:
parent
1ccc73f1f8
commit
d702dd1e74
@ -124,13 +124,15 @@ Directives
|
||||
Level: block, subroutine.
|
||||
Defines a debugging breakpoint at this location. See :ref:`debugging`
|
||||
|
||||
.. data:: %asm { ... }
|
||||
.. data:: %asm {{ ... }}
|
||||
|
||||
Level: block, subroutine.
|
||||
Declares that there is *inline assembly code* in the lines enclosed by the curly braces.
|
||||
This code will be written as-is into the generated output file.
|
||||
The assembler syntax used should be for the 3rd party cross assembler tool that IL65 uses.
|
||||
The ``%asm {`` and ``}`` start and end markers each have to be on their own unique line.
|
||||
Note that the start and end markers are both *double curly braces* to minimize the chance
|
||||
that the inline assembly itself contains either of those. If it does contain a ``}}``,
|
||||
the parsing of the inline assembler block will end prematurely and cause compilation errors.
|
||||
|
||||
|
||||
Identifiers
|
||||
@ -160,10 +162,9 @@ can contain IL65 *code*, *directives*, *variable declarations* and *subroutines*
|
||||
<subroutines>
|
||||
}
|
||||
|
||||
The <blockname> must be a valid identifier or can be completely omitted.
|
||||
In that case the <address> is required to tell the compiler to put the block at
|
||||
a certain position in memory. Otherwise it would be impossible to access its contents.
|
||||
The <address> is optional. It must be a valid memory address such as ``$c000``.
|
||||
The <blockname> must be a valid identifier.
|
||||
The <address> is optional. If specified it must be a valid memory address such as ``$c000``.
|
||||
It's used to tell the compiler to put the block at a certain position in memory.
|
||||
Also read :ref:`blocks`. Here is an example of a code block, to be loaded at ``$c000``::
|
||||
|
||||
~ main $c000 {
|
||||
@ -280,97 +281,75 @@ The following names are reserved, they have a special meaning::
|
||||
Operators
|
||||
---------
|
||||
|
||||
.. data:: # (address-of)
|
||||
|
||||
Takes the address of the symbol following it: ``word address = #somevar``
|
||||
address-of: ``#``
|
||||
Takes the address of the symbol following it: ``word address = #somevar``
|
||||
|
||||
|
||||
.. data:: + - * / // ** % (arithmetic)
|
||||
|
||||
``+``, ``-``, ``*``, ``/`` are the familiar arithmetic operations.
|
||||
|
||||
``//`` means *integer division* even when the operands are floating point values: ``9.5 // 2.5`` is 3 (and not 3.8)
|
||||
|
||||
``**`` is the power operator: ``3 ** 5`` is equal to 3*3*3*3*3 and is 243.
|
||||
|
||||
``%`` is the modulo operator: ``25 % 7`` is 4.
|
||||
arithmetic: ``+`` ``-`` ``*`` ``/`` ``//`` ``**`` ``%``
|
||||
``+``, ``-``, ``*``, ``/`` are the familiar arithmetic operations.
|
||||
``//`` means *integer division* even when the operands are floating point values: ``9.5 // 2.5`` is 3 (and not 3.8)
|
||||
``**`` is the power operator: ``3 ** 5`` is equal to 3*3*3*3*3 and is 243.
|
||||
``%`` is the modulo operator: ``25 % 7`` is 4.
|
||||
|
||||
|
||||
.. data:: << >> <<@ >>@ & | ^ ~ (bitwise arithmetic)
|
||||
bitwise arithmetic: ``<<`` ``>>`` ``<<@`` ``>@`` ``&`` ``|`` ``^`` ``~``
|
||||
``<<`` and ``>>`` are bitwise shifts (left and right), ``<<@`` and ``@>>`` are bitwise rotations (left and right)
|
||||
``&`` is bitwise and, ``|`` is bitwise or, ``^`` is bitwise xor, ``~`` is bitwise invert (this one is an unary operator)
|
||||
|
||||
``<<`` and ``>>`` are bitwise shifts (left and right), ``<<@`` and ``@>>`` are bitwise rotations (left and right)
|
||||
assignment: ``=``
|
||||
Sets the target on the LHS (left hand side) of the operator to the value of the expression on the RHS (right hand side).
|
||||
|
||||
``&`` is bitwise and, ``|`` is bitwise or, ``^`` is bitwise xor, ``~`` is bitwise invert (this one is an unary operator)
|
||||
augmented assignment: ``+=`` ``-=`` ``*=`` ``/=`` ``//=`` ``**=`` ``<<=`` ``>>=`` ``<<@=`` ``>>@=`` ``&=`` ``|=`` ``^=``
|
||||
Syntactic sugar; ``A += X`` is equivalent to ``A = A + X``
|
||||
|
||||
postfix increment and decrement: ``++`` ``--``
|
||||
Syntactic sugar; ``A++`` is equivalent to ``A = A + 1``, and ``A--`` is equivalent to ``A = A - 1``.
|
||||
Because these operations are so common, we have these short forms.
|
||||
|
||||
comparison: ``!=`` ``<`` ``>`` ``<=`` ``>=``
|
||||
Equality, Inequality, Less-than, Greater-than, Less-or-Equal-than, Greater-or-Equal-than comparisons.
|
||||
The result is a 'boolean' value 'true' or 'false' (which in reality is just a byte value of 1 or 0).
|
||||
|
||||
logical: ``not`` ``and`` ``or`` ``xor``
|
||||
These operators are the usual logical operations that are part of a logical expression to reason
|
||||
about truths (boolean values). The result of such an expression is a 'boolean' value 'true' or 'false'
|
||||
(which in reality is just a byte value of 1 or 0).
|
||||
|
||||
range creation: ``to``
|
||||
Creates a range of values from the LHS value to the RHS value, inclusive.
|
||||
These are mainly used in for loops to set the loop range. Example::
|
||||
|
||||
0 to 7 ; range of values 0, 1, 2, 3, 4, 5, 6, 7 (constant)
|
||||
|
||||
A = 5
|
||||
X = 10
|
||||
A to X ; range of 5, 6, 7, 8, 9, 10
|
||||
|
||||
byte[4] array = 10 to 13 ; sets the array to [1, 2, 3, 4]
|
||||
|
||||
for i in 0 to 127 {
|
||||
; i loops 0, 1, 2, ... 127
|
||||
}
|
||||
|
||||
|
||||
.. data:: = (assignment)
|
||||
array indexing: ``[`` *index* ``]``
|
||||
When put after a sequence type (array, string or matrix) it means to point to the given element in that sequence::
|
||||
|
||||
Sets the target on the LHS (left hand side) of the operator to the value of the expression on the RHS (right hand side).
|
||||
array[2] ; the third byte in the array (index is 0-based)
|
||||
matrix[4,2] ; the byte at the 5th column and 3rd row in the matrix
|
||||
|
||||
|
||||
.. data:: += -= *= /= //= **= <<= >>= <<@= >>@= &= |= ^= (augmented assignment)
|
||||
precedence grouping in expressions, or subroutine parameter list: ``(`` *expression* ``)``
|
||||
Parentheses are used to group parts of an expression to change the order of evaluation.
|
||||
(the subexpression inside the parentheses will be evaluated first):
|
||||
``(4 + 8) * 2`` is 24 instead of 20.
|
||||
|
||||
Syntactic sugar; ``A += X`` is equivalent to ``A = A + X``
|
||||
Parentheses are also used in a subroutine call, they follow the name of the subroutine and contain
|
||||
the list of arguments to pass to the subroutine: ``big_function(1, 99)``
|
||||
|
||||
|
||||
.. data:: ++ -- (postfix increment and decrement)
|
||||
|
||||
Syntactic sugar; ``A++`` is equivalent to ``A = A + 1``, and ``A--`` is equivalent to ``A = A - 1``.
|
||||
Because these operations are so common, we have these short forms.
|
||||
|
||||
|
||||
.. data:: == != < > <= >= (comparison)
|
||||
|
||||
Equality, Inequality, Less-than, Greater-than, Less-or-Equal-than, Greater-or-Equal-than comparisons.
|
||||
The result is a 'boolean' value 'true' or 'false' (which in reality is just a byte value of 1 or 0).
|
||||
|
||||
|
||||
.. data:: not and or xor (logical)
|
||||
|
||||
These operators are the usual logical operations that are part of a logical expression to reason
|
||||
about truths (boolean values). The result of such an expression is a 'boolean' value 'true' or 'false'
|
||||
(which in reality is just a byte value of 1 or 0).
|
||||
|
||||
|
||||
.. data:: .. (range creation)
|
||||
|
||||
Creates a range of values from the LHS value to the RHS value, inclusive.
|
||||
These are mainly used in for loops to set the loop range. Example::
|
||||
|
||||
0 .. 7 ; range of values 0, 1, 2, 3, 4, 5, 6, 7 (constant)
|
||||
|
||||
A = 5
|
||||
X = 10
|
||||
A .. X ; range of 5, 6, 7, 8, 9, 10
|
||||
|
||||
byte[4] array = 10 .. 13 ; sets the array to [1, 2, 3, 4]
|
||||
|
||||
for i in 0 .. 127 {
|
||||
; i loops 0, 1, 2, ... 127
|
||||
}
|
||||
|
||||
|
||||
|
||||
.. data:: [ ... ] (array indexing)
|
||||
|
||||
When put after a sequence type (array, string or matrix) it means to point to the given element in that sequence::
|
||||
|
||||
array[2] ; the third byte in the array (index is 0-based)
|
||||
matrix[4,2] ; the byte at the 5th column and 3rd row in the matrix
|
||||
|
||||
|
||||
.. data:: ( ... ) (precedence grouping in expressions, or subroutine parameter list)
|
||||
|
||||
Parentheses are used to group parts of an expression to change the order of evaluation.
|
||||
(the subexpression inside the parentheses will be evaluated first):
|
||||
``(4 + 8) * 2`` is 24 instead of 20.
|
||||
|
||||
Parentheses are also used in a subroutine call, they follow the name of the subroutine and contain
|
||||
the list of arguments to pass to the subroutine: ``big_function(1, 99)``
|
||||
|
||||
|
||||
Subroutine calls
|
||||
----------------
|
||||
Subroutine / function calls
|
||||
---------------------------
|
||||
|
||||
You call a subroutine like this::
|
||||
|
||||
@ -439,6 +418,8 @@ for loop
|
||||
|
||||
for <loopvar> in <range> [ step <amount> ] {
|
||||
; do something...
|
||||
break ; break out of the loop
|
||||
continue ; immediately enter next iteration
|
||||
}
|
||||
|
||||
|
||||
@ -448,6 +429,8 @@ while loop
|
||||
|
||||
while <condition> {
|
||||
; do something...
|
||||
break ; break out of the loop
|
||||
continue ; immediately enter next iteration
|
||||
}
|
||||
|
||||
|
||||
@ -457,26 +440,36 @@ repeat--until loop
|
||||
|
||||
repeat {
|
||||
; do something...
|
||||
break ; break out of the loop
|
||||
continue ; immediately enter next iteration
|
||||
} until <condition>
|
||||
|
||||
|
||||
Conditional Execution
|
||||
---------------------
|
||||
Conditional Execution and Jumps
|
||||
-------------------------------
|
||||
|
||||
Must align this with the various status bits in the cpu... not only true/false....
|
||||
unconditional jump
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@todo::
|
||||
goto $c000 ; address
|
||||
goto name ; label or subroutine
|
||||
|
||||
if <condition> {
|
||||
; do something....
|
||||
}
|
||||
[ else {
|
||||
; do something else...
|
||||
} ]
|
||||
|
||||
|
||||
conditional execution
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@todo::
|
||||
if <condition> <single_statement or subblock>
|
||||
[else <single_statement or subblock>]
|
||||
|
||||
if <condition> goto <location>
|
||||
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.
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
parser:
|
||||
./antlr.sh -o ../src/il65/parser -listener -visitor -package il65.parser tinybasic.g4
|
||||
./antlr.sh -o ../src/il65/parser -no-listener -no-visitor -package il65.parser -Dlanguage=Java il65.g4
|
||||
# ./antlr.sh -o ../src/il65/parser -no-listener -no-visitor -package il65.parser -Dlanguage=Python3 il65.g4
|
||||
|
@ -1,13 +1,18 @@
|
||||
/*
|
||||
IL65 lexer and parser grammar
|
||||
IL65 combined lexer and parser grammar
|
||||
|
||||
NOTES:
|
||||
|
||||
- whitespace is ignored. (tabs/spaces)
|
||||
- every line can be empty, be a comment, or contain ONE statement.
|
||||
|
||||
*/
|
||||
|
||||
grammar il65;
|
||||
|
||||
|
||||
COMMENT : ';' ~[\r\n]* -> channel(1) ;
|
||||
COMMENT : ';' ~[\r\n]* -> channel(HIDDEN) ;
|
||||
WS : [ \t] -> skip ;
|
||||
EOL : [\r\n]+ -> skip ;
|
||||
EOL : [\r\n]+ ;
|
||||
NAME : [a-zA-Z_][a-zA-Z0-9_]* ;
|
||||
DEC_INTEGER : ('0'..'9') | (('1'..'9')('0'..'9')+);
|
||||
HEX_INTEGER : '$' (('a'..'f') | ('A'..'F') | ('0'..'9'))+ ;
|
||||
@ -25,9 +30,21 @@ STRING :
|
||||
setText(s.substring(1, s.length() - 1));
|
||||
}
|
||||
;
|
||||
INLINEASMBLOCK :
|
||||
'{{' .+? '}}'
|
||||
{
|
||||
// get rid of the enclosing double braces
|
||||
String s = getText();
|
||||
setText(s.substring(2, s.length() - 2));
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
module : statement* EOF ;
|
||||
module : EOL* (modulestatement | EOL)* EOF ;
|
||||
|
||||
modulestatement: directive | block ;
|
||||
|
||||
block: '~' identifier integerliteral? '{' EOL (statement EOL)* EOL* '}' ;
|
||||
|
||||
statement :
|
||||
directive
|
||||
@ -37,12 +54,26 @@ statement :
|
||||
| memoryvardecl
|
||||
| assignment
|
||||
| augassignment
|
||||
| unconditionaljump
|
||||
| postincrdecr
|
||||
| inlineasm
|
||||
| label
|
||||
// @todo forloop, whileloop, repeatloop, ifelse
|
||||
;
|
||||
|
||||
label : identifier ':' ;
|
||||
|
||||
directive : '%' identifier (directivearg? | directivearg (',' directivearg)*) ;
|
||||
call_location : integerliteral | identifier | scoped_identifier ;
|
||||
|
||||
directivearg : identifier | integerliteral ;
|
||||
unconditionaljump : 'goto' call_location ;
|
||||
|
||||
directive :
|
||||
directivename=('%output' | '%launcher' | '%zp' | '%address' | '%import' |
|
||||
'%breakpoint' | '%asminclude' | '%asmbinary')
|
||||
(directivearg? | directivearg (',' directivearg)*)
|
||||
;
|
||||
|
||||
directivearg : stringliteral | identifier | integerliteral ;
|
||||
|
||||
vardecl: datatype arrayspec? identifier ;
|
||||
|
||||
@ -69,25 +100,36 @@ assign_target:
|
||||
| scoped_identifier
|
||||
;
|
||||
|
||||
postincrdecr : assign_target operator = ('++' | '--') ;
|
||||
|
||||
expression :
|
||||
unaryexp = unary_expression
|
||||
| '(' precedence_expr=expression ')'
|
||||
| left = expression '**' right = expression
|
||||
| left = expression ('*' | '/' | '//' | '**') right = expression
|
||||
| left = expression ('+' | '-' | '%') right = expression
|
||||
| left = expression ('<<' | '>>' | '<<@' | '>>@' | '&' | '|' | '^') right = expression
|
||||
| left = expression ('and' | 'or' | 'xor') right = expression
|
||||
| left = expression ('==' | '!=' | '<' | '>' | '<=' | '>=') right = expression
|
||||
'(' expression ')'
|
||||
| expression arrayspec
|
||||
| functioncall
|
||||
| prefix = ('+'|'-') expression
|
||||
| prefix = ('~'|'not') expression
|
||||
| left = expression bop = '**' right = expression
|
||||
| left = expression bop = ('*' | '/' | '//' | '%') right = expression
|
||||
| left = expression bop = ('+' | '-' ) right = expression
|
||||
| left = expression bop = ('<<' | '>>' | '<<@' | '>>@' ) right = expression
|
||||
| left = expression bop = ('<' | '>' | '<=' | '>=') right = expression
|
||||
| left = expression bop = ('==' | '!=') right = expression
|
||||
| left = expression bop = '&' right = expression
|
||||
| left = expression bop = '^' right = expression
|
||||
| left = expression bop = '|' right = expression
|
||||
| left = expression bop = 'and' right = expression
|
||||
| left = expression bop = 'or' right = expression
|
||||
| left = expression bop = 'xor' right = expression
|
||||
| rangefrom = expression 'to' rangeto = expression
|
||||
| literalvalue
|
||||
| register
|
||||
| identifier
|
||||
| scoped_identifier
|
||||
;
|
||||
|
||||
unary_expression :
|
||||
operator = '~' expression
|
||||
| operator = ('+' | '-') expression
|
||||
| operator = 'not' expression
|
||||
|
||||
functioncall :
|
||||
call_location '(' expression? ')' // @todo arglist
|
||||
;
|
||||
|
||||
identifier : NAME ;
|
||||
@ -113,3 +155,5 @@ literalvalue :
|
||||
| stringliteral
|
||||
| floatliteral
|
||||
;
|
||||
|
||||
inlineasm : '%asm' INLINEASMBLOCK;
|
||||
|
@ -10,18 +10,7 @@
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="lib" level="project" />
|
||||
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
|
||||
<orderEntry type="module-library">
|
||||
<library name="JUnit5.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$MODULE_DIR$/../lib/junit-jupiter-api-5.3.0-M1.jar!/" />
|
||||
<root url="jar://$MODULE_DIR$/../lib/apiguardian-api-1.0.0.jar!/" />
|
||||
<root url="jar://$MODULE_DIR$/../lib/opentest4j-1.1.0.jar!/" />
|
||||
<root url="jar://$MODULE_DIR$/../lib/junit-platform-commons-1.3.0-M1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="org.hamcrest:hamcrest-library:1.2.1" level="project" />
|
||||
<orderEntry type="library" name="org.junit.jupiter:junit-jupiter-api:5.2.0" level="project" />
|
||||
</component>
|
||||
</module>
|
@ -11,10 +11,14 @@ fun main(args: Array<String>) {
|
||||
// println("Reading source file: ${args[0]}")
|
||||
|
||||
val input = CharStreams.fromString(
|
||||
"byte derp=3"
|
||||
// +
|
||||
// "AX //= (5+8)*77\n" +
|
||||
// "X = -3.44e-99"
|
||||
"%zp clobber,derp,33,de\n" +
|
||||
"~ main \$c000 { \n" +
|
||||
" A=4 to 99\n" +
|
||||
" %asm {{\n" +
|
||||
" line 1\n"+
|
||||
"\t\tline 2\n"+
|
||||
" }}\n" +
|
||||
"}\n"
|
||||
)
|
||||
val lexer = il65Lexer(input)
|
||||
val tokens = CommonTokenStream(lexer)
|
||||
|
@ -31,9 +31,13 @@ interface IStatement : Node
|
||||
|
||||
data class Module(val lines: List<IStatement>) : Node
|
||||
|
||||
data class Block(val name: String, val address: Int?, val statements: List<IStatement>) : IStatement
|
||||
|
||||
data class Directive(val directive: String, val args: List<DirectiveArg>) : IStatement
|
||||
|
||||
data class DirectiveArg(val strval: String?, val intval: Int?) : Node
|
||||
data class DirectiveArg(val str: String?, val name: String?, val int: Int?) : Node
|
||||
|
||||
data class Label(val name: String) : IStatement
|
||||
|
||||
interface IVarDecl : IStatement {
|
||||
val datatype: DataType
|
||||
@ -61,12 +65,12 @@ data class MemoryVarDecl(override val datatype: DataType,
|
||||
|
||||
data class Assignment(val target: AssignTarget, val aug_op : String?, val value: IExpression) : IStatement
|
||||
|
||||
data class AssignTarget(val register: Register?, val identifier: String?, val scoped_identifier: String?) : Node
|
||||
data class AssignTarget(val register: Register?, val identifier: Identifier?) : Node
|
||||
|
||||
|
||||
interface IExpression: Node
|
||||
|
||||
data class UnaryExpression(val operator: String, val expression: IExpression) : IExpression
|
||||
data class PrefixExpression(val operator: String, val expression: IExpression) : IExpression
|
||||
|
||||
data class BinaryExpression(val left: IExpression, val operator: String, val right: IExpression) : IExpression
|
||||
|
||||
@ -76,13 +80,38 @@ data class LiteralValue(val intvalue: Int?,
|
||||
val boolvalue: Boolean?,
|
||||
val arrayvalue: List<IExpression>?) : IExpression
|
||||
|
||||
data class RangeExpr(val from: IExpression, val to: IExpression) : IExpression
|
||||
|
||||
data class RegisterExpr(val register: Register) : IExpression
|
||||
|
||||
data class Identifier(val name: String, val scope: String?) : IExpression
|
||||
data class Identifier(val name: String, val scope: List<String>) : IExpression
|
||||
|
||||
data class CallTarget(val address: Int?, val identifier: Identifier?) : Node
|
||||
|
||||
data class PostIncrDecr(val target: AssignTarget, val operator: String) : IStatement
|
||||
|
||||
data class Jump(val target: CallTarget) : IStatement
|
||||
|
||||
data class FunctionCall(val target: CallTarget, val arglist: List<IExpression>) : IExpression
|
||||
|
||||
data class InlineAssembly(val assembly: String) : IStatement
|
||||
|
||||
|
||||
fun il65Parser.ModuleContext.toAst() = Module(this.modulestatement().map { it.toAst() })
|
||||
|
||||
fun il65Parser.ModuleContext.toAst() = Module(this.statement().map { it.toAst() })
|
||||
fun il65Parser.ModulestatementContext.toAst() : IStatement {
|
||||
val directive = this.directive()?.toAst()
|
||||
if(directive!=null) return directive
|
||||
|
||||
val block = this.block()?.toAst()
|
||||
if(block!=null) return block
|
||||
|
||||
throw UnsupportedOperationException(this.text)
|
||||
}
|
||||
|
||||
fun il65Parser.BlockContext.toAst() : IStatement {
|
||||
return Block(this.identifier().text, this.integerliteral()?.toAst(), this.statement().map { it.toAst() })
|
||||
}
|
||||
|
||||
fun il65Parser.StatementContext.toAst() : IStatement {
|
||||
val vardecl = this.vardecl()
|
||||
@ -131,14 +160,40 @@ fun il65Parser.StatementContext.toAst() : IStatement {
|
||||
augassign.operator.text,
|
||||
augassign.expression().toAst())
|
||||
|
||||
val post = this.postincrdecr()
|
||||
if(post!=null)
|
||||
return PostIncrDecr(post.assign_target().toAst(), post.operator.text)
|
||||
|
||||
val directive = this.directive()?.toAst()
|
||||
if(directive!=null) return directive
|
||||
|
||||
val label=this.label()
|
||||
if(label!=null)
|
||||
return Label(label.text)
|
||||
|
||||
val jump = this.unconditionaljump()
|
||||
if(jump!=null)
|
||||
return Jump(jump.call_location().toAst())
|
||||
|
||||
val asm = this.inlineasm()
|
||||
if(asm!=null)
|
||||
return InlineAssembly(asm.INLINEASMBLOCK().text)
|
||||
|
||||
throw UnsupportedOperationException(this.text)
|
||||
}
|
||||
|
||||
fun il65Parser.Assign_targetContext.toAst() =
|
||||
AssignTarget(this.register()?.toAst(), this.identifier()?.text, this.scoped_identifier()?.text)
|
||||
fun il65Parser.Call_locationContext.toAst() : CallTarget {
|
||||
val address = this.integerliteral()?.toAst()
|
||||
if(this.identifier()!=null) return CallTarget(address, Identifier(this.identifier().text, emptyList()))
|
||||
return CallTarget(address, this.scoped_identifier().toAst())
|
||||
}
|
||||
|
||||
fun il65Parser.Assign_targetContext.toAst() : AssignTarget {
|
||||
val register = this.register()?.toAst()
|
||||
val identifier = this.identifier()?.text
|
||||
if(identifier!=null) return AssignTarget(register, Identifier(identifier, emptyList()))
|
||||
return AssignTarget(register, this.scoped_identifier()?.toAst())
|
||||
}
|
||||
|
||||
fun il65Parser.RegisterContext.toAst() = Register.valueOf(this.text.toUpperCase())
|
||||
|
||||
@ -150,53 +205,67 @@ fun il65Parser.ArrayspecContext.toAst() = ArraySpec(
|
||||
)
|
||||
|
||||
|
||||
fun il65Parser.DirectiveContext.toAst() = Directive(this.identifier().text, this.directivearg().map { it.toAst() })
|
||||
fun il65Parser.DirectiveContext.toAst() = Directive(this.directivename.text, this.directivearg().map { it.toAst() })
|
||||
|
||||
fun il65Parser.DirectiveargContext.toAst() = DirectiveArg(this.identifier()?.text, this.integerliteral()?.toAst())
|
||||
fun il65Parser.DirectiveargContext.toAst() =
|
||||
DirectiveArg(this.stringliteral()?.text, this.identifier()?.text, this.integerliteral()?.toAst())
|
||||
|
||||
fun il65Parser.IntegerliteralContext.toAst(): Int {
|
||||
val terminal: TerminalNode = this.children[0] as TerminalNode
|
||||
return when (terminal.symbol.type) {
|
||||
il65Parser.DEC_INTEGER -> this.text.toInt()
|
||||
il65Parser.HEX_INTEGER -> this.text.toInt(16)
|
||||
il65Parser.BIN_INTEGER -> this.text.toInt(2)
|
||||
il65Parser.HEX_INTEGER -> this.text.substring(1).toInt(16)
|
||||
il65Parser.BIN_INTEGER -> this.text.substring(1).toInt(2)
|
||||
else -> throw UnsupportedOperationException(this.text)
|
||||
}
|
||||
}
|
||||
|
||||
fun il65Parser.ExpressionContext.toAst() : IExpression {
|
||||
|
||||
if(this.identifier()!=null)
|
||||
return Identifier(this.identifier().text, null)
|
||||
|
||||
val litval = this.literalvalue()
|
||||
if(litval!=null)
|
||||
return LiteralValue(litval.integerliteral()?.toAst(),
|
||||
litval.floatliteral()?.toAst(),
|
||||
litval.stringliteral()?.text,
|
||||
litval.booleanliteral()?.toAst(),
|
||||
litval.arrayliteral()?.toAst()
|
||||
)
|
||||
|
||||
if(this.scoped_identifier()!=null)
|
||||
return Identifier(this.scoped_identifier().text, "SCOPE????") // todo!
|
||||
litval.floatliteral()?.toAst(),
|
||||
litval.stringliteral()?.text,
|
||||
litval.booleanliteral()?.toAst(),
|
||||
litval.arrayliteral()?.toAst()
|
||||
)
|
||||
|
||||
if(this.register()!=null)
|
||||
return RegisterExpr(this.register().toAst())
|
||||
|
||||
if(this.unaryexp!=null)
|
||||
return UnaryExpression(this.unaryexp.operator.text, this.unaryexp.expression().toAst())
|
||||
if(this.identifier()!=null)
|
||||
return Identifier(this.identifier().text, emptyList())
|
||||
|
||||
if(this.left != null && this.right != null)
|
||||
return BinaryExpression(this.left.toAst(), this.text, this.right.toAst())
|
||||
if(this.scoped_identifier()!=null)
|
||||
return this.scoped_identifier().toAst()
|
||||
|
||||
// ( expression )
|
||||
if(this.precedence_expr!=null)
|
||||
return this.precedence_expr.toAst()
|
||||
if(this.bop!=null)
|
||||
return BinaryExpression(this.left.toAst(), this.bop.text, this.right.toAst())
|
||||
|
||||
if(this.prefix!=null)
|
||||
return PrefixExpression(this.prefix.text, this.expression(0).toAst())
|
||||
|
||||
val funcall = this.functioncall()
|
||||
if(funcall!=null) {
|
||||
val location = funcall.call_location().toAst()
|
||||
if(funcall.expression()!=null) return FunctionCall(location, listOf(funcall.expression().toAst()))
|
||||
return FunctionCall(location, emptyList())
|
||||
}
|
||||
|
||||
if (this.rangefrom!=null && this.rangeto!=null)
|
||||
return RangeExpr(this.rangefrom.toAst(), this.rangeto.toAst())
|
||||
|
||||
throw UnsupportedOperationException(this.text)
|
||||
}
|
||||
|
||||
fun il65Parser.Scoped_identifierContext.toAst() : Identifier {
|
||||
val names = this.NAME()
|
||||
val name = names.last().text
|
||||
val scope = names.take(names.size-1)
|
||||
return Identifier(name, scope.map { it.text })
|
||||
}
|
||||
|
||||
fun il65Parser.FloatliteralContext.toAst() = this.text.toDouble()
|
||||
|
||||
fun il65Parser.BooleanliteralContext.toAst() = when(this.text) {
|
||||
|
219
il65/src/il65/parser/il65.interp
Normal file
219
il65/src/il65/parser/il65.interp
Normal file
File diff suppressed because one or more lines are too long
@ -63,77 +63,110 @@ T__61=62
|
||||
T__62=63
|
||||
T__63=64
|
||||
T__64=65
|
||||
COMMENT=66
|
||||
WS=67
|
||||
EOL=68
|
||||
NAME=69
|
||||
DEC_INTEGER=70
|
||||
HEX_INTEGER=71
|
||||
BIN_INTEGER=72
|
||||
FLOAT_NUMBER=73
|
||||
STRING=74
|
||||
'%'=1
|
||||
','=2
|
||||
'='=3
|
||||
'const'=4
|
||||
'memory'=5
|
||||
'byte'=6
|
||||
'word'=7
|
||||
'float'=8
|
||||
'str'=9
|
||||
'str_p'=10
|
||||
'str_s'=11
|
||||
'str_ps'=12
|
||||
'['=13
|
||||
']'=14
|
||||
'+='=15
|
||||
'-='=16
|
||||
'/='=17
|
||||
'//='=18
|
||||
'*='=19
|
||||
'**='=20
|
||||
'<<='=21
|
||||
'>>='=22
|
||||
'<<@='=23
|
||||
'>>@='=24
|
||||
'&='=25
|
||||
'|='=26
|
||||
'^='=27
|
||||
'('=28
|
||||
')'=29
|
||||
'**'=30
|
||||
'*'=31
|
||||
'/'=32
|
||||
'//'=33
|
||||
'+'=34
|
||||
'-'=35
|
||||
'<<'=36
|
||||
'>>'=37
|
||||
'<<@'=38
|
||||
'>>@'=39
|
||||
'&'=40
|
||||
'|'=41
|
||||
'^'=42
|
||||
'and'=43
|
||||
'or'=44
|
||||
'xor'=45
|
||||
'=='=46
|
||||
'!='=47
|
||||
'<'=48
|
||||
'>'=49
|
||||
'<='=50
|
||||
'>='=51
|
||||
'~'=52
|
||||
'not'=53
|
||||
'.'=54
|
||||
'A'=55
|
||||
'X'=56
|
||||
'Y'=57
|
||||
'AX'=58
|
||||
'AY'=59
|
||||
'XY'=60
|
||||
'SC'=61
|
||||
'SI'=62
|
||||
'SZ'=63
|
||||
'true'=64
|
||||
'false'=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
|
||||
COMMENT=82
|
||||
WS=83
|
||||
EOL=84
|
||||
NAME=85
|
||||
DEC_INTEGER=86
|
||||
HEX_INTEGER=87
|
||||
BIN_INTEGER=88
|
||||
FLOAT_NUMBER=89
|
||||
STRING=90
|
||||
INLINEASMBLOCK=91
|
||||
'~'=1
|
||||
'{'=2
|
||||
'}'=3
|
||||
':'=4
|
||||
'goto'=5
|
||||
'%output'=6
|
||||
'%launcher'=7
|
||||
'%zp'=8
|
||||
'%address'=9
|
||||
'%import'=10
|
||||
'%breakpoint'=11
|
||||
'%asminclude'=12
|
||||
'%asmbinary'=13
|
||||
','=14
|
||||
'='=15
|
||||
'const'=16
|
||||
'memory'=17
|
||||
'byte'=18
|
||||
'word'=19
|
||||
'float'=20
|
||||
'str'=21
|
||||
'str_p'=22
|
||||
'str_s'=23
|
||||
'str_ps'=24
|
||||
'['=25
|
||||
']'=26
|
||||
'+='=27
|
||||
'-='=28
|
||||
'/='=29
|
||||
'//='=30
|
||||
'*='=31
|
||||
'**='=32
|
||||
'<<='=33
|
||||
'>>='=34
|
||||
'<<@='=35
|
||||
'>>@='=36
|
||||
'&='=37
|
||||
'|='=38
|
||||
'^='=39
|
||||
'++'=40
|
||||
'--'=41
|
||||
'('=42
|
||||
')'=43
|
||||
'+'=44
|
||||
'-'=45
|
||||
'not'=46
|
||||
'**'=47
|
||||
'*'=48
|
||||
'/'=49
|
||||
'//'=50
|
||||
'%'=51
|
||||
'<<'=52
|
||||
'>>'=53
|
||||
'<<@'=54
|
||||
'>>@'=55
|
||||
'<'=56
|
||||
'>'=57
|
||||
'<='=58
|
||||
'>='=59
|
||||
'=='=60
|
||||
'!='=61
|
||||
'&'=62
|
||||
'^'=63
|
||||
'|'=64
|
||||
'and'=65
|
||||
'or'=66
|
||||
'xor'=67
|
||||
'to'=68
|
||||
'.'=69
|
||||
'A'=70
|
||||
'X'=71
|
||||
'Y'=72
|
||||
'AX'=73
|
||||
'AY'=74
|
||||
'XY'=75
|
||||
'SC'=76
|
||||
'SI'=77
|
||||
'SZ'=78
|
||||
'true'=79
|
||||
'false'=80
|
||||
'%asm'=81
|
||||
|
286
il65/src/il65/parser/il65Lexer.interp
Normal file
286
il65/src/il65/parser/il65Lexer.interp
Normal file
File diff suppressed because one or more lines are too long
@ -25,9 +25,11 @@ public class il65Lexer extends Lexer {
|
||||
T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
|
||||
T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
|
||||
T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
|
||||
T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, COMMENT=66,
|
||||
WS=67, EOL=68, NAME=69, DEC_INTEGER=70, HEX_INTEGER=71, BIN_INTEGER=72,
|
||||
FLOAT_NUMBER=73, STRING=74;
|
||||
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, COMMENT=82, WS=83, EOL=84, NAME=85, DEC_INTEGER=86, HEX_INTEGER=87,
|
||||
BIN_INTEGER=88, FLOAT_NUMBER=89, STRING=90, INLINEASMBLOCK=91;
|
||||
public static String[] channelNames = {
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
|
||||
};
|
||||
@ -45,19 +47,23 @@ public class il65Lexer extends Lexer {
|
||||
"T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
|
||||
"T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56",
|
||||
"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",
|
||||
"COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER",
|
||||
"FLOAT_NUMBER", "FNUMBER", "STRING_ESCAPE_SEQ", "STRING"
|
||||
"FLOAT_NUMBER", "FNUMBER", "STRING_ESCAPE_SEQ", "STRING", "INLINEASMBLOCK"
|
||||
};
|
||||
|
||||
private static final String[] _LITERAL_NAMES = {
|
||||
null, "'%'", "','", "'='", "'const'", "'memory'", "'byte'", "'word'",
|
||||
null, "'~'", "'{'", "'}'", "':'", "'goto'", "'%output'", "'%launcher'",
|
||||
"'%zp'", "'%address'", "'%import'", "'%breakpoint'", "'%asminclude'",
|
||||
"'%asmbinary'", "','", "'='", "'const'", "'memory'", "'byte'", "'word'",
|
||||
"'float'", "'str'", "'str_p'", "'str_s'", "'str_ps'", "'['", "']'", "'+='",
|
||||
"'-='", "'/='", "'//='", "'*='", "'**='", "'<<='", "'>>='", "'<<@='",
|
||||
"'>>@='", "'&='", "'|='", "'^='", "'('", "')'", "'**'", "'*'", "'/'",
|
||||
"'//'", "'+'", "'-'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'&'", "'|'",
|
||||
"'^'", "'and'", "'or'", "'xor'", "'=='", "'!='", "'<'", "'>'", "'<='",
|
||||
"'>='", "'~'", "'not'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'",
|
||||
"'SC'", "'SI'", "'SZ'", "'true'", "'false'"
|
||||
"'>>@='", "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'",
|
||||
"'-'", "'not'", "'**'", "'*'", "'/'", "'//'", "'%'", "'<<'", "'>>'", "'<<@'",
|
||||
"'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'",
|
||||
"'and'", "'or'", "'xor'", "'to'", "'.'", "'A'", "'X'", "'Y'", "'AX'",
|
||||
"'AY'", "'XY'", "'SC'", "'SI'", "'SZ'", "'true'", "'false'", "'%asm'"
|
||||
};
|
||||
private static final String[] _SYMBOLIC_NAMES = {
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
@ -65,8 +71,10 @@ 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, "COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER",
|
||||
"HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING"
|
||||
null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
null, null, null, null, null, null, null, null, null, null, "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);
|
||||
|
||||
@ -128,9 +136,12 @@ public class il65Lexer extends Lexer {
|
||||
@Override
|
||||
public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
|
||||
switch (ruleIndex) {
|
||||
case 75:
|
||||
case 91:
|
||||
STRING_action((RuleContext)_localctx, actionIndex);
|
||||
break;
|
||||
case 92:
|
||||
INLINEASMBLOCK_action((RuleContext)_localctx, actionIndex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void STRING_action(RuleContext _localctx, int actionIndex) {
|
||||
@ -144,9 +155,20 @@ public class il65Lexer extends Lexer {
|
||||
break;
|
||||
}
|
||||
}
|
||||
private void INLINEASMBLOCK_action(RuleContext _localctx, int actionIndex) {
|
||||
switch (actionIndex) {
|
||||
case 1:
|
||||
|
||||
// get rid of the enclosing double braces
|
||||
String s = getText();
|
||||
setText(s.substring(2, s.length() - 2));
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String _serializedATN =
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2L\u01ca\b\1\4\2\t"+
|
||||
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2]\u025a\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"+
|
||||
@ -155,148 +177,196 @@ public class il65Lexer extends Lexer {
|
||||
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
|
||||
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
|
||||
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
|
||||
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\3\2\3\2\3\3\3\3\3\4\3\4\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\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b"+
|
||||
"\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13"+
|
||||
"\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\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\21\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3\23\3"+
|
||||
"\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\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\31\3\31\3\31\3\31\3\31\3\32\3\32\3"+
|
||||
"\32\3\33\3\33\3\33\3\34\3\34\3\34\3\35\3\35\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\60\3\60\3\60\3\61\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\64\3\65"+
|
||||
"\3\65\3\66\3\66\3\66\3\66\3\67\3\67\38\38\39\39\3:\3:\3;\3;\3;\3<\3<\3"+
|
||||
"<\3=\3=\3=\3>\3>\3>\3?\3?\3?\3@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3"+
|
||||
"B\3C\3C\7C\u0177\nC\fC\16C\u017a\13C\3C\3C\3D\3D\3D\3D\3E\6E\u0183\nE"+
|
||||
"\rE\16E\u0184\3E\3E\3F\3F\7F\u018b\nF\fF\16F\u018e\13F\3G\3G\3G\6G\u0193"+
|
||||
"\nG\rG\16G\u0194\5G\u0197\nG\3H\3H\6H\u019b\nH\rH\16H\u019c\3I\3I\6I\u01a1"+
|
||||
"\nI\rI\16I\u01a2\3J\3J\3J\5J\u01a8\nJ\3J\5J\u01ab\nJ\3K\6K\u01ae\nK\r"+
|
||||
"K\16K\u01af\3K\3K\6K\u01b4\nK\rK\16K\u01b5\5K\u01b8\nK\3L\3L\3L\3L\5L"+
|
||||
"\u01be\nL\3M\3M\3M\7M\u01c3\nM\fM\16M\u01c6\13M\3M\3M\3M\2\2N\3\3\5\4"+
|
||||
"\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22"+
|
||||
"#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C"+
|
||||
"#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u<w"+
|
||||
"=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091"+
|
||||
"J\u0093K\u0095\2\u0097\2\u0099L\3\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2"+
|
||||
"C\\aac|\6\2\62;C\\aac|\5\2\62;CHch\4\2GGgg\4\2--//\6\2\f\f\16\17$$^^\2"+
|
||||
"\u01d6\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\2"+
|
||||
"G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3"+
|
||||
"\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2"+
|
||||
"\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\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\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\u0099"+
|
||||
"\3\2\2\2\3\u009b\3\2\2\2\5\u009d\3\2\2\2\7\u009f\3\2\2\2\t\u00a1\3\2\2"+
|
||||
"\2\13\u00a7\3\2\2\2\r\u00ae\3\2\2\2\17\u00b3\3\2\2\2\21\u00b8\3\2\2\2"+
|
||||
"\23\u00be\3\2\2\2\25\u00c2\3\2\2\2\27\u00c8\3\2\2\2\31\u00ce\3\2\2\2\33"+
|
||||
"\u00d5\3\2\2\2\35\u00d7\3\2\2\2\37\u00d9\3\2\2\2!\u00dc\3\2\2\2#\u00df"+
|
||||
"\3\2\2\2%\u00e2\3\2\2\2\'\u00e6\3\2\2\2)\u00e9\3\2\2\2+\u00ed\3\2\2\2"+
|
||||
"-\u00f1\3\2\2\2/\u00f5\3\2\2\2\61\u00fa\3\2\2\2\63\u00ff\3\2\2\2\65\u0102"+
|
||||
"\3\2\2\2\67\u0105\3\2\2\29\u0108\3\2\2\2;\u010a\3\2\2\2=\u010c\3\2\2\2"+
|
||||
"?\u010f\3\2\2\2A\u0111\3\2\2\2C\u0113\3\2\2\2E\u0116\3\2\2\2G\u0118\3"+
|
||||
"\2\2\2I\u011a\3\2\2\2K\u011d\3\2\2\2M\u0120\3\2\2\2O\u0124\3\2\2\2Q\u0128"+
|
||||
"\3\2\2\2S\u012a\3\2\2\2U\u012c\3\2\2\2W\u012e\3\2\2\2Y\u0132\3\2\2\2["+
|
||||
"\u0135\3\2\2\2]\u0139\3\2\2\2_\u013c\3\2\2\2a\u013f\3\2\2\2c\u0141\3\2"+
|
||||
"\2\2e\u0143\3\2\2\2g\u0146\3\2\2\2i\u0149\3\2\2\2k\u014b\3\2\2\2m\u014f"+
|
||||
"\3\2\2\2o\u0151\3\2\2\2q\u0153\3\2\2\2s\u0155\3\2\2\2u\u0157\3\2\2\2w"+
|
||||
"\u015a\3\2\2\2y\u015d\3\2\2\2{\u0160\3\2\2\2}\u0163\3\2\2\2\177\u0166"+
|
||||
"\3\2\2\2\u0081\u0169\3\2\2\2\u0083\u016e\3\2\2\2\u0085\u0174\3\2\2\2\u0087"+
|
||||
"\u017d\3\2\2\2\u0089\u0182\3\2\2\2\u008b\u0188\3\2\2\2\u008d\u0196\3\2"+
|
||||
"\2\2\u008f\u0198\3\2\2\2\u0091\u019e\3\2\2\2\u0093\u01a4\3\2\2\2\u0095"+
|
||||
"\u01ad\3\2\2\2\u0097\u01bd\3\2\2\2\u0099\u01bf\3\2\2\2\u009b\u009c\7\'"+
|
||||
"\2\2\u009c\4\3\2\2\2\u009d\u009e\7.\2\2\u009e\6\3\2\2\2\u009f\u00a0\7"+
|
||||
"?\2\2\u00a0\b\3\2\2\2\u00a1\u00a2\7e\2\2\u00a2\u00a3\7q\2\2\u00a3\u00a4"+
|
||||
"\7p\2\2\u00a4\u00a5\7u\2\2\u00a5\u00a6\7v\2\2\u00a6\n\3\2\2\2\u00a7\u00a8"+
|
||||
"\7o\2\2\u00a8\u00a9\7g\2\2\u00a9\u00aa\7o\2\2\u00aa\u00ab\7q\2\2\u00ab"+
|
||||
"\u00ac\7t\2\2\u00ac\u00ad\7{\2\2\u00ad\f\3\2\2\2\u00ae\u00af\7d\2\2\u00af"+
|
||||
"\u00b0\7{\2\2\u00b0\u00b1\7v\2\2\u00b1\u00b2\7g\2\2\u00b2\16\3\2\2\2\u00b3"+
|
||||
"\u00b4\7y\2\2\u00b4\u00b5\7q\2\2\u00b5\u00b6\7t\2\2\u00b6\u00b7\7f\2\2"+
|
||||
"\u00b7\20\3\2\2\2\u00b8\u00b9\7h\2\2\u00b9\u00ba\7n\2\2\u00ba\u00bb\7"+
|
||||
"q\2\2\u00bb\u00bc\7c\2\2\u00bc\u00bd\7v\2\2\u00bd\22\3\2\2\2\u00be\u00bf"+
|
||||
"\7u\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1\7t\2\2\u00c1\24\3\2\2\2\u00c2\u00c3"+
|
||||
"\7u\2\2\u00c3\u00c4\7v\2\2\u00c4\u00c5\7t\2\2\u00c5\u00c6\7a\2\2\u00c6"+
|
||||
"\u00c7\7r\2\2\u00c7\26\3\2\2\2\u00c8\u00c9\7u\2\2\u00c9\u00ca\7v\2\2\u00ca"+
|
||||
"\u00cb\7t\2\2\u00cb\u00cc\7a\2\2\u00cc\u00cd\7u\2\2\u00cd\30\3\2\2\2\u00ce"+
|
||||
"\u00cf\7u\2\2\u00cf\u00d0\7v\2\2\u00d0\u00d1\7t\2\2\u00d1\u00d2\7a\2\2"+
|
||||
"\u00d2\u00d3\7r\2\2\u00d3\u00d4\7u\2\2\u00d4\32\3\2\2\2\u00d5\u00d6\7"+
|
||||
"]\2\2\u00d6\34\3\2\2\2\u00d7\u00d8\7_\2\2\u00d8\36\3\2\2\2\u00d9\u00da"+
|
||||
"\7-\2\2\u00da\u00db\7?\2\2\u00db \3\2\2\2\u00dc\u00dd\7/\2\2\u00dd\u00de"+
|
||||
"\7?\2\2\u00de\"\3\2\2\2\u00df\u00e0\7\61\2\2\u00e0\u00e1\7?\2\2\u00e1"+
|
||||
"$\3\2\2\2\u00e2\u00e3\7\61\2\2\u00e3\u00e4\7\61\2\2\u00e4\u00e5\7?\2\2"+
|
||||
"\u00e5&\3\2\2\2\u00e6\u00e7\7,\2\2\u00e7\u00e8\7?\2\2\u00e8(\3\2\2\2\u00e9"+
|
||||
"\u00ea\7,\2\2\u00ea\u00eb\7,\2\2\u00eb\u00ec\7?\2\2\u00ec*\3\2\2\2\u00ed"+
|
||||
"\u00ee\7>\2\2\u00ee\u00ef\7>\2\2\u00ef\u00f0\7?\2\2\u00f0,\3\2\2\2\u00f1"+
|
||||
"\u00f2\7@\2\2\u00f2\u00f3\7@\2\2\u00f3\u00f4\7?\2\2\u00f4.\3\2\2\2\u00f5"+
|
||||
"\u00f6\7>\2\2\u00f6\u00f7\7>\2\2\u00f7\u00f8\7B\2\2\u00f8\u00f9\7?\2\2"+
|
||||
"\u00f9\60\3\2\2\2\u00fa\u00fb\7@\2\2\u00fb\u00fc\7@\2\2\u00fc\u00fd\7"+
|
||||
"B\2\2\u00fd\u00fe\7?\2\2\u00fe\62\3\2\2\2\u00ff\u0100\7(\2\2\u0100\u0101"+
|
||||
"\7?\2\2\u0101\64\3\2\2\2\u0102\u0103\7~\2\2\u0103\u0104\7?\2\2\u0104\66"+
|
||||
"\3\2\2\2\u0105\u0106\7`\2\2\u0106\u0107\7?\2\2\u01078\3\2\2\2\u0108\u0109"+
|
||||
"\7*\2\2\u0109:\3\2\2\2\u010a\u010b\7+\2\2\u010b<\3\2\2\2\u010c\u010d\7"+
|
||||
",\2\2\u010d\u010e\7,\2\2\u010e>\3\2\2\2\u010f\u0110\7,\2\2\u0110@\3\2"+
|
||||
"\2\2\u0111\u0112\7\61\2\2\u0112B\3\2\2\2\u0113\u0114\7\61\2\2\u0114\u0115"+
|
||||
"\7\61\2\2\u0115D\3\2\2\2\u0116\u0117\7-\2\2\u0117F\3\2\2\2\u0118\u0119"+
|
||||
"\7/\2\2\u0119H\3\2\2\2\u011a\u011b\7>\2\2\u011b\u011c\7>\2\2\u011cJ\3"+
|
||||
"\2\2\2\u011d\u011e\7@\2\2\u011e\u011f\7@\2\2\u011fL\3\2\2\2\u0120\u0121"+
|
||||
"\7>\2\2\u0121\u0122\7>\2\2\u0122\u0123\7B\2\2\u0123N\3\2\2\2\u0124\u0125"+
|
||||
"\7@\2\2\u0125\u0126\7@\2\2\u0126\u0127\7B\2\2\u0127P\3\2\2\2\u0128\u0129"+
|
||||
"\7(\2\2\u0129R\3\2\2\2\u012a\u012b\7~\2\2\u012bT\3\2\2\2\u012c\u012d\7"+
|
||||
"`\2\2\u012dV\3\2\2\2\u012e\u012f\7c\2\2\u012f\u0130\7p\2\2\u0130\u0131"+
|
||||
"\7f\2\2\u0131X\3\2\2\2\u0132\u0133\7q\2\2\u0133\u0134\7t\2\2\u0134Z\3"+
|
||||
"\2\2\2\u0135\u0136\7z\2\2\u0136\u0137\7q\2\2\u0137\u0138\7t\2\2\u0138"+
|
||||
"\\\3\2\2\2\u0139\u013a\7?\2\2\u013a\u013b\7?\2\2\u013b^\3\2\2\2\u013c"+
|
||||
"\u013d\7#\2\2\u013d\u013e\7?\2\2\u013e`\3\2\2\2\u013f\u0140\7>\2\2\u0140"+
|
||||
"b\3\2\2\2\u0141\u0142\7@\2\2\u0142d\3\2\2\2\u0143\u0144\7>\2\2\u0144\u0145"+
|
||||
"\7?\2\2\u0145f\3\2\2\2\u0146\u0147\7@\2\2\u0147\u0148\7?\2\2\u0148h\3"+
|
||||
"\2\2\2\u0149\u014a\7\u0080\2\2\u014aj\3\2\2\2\u014b\u014c\7p\2\2\u014c"+
|
||||
"\u014d\7q\2\2\u014d\u014e\7v\2\2\u014el\3\2\2\2\u014f\u0150\7\60\2\2\u0150"+
|
||||
"n\3\2\2\2\u0151\u0152\7C\2\2\u0152p\3\2\2\2\u0153\u0154\7Z\2\2\u0154r"+
|
||||
"\3\2\2\2\u0155\u0156\7[\2\2\u0156t\3\2\2\2\u0157\u0158\7C\2\2\u0158\u0159"+
|
||||
"\7Z\2\2\u0159v\3\2\2\2\u015a\u015b\7C\2\2\u015b\u015c\7[\2\2\u015cx\3"+
|
||||
"\2\2\2\u015d\u015e\7Z\2\2\u015e\u015f\7[\2\2\u015fz\3\2\2\2\u0160\u0161"+
|
||||
"\7U\2\2\u0161\u0162\7E\2\2\u0162|\3\2\2\2\u0163\u0164\7U\2\2\u0164\u0165"+
|
||||
"\7K\2\2\u0165~\3\2\2\2\u0166\u0167\7U\2\2\u0167\u0168\7\\\2\2\u0168\u0080"+
|
||||
"\3\2\2\2\u0169\u016a\7v\2\2\u016a\u016b\7t\2\2\u016b\u016c\7w\2\2\u016c"+
|
||||
"\u016d\7g\2\2\u016d\u0082\3\2\2\2\u016e\u016f\7h\2\2\u016f\u0170\7c\2"+
|
||||
"\2\u0170\u0171\7n\2\2\u0171\u0172\7u\2\2\u0172\u0173\7g\2\2\u0173\u0084"+
|
||||
"\3\2\2\2\u0174\u0178\7=\2\2\u0175\u0177\n\2\2\2\u0176\u0175\3\2\2\2\u0177"+
|
||||
"\u017a\3\2\2\2\u0178\u0176\3\2\2\2\u0178\u0179\3\2\2\2\u0179\u017b\3\2"+
|
||||
"\2\2\u017a\u0178\3\2\2\2\u017b\u017c\bC\2\2\u017c\u0086\3\2\2\2\u017d"+
|
||||
"\u017e\t\3\2\2\u017e\u017f\3\2\2\2\u017f\u0180\bD\3\2\u0180\u0088\3\2"+
|
||||
"\2\2\u0181\u0183\t\2\2\2\u0182\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184"+
|
||||
"\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0187\bE"+
|
||||
"\3\2\u0187\u008a\3\2\2\2\u0188\u018c\t\4\2\2\u0189\u018b\t\5\2\2\u018a"+
|
||||
"\u0189\3\2\2\2\u018b\u018e\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d\3\2"+
|
||||
"\2\2\u018d\u008c\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0197\4\62;\2\u0190"+
|
||||
"\u0192\4\63;\2\u0191\u0193\4\62;\2\u0192\u0191\3\2\2\2\u0193\u0194\3\2"+
|
||||
"\2\2\u0194\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0197\3\2\2\2\u0196"+
|
||||
"\u018f\3\2\2\2\u0196\u0190\3\2\2\2\u0197\u008e\3\2\2\2\u0198\u019a\7&"+
|
||||
"\2\2\u0199\u019b\t\6\2\2\u019a\u0199\3\2\2\2\u019b\u019c\3\2\2\2\u019c"+
|
||||
"\u019a\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u0090\3\2\2\2\u019e\u01a0\7\'"+
|
||||
"\2\2\u019f\u01a1\4\62\63\2\u01a0\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2"+
|
||||
"\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u0092\3\2\2\2\u01a4\u01aa\5\u0095"+
|
||||
"K\2\u01a5\u01a7\t\7\2\2\u01a6\u01a8\t\b\2\2\u01a7\u01a6\3\2\2\2\u01a7"+
|
||||
"\u01a8\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01ab\5\u0095K\2\u01aa\u01a5"+
|
||||
"\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u0094\3\2\2\2\u01ac\u01ae\4\62;\2\u01ad"+
|
||||
"\u01ac\3\2\2\2\u01ae\u01af\3\2\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2"+
|
||||
"\2\2\u01b0\u01b7\3\2\2\2\u01b1\u01b3\7\60\2\2\u01b2\u01b4\4\62;\2\u01b3"+
|
||||
"\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2"+
|
||||
"\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b1\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8"+
|
||||
"\u0096\3\2\2\2\u01b9\u01ba\7^\2\2\u01ba\u01be\13\2\2\2\u01bb\u01bc\7^"+
|
||||
"\2\2\u01bc\u01be\5\u0089E\2\u01bd\u01b9\3\2\2\2\u01bd\u01bb\3\2\2\2\u01be"+
|
||||
"\u0098\3\2\2\2\u01bf\u01c4\7$\2\2\u01c0\u01c3\5\u0097L\2\u01c1\u01c3\n"+
|
||||
"\t\2\2\u01c2\u01c0\3\2\2\2\u01c2\u01c1\3\2\2\2\u01c3\u01c6\3\2\2\2\u01c4"+
|
||||
"\u01c2\3\2\2\2\u01c4\u01c5\3\2\2\2\u01c5\u01c7\3\2\2\2\u01c6\u01c4\3\2"+
|
||||
"\2\2\u01c7\u01c8\7$\2\2\u01c8\u01c9\bM\4\2\u01c9\u009a\3\2\2\2\23\2\u0178"+
|
||||
"\u0184\u018c\u0194\u0196\u019a\u019c\u01a2\u01a7\u01aa\u01af\u01b5\u01b7"+
|
||||
"\u01bd\u01c2\u01c4\5\2\3\2\b\2\2\3M\2";
|
||||
"\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^\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\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22"+
|
||||
"\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24"+
|
||||
"\3\24\3\25\3\25\3\25\3\25\3\25\3\25\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\31\3\31\3\31\3\31\3\31"+
|
||||
"\3\31\3\31\3\32\3\32\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/\3/\3/\3/\3\60\3\60\3\60\3\61"+
|
||||
"\3\61\3\62\3\62\3\63\3\63\3\63\3\64\3\64\3\65\3\65\3\65\3\66\3\66\3\66"+
|
||||
"\3\67\3\67\3\67\3\67\38\38\38\38\39\39\3:\3:\3;\3;\3;\3<\3<\3<\3=\3=\3"+
|
||||
"=\3>\3>\3>\3?\3?\3@\3@\3A\3A\3B\3B\3B\3B\3C\3C\3C\3D\3D\3D\3D\3E\3E\3"+
|
||||
"E\3F\3F\3G\3G\3H\3H\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3N\3"+
|
||||
"N\3O\3O\3O\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3S\3S\7S\u01fc"+
|
||||
"\nS\fS\16S\u01ff\13S\3S\3S\3T\3T\3T\3T\3U\6U\u0208\nU\rU\16U\u0209\3V"+
|
||||
"\3V\7V\u020e\nV\fV\16V\u0211\13V\3W\3W\3W\6W\u0216\nW\rW\16W\u0217\5W"+
|
||||
"\u021a\nW\3X\3X\6X\u021e\nX\rX\16X\u021f\3Y\3Y\6Y\u0224\nY\rY\16Y\u0225"+
|
||||
"\3Z\3Z\3Z\5Z\u022b\nZ\3Z\5Z\u022e\nZ\3[\6[\u0231\n[\r[\16[\u0232\3[\3"+
|
||||
"[\6[\u0237\n[\r[\16[\u0238\5[\u023b\n[\3\\\3\\\3\\\3\\\5\\\u0241\n\\\3"+
|
||||
"]\3]\3]\7]\u0246\n]\f]\16]\u0249\13]\3]\3]\3]\3^\3^\3^\3^\6^\u0252\n^"+
|
||||
"\r^\16^\u0253\3^\3^\3^\3^\3^\3\u0253\2_\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+
|
||||
"\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27"+
|
||||
"-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W"+
|
||||
"-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083"+
|
||||
"C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097"+
|
||||
"M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00ab"+
|
||||
"W\u00adX\u00afY\u00b1Z\u00b3[\u00b5\2\u00b7\2\u00b9\\\u00bb]\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\2GGg"+
|
||||
"g\4\2--//\6\2\f\f\16\17$$^^\2\u0267\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2"+
|
||||
"\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23"+
|
||||
"\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2"+
|
||||
"\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2"+
|
||||
"\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3"+
|
||||
"\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2"+
|
||||
"\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2"+
|
||||
"\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2["+
|
||||
"\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2"+
|
||||
"\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2"+
|
||||
"\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2"+
|
||||
"\2\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\u00b9\3\2\2"+
|
||||
"\2\2\u00bb\3\2\2\2\3\u00bd\3\2\2\2\5\u00bf\3\2\2\2\7\u00c1\3\2\2\2\t\u00c3"+
|
||||
"\3\2\2\2\13\u00c5\3\2\2\2\r\u00ca\3\2\2\2\17\u00d2\3\2\2\2\21\u00dc\3"+
|
||||
"\2\2\2\23\u00e0\3\2\2\2\25\u00e9\3\2\2\2\27\u00f1\3\2\2\2\31\u00fd\3\2"+
|
||||
"\2\2\33\u0109\3\2\2\2\35\u0114\3\2\2\2\37\u0116\3\2\2\2!\u0118\3\2\2\2"+
|
||||
"#\u011e\3\2\2\2%\u0125\3\2\2\2\'\u012a\3\2\2\2)\u012f\3\2\2\2+\u0135\3"+
|
||||
"\2\2\2-\u0139\3\2\2\2/\u013f\3\2\2\2\61\u0145\3\2\2\2\63\u014c\3\2\2\2"+
|
||||
"\65\u014e\3\2\2\2\67\u0150\3\2\2\29\u0153\3\2\2\2;\u0156\3\2\2\2=\u0159"+
|
||||
"\3\2\2\2?\u015d\3\2\2\2A\u0160\3\2\2\2C\u0164\3\2\2\2E\u0168\3\2\2\2G"+
|
||||
"\u016c\3\2\2\2I\u0171\3\2\2\2K\u0176\3\2\2\2M\u0179\3\2\2\2O\u017c\3\2"+
|
||||
"\2\2Q\u017f\3\2\2\2S\u0182\3\2\2\2U\u0185\3\2\2\2W\u0187\3\2\2\2Y\u0189"+
|
||||
"\3\2\2\2[\u018b\3\2\2\2]\u018d\3\2\2\2_\u0191\3\2\2\2a\u0194\3\2\2\2c"+
|
||||
"\u0196\3\2\2\2e\u0198\3\2\2\2g\u019b\3\2\2\2i\u019d\3\2\2\2k\u01a0\3\2"+
|
||||
"\2\2m\u01a3\3\2\2\2o\u01a7\3\2\2\2q\u01ab\3\2\2\2s\u01ad\3\2\2\2u\u01af"+
|
||||
"\3\2\2\2w\u01b2\3\2\2\2y\u01b5\3\2\2\2{\u01b8\3\2\2\2}\u01bb\3\2\2\2\177"+
|
||||
"\u01bd\3\2\2\2\u0081\u01bf\3\2\2\2\u0083\u01c1\3\2\2\2\u0085\u01c5\3\2"+
|
||||
"\2\2\u0087\u01c8\3\2\2\2\u0089\u01cc\3\2\2\2\u008b\u01cf\3\2\2\2\u008d"+
|
||||
"\u01d1\3\2\2\2\u008f\u01d3\3\2\2\2\u0091\u01d5\3\2\2\2\u0093\u01d7\3\2"+
|
||||
"\2\2\u0095\u01da\3\2\2\2\u0097\u01dd\3\2\2\2\u0099\u01e0\3\2\2\2\u009b"+
|
||||
"\u01e3\3\2\2\2\u009d\u01e6\3\2\2\2\u009f\u01e9\3\2\2\2\u00a1\u01ee\3\2"+
|
||||
"\2\2\u00a3\u01f4\3\2\2\2\u00a5\u01f9\3\2\2\2\u00a7\u0202\3\2\2\2\u00a9"+
|
||||
"\u0207\3\2\2\2\u00ab\u020b\3\2\2\2\u00ad\u0219\3\2\2\2\u00af\u021b\3\2"+
|
||||
"\2\2\u00b1\u0221\3\2\2\2\u00b3\u0227\3\2\2\2\u00b5\u0230\3\2\2\2\u00b7"+
|
||||
"\u0240\3\2\2\2\u00b9\u0242\3\2\2\2\u00bb\u024d\3\2\2\2\u00bd\u00be\7\u0080"+
|
||||
"\2\2\u00be\4\3\2\2\2\u00bf\u00c0\7}\2\2\u00c0\6\3\2\2\2\u00c1\u00c2\7"+
|
||||
"\177\2\2\u00c2\b\3\2\2\2\u00c3\u00c4\7<\2\2\u00c4\n\3\2\2\2\u00c5\u00c6"+
|
||||
"\7i\2\2\u00c6\u00c7\7q\2\2\u00c7\u00c8\7v\2\2\u00c8\u00c9\7q\2\2\u00c9"+
|
||||
"\f\3\2\2\2\u00ca\u00cb\7\'\2\2\u00cb\u00cc\7q\2\2\u00cc\u00cd\7w\2\2\u00cd"+
|
||||
"\u00ce\7v\2\2\u00ce\u00cf\7r\2\2\u00cf\u00d0\7w\2\2\u00d0\u00d1\7v\2\2"+
|
||||
"\u00d1\16\3\2\2\2\u00d2\u00d3\7\'\2\2\u00d3\u00d4\7n\2\2\u00d4\u00d5\7"+
|
||||
"c\2\2\u00d5\u00d6\7w\2\2\u00d6\u00d7\7p\2\2\u00d7\u00d8\7e\2\2\u00d8\u00d9"+
|
||||
"\7j\2\2\u00d9\u00da\7g\2\2\u00da\u00db\7t\2\2\u00db\20\3\2\2\2\u00dc\u00dd"+
|
||||
"\7\'\2\2\u00dd\u00de\7|\2\2\u00de\u00df\7r\2\2\u00df\22\3\2\2\2\u00e0"+
|
||||
"\u00e1\7\'\2\2\u00e1\u00e2\7c\2\2\u00e2\u00e3\7f\2\2\u00e3\u00e4\7f\2"+
|
||||
"\2\u00e4\u00e5\7t\2\2\u00e5\u00e6\7g\2\2\u00e6\u00e7\7u\2\2\u00e7\u00e8"+
|
||||
"\7u\2\2\u00e8\24\3\2\2\2\u00e9\u00ea\7\'\2\2\u00ea\u00eb\7k\2\2\u00eb"+
|
||||
"\u00ec\7o\2\2\u00ec\u00ed\7r\2\2\u00ed\u00ee\7q\2\2\u00ee\u00ef\7t\2\2"+
|
||||
"\u00ef\u00f0\7v\2\2\u00f0\26\3\2\2\2\u00f1\u00f2\7\'\2\2\u00f2\u00f3\7"+
|
||||
"d\2\2\u00f3\u00f4\7t\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6\7c\2\2\u00f6\u00f7"+
|
||||
"\7m\2\2\u00f7\u00f8\7r\2\2\u00f8\u00f9\7q\2\2\u00f9\u00fa\7k\2\2\u00fa"+
|
||||
"\u00fb\7p\2\2\u00fb\u00fc\7v\2\2\u00fc\30\3\2\2\2\u00fd\u00fe\7\'\2\2"+
|
||||
"\u00fe\u00ff\7c\2\2\u00ff\u0100\7u\2\2\u0100\u0101\7o\2\2\u0101\u0102"+
|
||||
"\7k\2\2\u0102\u0103\7p\2\2\u0103\u0104\7e\2\2\u0104\u0105\7n\2\2\u0105"+
|
||||
"\u0106\7w\2\2\u0106\u0107\7f\2\2\u0107\u0108\7g\2\2\u0108\32\3\2\2\2\u0109"+
|
||||
"\u010a\7\'\2\2\u010a\u010b\7c\2\2\u010b\u010c\7u\2\2\u010c\u010d\7o\2"+
|
||||
"\2\u010d\u010e\7d\2\2\u010e\u010f\7k\2\2\u010f\u0110\7p\2\2\u0110\u0111"+
|
||||
"\7c\2\2\u0111\u0112\7t\2\2\u0112\u0113\7{\2\2\u0113\34\3\2\2\2\u0114\u0115"+
|
||||
"\7.\2\2\u0115\36\3\2\2\2\u0116\u0117\7?\2\2\u0117 \3\2\2\2\u0118\u0119"+
|
||||
"\7e\2\2\u0119\u011a\7q\2\2\u011a\u011b\7p\2\2\u011b\u011c\7u\2\2\u011c"+
|
||||
"\u011d\7v\2\2\u011d\"\3\2\2\2\u011e\u011f\7o\2\2\u011f\u0120\7g\2\2\u0120"+
|
||||
"\u0121\7o\2\2\u0121\u0122\7q\2\2\u0122\u0123\7t\2\2\u0123\u0124\7{\2\2"+
|
||||
"\u0124$\3\2\2\2\u0125\u0126\7d\2\2\u0126\u0127\7{\2\2\u0127\u0128\7v\2"+
|
||||
"\2\u0128\u0129\7g\2\2\u0129&\3\2\2\2\u012a\u012b\7y\2\2\u012b\u012c\7"+
|
||||
"q\2\2\u012c\u012d\7t\2\2\u012d\u012e\7f\2\2\u012e(\3\2\2\2\u012f\u0130"+
|
||||
"\7h\2\2\u0130\u0131\7n\2\2\u0131\u0132\7q\2\2\u0132\u0133\7c\2\2\u0133"+
|
||||
"\u0134\7v\2\2\u0134*\3\2\2\2\u0135\u0136\7u\2\2\u0136\u0137\7v\2\2\u0137"+
|
||||
"\u0138\7t\2\2\u0138,\3\2\2\2\u0139\u013a\7u\2\2\u013a\u013b\7v\2\2\u013b"+
|
||||
"\u013c\7t\2\2\u013c\u013d\7a\2\2\u013d\u013e\7r\2\2\u013e.\3\2\2\2\u013f"+
|
||||
"\u0140\7u\2\2\u0140\u0141\7v\2\2\u0141\u0142\7t\2\2\u0142\u0143\7a\2\2"+
|
||||
"\u0143\u0144\7u\2\2\u0144\60\3\2\2\2\u0145\u0146\7u\2\2\u0146\u0147\7"+
|
||||
"v\2\2\u0147\u0148\7t\2\2\u0148\u0149\7a\2\2\u0149\u014a\7r\2\2\u014a\u014b"+
|
||||
"\7u\2\2\u014b\62\3\2\2\2\u014c\u014d\7]\2\2\u014d\64\3\2\2\2\u014e\u014f"+
|
||||
"\7_\2\2\u014f\66\3\2\2\2\u0150\u0151\7-\2\2\u0151\u0152\7?\2\2\u01528"+
|
||||
"\3\2\2\2\u0153\u0154\7/\2\2\u0154\u0155\7?\2\2\u0155:\3\2\2\2\u0156\u0157"+
|
||||
"\7\61\2\2\u0157\u0158\7?\2\2\u0158<\3\2\2\2\u0159\u015a\7\61\2\2\u015a"+
|
||||
"\u015b\7\61\2\2\u015b\u015c\7?\2\2\u015c>\3\2\2\2\u015d\u015e\7,\2\2\u015e"+
|
||||
"\u015f\7?\2\2\u015f@\3\2\2\2\u0160\u0161\7,\2\2\u0161\u0162\7,\2\2\u0162"+
|
||||
"\u0163\7?\2\2\u0163B\3\2\2\2\u0164\u0165\7>\2\2\u0165\u0166\7>\2\2\u0166"+
|
||||
"\u0167\7?\2\2\u0167D\3\2\2\2\u0168\u0169\7@\2\2\u0169\u016a\7@\2\2\u016a"+
|
||||
"\u016b\7?\2\2\u016bF\3\2\2\2\u016c\u016d\7>\2\2\u016d\u016e\7>\2\2\u016e"+
|
||||
"\u016f\7B\2\2\u016f\u0170\7?\2\2\u0170H\3\2\2\2\u0171\u0172\7@\2\2\u0172"+
|
||||
"\u0173\7@\2\2\u0173\u0174\7B\2\2\u0174\u0175\7?\2\2\u0175J\3\2\2\2\u0176"+
|
||||
"\u0177\7(\2\2\u0177\u0178\7?\2\2\u0178L\3\2\2\2\u0179\u017a\7~\2\2\u017a"+
|
||||
"\u017b\7?\2\2\u017bN\3\2\2\2\u017c\u017d\7`\2\2\u017d\u017e\7?\2\2\u017e"+
|
||||
"P\3\2\2\2\u017f\u0180\7-\2\2\u0180\u0181\7-\2\2\u0181R\3\2\2\2\u0182\u0183"+
|
||||
"\7/\2\2\u0183\u0184\7/\2\2\u0184T\3\2\2\2\u0185\u0186\7*\2\2\u0186V\3"+
|
||||
"\2\2\2\u0187\u0188\7+\2\2\u0188X\3\2\2\2\u0189\u018a\7-\2\2\u018aZ\3\2"+
|
||||
"\2\2\u018b\u018c\7/\2\2\u018c\\\3\2\2\2\u018d\u018e\7p\2\2\u018e\u018f"+
|
||||
"\7q\2\2\u018f\u0190\7v\2\2\u0190^\3\2\2\2\u0191\u0192\7,\2\2\u0192\u0193"+
|
||||
"\7,\2\2\u0193`\3\2\2\2\u0194\u0195\7,\2\2\u0195b\3\2\2\2\u0196\u0197\7"+
|
||||
"\61\2\2\u0197d\3\2\2\2\u0198\u0199\7\61\2\2\u0199\u019a\7\61\2\2\u019a"+
|
||||
"f\3\2\2\2\u019b\u019c\7\'\2\2\u019ch\3\2\2\2\u019d\u019e\7>\2\2\u019e"+
|
||||
"\u019f\7>\2\2\u019fj\3\2\2\2\u01a0\u01a1\7@\2\2\u01a1\u01a2\7@\2\2\u01a2"+
|
||||
"l\3\2\2\2\u01a3\u01a4\7>\2\2\u01a4\u01a5\7>\2\2\u01a5\u01a6\7B\2\2\u01a6"+
|
||||
"n\3\2\2\2\u01a7\u01a8\7@\2\2\u01a8\u01a9\7@\2\2\u01a9\u01aa\7B\2\2\u01aa"+
|
||||
"p\3\2\2\2\u01ab\u01ac\7>\2\2\u01acr\3\2\2\2\u01ad\u01ae\7@\2\2\u01aet"+
|
||||
"\3\2\2\2\u01af\u01b0\7>\2\2\u01b0\u01b1\7?\2\2\u01b1v\3\2\2\2\u01b2\u01b3"+
|
||||
"\7@\2\2\u01b3\u01b4\7?\2\2\u01b4x\3\2\2\2\u01b5\u01b6\7?\2\2\u01b6\u01b7"+
|
||||
"\7?\2\2\u01b7z\3\2\2\2\u01b8\u01b9\7#\2\2\u01b9\u01ba\7?\2\2\u01ba|\3"+
|
||||
"\2\2\2\u01bb\u01bc\7(\2\2\u01bc~\3\2\2\2\u01bd\u01be\7`\2\2\u01be\u0080"+
|
||||
"\3\2\2\2\u01bf\u01c0\7~\2\2\u01c0\u0082\3\2\2\2\u01c1\u01c2\7c\2\2\u01c2"+
|
||||
"\u01c3\7p\2\2\u01c3\u01c4\7f\2\2\u01c4\u0084\3\2\2\2\u01c5\u01c6\7q\2"+
|
||||
"\2\u01c6\u01c7\7t\2\2\u01c7\u0086\3\2\2\2\u01c8\u01c9\7z\2\2\u01c9\u01ca"+
|
||||
"\7q\2\2\u01ca\u01cb\7t\2\2\u01cb\u0088\3\2\2\2\u01cc\u01cd\7v\2\2\u01cd"+
|
||||
"\u01ce\7q\2\2\u01ce\u008a\3\2\2\2\u01cf\u01d0\7\60\2\2\u01d0\u008c\3\2"+
|
||||
"\2\2\u01d1\u01d2\7C\2\2\u01d2\u008e\3\2\2\2\u01d3\u01d4\7Z\2\2\u01d4\u0090"+
|
||||
"\3\2\2\2\u01d5\u01d6\7[\2\2\u01d6\u0092\3\2\2\2\u01d7\u01d8\7C\2\2\u01d8"+
|
||||
"\u01d9\7Z\2\2\u01d9\u0094\3\2\2\2\u01da\u01db\7C\2\2\u01db\u01dc\7[\2"+
|
||||
"\2\u01dc\u0096\3\2\2\2\u01dd\u01de\7Z\2\2\u01de\u01df\7[\2\2\u01df\u0098"+
|
||||
"\3\2\2\2\u01e0\u01e1\7U\2\2\u01e1\u01e2\7E\2\2\u01e2\u009a\3\2\2\2\u01e3"+
|
||||
"\u01e4\7U\2\2\u01e4\u01e5\7K\2\2\u01e5\u009c\3\2\2\2\u01e6\u01e7\7U\2"+
|
||||
"\2\u01e7\u01e8\7\\\2\2\u01e8\u009e\3\2\2\2\u01e9\u01ea\7v\2\2\u01ea\u01eb"+
|
||||
"\7t\2\2\u01eb\u01ec\7w\2\2\u01ec\u01ed\7g\2\2\u01ed\u00a0\3\2\2\2\u01ee"+
|
||||
"\u01ef\7h\2\2\u01ef\u01f0\7c\2\2\u01f0\u01f1\7n\2\2\u01f1\u01f2\7u\2\2"+
|
||||
"\u01f2\u01f3\7g\2\2\u01f3\u00a2\3\2\2\2\u01f4\u01f5\7\'\2\2\u01f5\u01f6"+
|
||||
"\7c\2\2\u01f6\u01f7\7u\2\2\u01f7\u01f8\7o\2\2\u01f8\u00a4\3\2\2\2\u01f9"+
|
||||
"\u01fd\7=\2\2\u01fa\u01fc\n\2\2\2\u01fb\u01fa\3\2\2\2\u01fc\u01ff\3\2"+
|
||||
"\2\2\u01fd\u01fb\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe\u0200\3\2\2\2\u01ff"+
|
||||
"\u01fd\3\2\2\2\u0200\u0201\bS\2\2\u0201\u00a6\3\2\2\2\u0202\u0203\t\3"+
|
||||
"\2\2\u0203\u0204\3\2\2\2\u0204\u0205\bT\3\2\u0205\u00a8\3\2\2\2\u0206"+
|
||||
"\u0208\t\2\2\2\u0207\u0206\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u0207\3\2"+
|
||||
"\2\2\u0209\u020a\3\2\2\2\u020a\u00aa\3\2\2\2\u020b\u020f\t\4\2\2\u020c"+
|
||||
"\u020e\t\5\2\2\u020d\u020c\3\2\2\2\u020e\u0211\3\2\2\2\u020f\u020d\3\2"+
|
||||
"\2\2\u020f\u0210\3\2\2\2\u0210\u00ac\3\2\2\2\u0211\u020f\3\2\2\2\u0212"+
|
||||
"\u021a\4\62;\2\u0213\u0215\4\63;\2\u0214\u0216\4\62;\2\u0215\u0214\3\2"+
|
||||
"\2\2\u0216\u0217\3\2\2\2\u0217\u0215\3\2\2\2\u0217\u0218\3\2\2\2\u0218"+
|
||||
"\u021a\3\2\2\2\u0219\u0212\3\2\2\2\u0219\u0213\3\2\2\2\u021a\u00ae\3\2"+
|
||||
"\2\2\u021b\u021d\7&\2\2\u021c\u021e\t\6\2\2\u021d\u021c\3\2\2\2\u021e"+
|
||||
"\u021f\3\2\2\2\u021f\u021d\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u00b0\3\2"+
|
||||
"\2\2\u0221\u0223\7\'\2\2\u0222\u0224\4\62\63\2\u0223\u0222\3\2\2\2\u0224"+
|
||||
"\u0225\3\2\2\2\u0225\u0223\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u00b2\3\2"+
|
||||
"\2\2\u0227\u022d\5\u00b5[\2\u0228\u022a\t\7\2\2\u0229\u022b\t\b\2\2\u022a"+
|
||||
"\u0229\3\2\2\2\u022a\u022b\3\2\2\2\u022b\u022c\3\2\2\2\u022c\u022e\5\u00b5"+
|
||||
"[\2\u022d\u0228\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u00b4\3\2\2\2\u022f"+
|
||||
"\u0231\4\62;\2\u0230\u022f\3\2\2\2\u0231\u0232\3\2\2\2\u0232\u0230\3\2"+
|
||||
"\2\2\u0232\u0233\3\2\2\2\u0233\u023a\3\2\2\2\u0234\u0236\7\60\2\2\u0235"+
|
||||
"\u0237\4\62;\2\u0236\u0235\3\2\2\2\u0237\u0238\3\2\2\2\u0238\u0236\3\2"+
|
||||
"\2\2\u0238\u0239\3\2\2\2\u0239\u023b\3\2\2\2\u023a\u0234\3\2\2\2\u023a"+
|
||||
"\u023b\3\2\2\2\u023b\u00b6\3\2\2\2\u023c\u023d\7^\2\2\u023d\u0241\13\2"+
|
||||
"\2\2\u023e\u023f\7^\2\2\u023f\u0241\5\u00a9U\2\u0240\u023c\3\2\2\2\u0240"+
|
||||
"\u023e\3\2\2\2\u0241\u00b8\3\2\2\2\u0242\u0247\7$\2\2\u0243\u0246\5\u00b7"+
|
||||
"\\\2\u0244\u0246\n\t\2\2\u0245\u0243\3\2\2\2\u0245\u0244\3\2\2\2\u0246"+
|
||||
"\u0249\3\2\2\2\u0247\u0245\3\2\2\2\u0247\u0248\3\2\2\2\u0248\u024a\3\2"+
|
||||
"\2\2\u0249\u0247\3\2\2\2\u024a\u024b\7$\2\2\u024b\u024c\b]\4\2\u024c\u00ba"+
|
||||
"\3\2\2\2\u024d\u024e\7}\2\2\u024e\u024f\7}\2\2\u024f\u0251\3\2\2\2\u0250"+
|
||||
"\u0252\13\2\2\2\u0251\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0254\3"+
|
||||
"\2\2\2\u0253\u0251\3\2\2\2\u0254\u0255\3\2\2\2\u0255\u0256\7\177\2\2\u0256"+
|
||||
"\u0257\7\177\2\2\u0257\u0258\3\2\2\2\u0258\u0259\b^\5\2\u0259\u00bc\3"+
|
||||
"\2\2\2\24\2\u01fd\u0209\u020f\u0217\u0219\u021d\u021f\u0225\u022a\u022d"+
|
||||
"\u0232\u0238\u023a\u0240\u0245\u0247\u0253\6\2\3\2\b\2\2\3]\2\3^\3";
|
||||
public static final ATN _ATN =
|
||||
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
|
||||
static {
|
||||
|
@ -63,77 +63,110 @@ T__61=62
|
||||
T__62=63
|
||||
T__63=64
|
||||
T__64=65
|
||||
COMMENT=66
|
||||
WS=67
|
||||
EOL=68
|
||||
NAME=69
|
||||
DEC_INTEGER=70
|
||||
HEX_INTEGER=71
|
||||
BIN_INTEGER=72
|
||||
FLOAT_NUMBER=73
|
||||
STRING=74
|
||||
'%'=1
|
||||
','=2
|
||||
'='=3
|
||||
'const'=4
|
||||
'memory'=5
|
||||
'byte'=6
|
||||
'word'=7
|
||||
'float'=8
|
||||
'str'=9
|
||||
'str_p'=10
|
||||
'str_s'=11
|
||||
'str_ps'=12
|
||||
'['=13
|
||||
']'=14
|
||||
'+='=15
|
||||
'-='=16
|
||||
'/='=17
|
||||
'//='=18
|
||||
'*='=19
|
||||
'**='=20
|
||||
'<<='=21
|
||||
'>>='=22
|
||||
'<<@='=23
|
||||
'>>@='=24
|
||||
'&='=25
|
||||
'|='=26
|
||||
'^='=27
|
||||
'('=28
|
||||
')'=29
|
||||
'**'=30
|
||||
'*'=31
|
||||
'/'=32
|
||||
'//'=33
|
||||
'+'=34
|
||||
'-'=35
|
||||
'<<'=36
|
||||
'>>'=37
|
||||
'<<@'=38
|
||||
'>>@'=39
|
||||
'&'=40
|
||||
'|'=41
|
||||
'^'=42
|
||||
'and'=43
|
||||
'or'=44
|
||||
'xor'=45
|
||||
'=='=46
|
||||
'!='=47
|
||||
'<'=48
|
||||
'>'=49
|
||||
'<='=50
|
||||
'>='=51
|
||||
'~'=52
|
||||
'not'=53
|
||||
'.'=54
|
||||
'A'=55
|
||||
'X'=56
|
||||
'Y'=57
|
||||
'AX'=58
|
||||
'AY'=59
|
||||
'XY'=60
|
||||
'SC'=61
|
||||
'SI'=62
|
||||
'SZ'=63
|
||||
'true'=64
|
||||
'false'=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
|
||||
COMMENT=82
|
||||
WS=83
|
||||
EOL=84
|
||||
NAME=85
|
||||
DEC_INTEGER=86
|
||||
HEX_INTEGER=87
|
||||
BIN_INTEGER=88
|
||||
FLOAT_NUMBER=89
|
||||
STRING=90
|
||||
INLINEASMBLOCK=91
|
||||
'~'=1
|
||||
'{'=2
|
||||
'}'=3
|
||||
':'=4
|
||||
'goto'=5
|
||||
'%output'=6
|
||||
'%launcher'=7
|
||||
'%zp'=8
|
||||
'%address'=9
|
||||
'%import'=10
|
||||
'%breakpoint'=11
|
||||
'%asminclude'=12
|
||||
'%asmbinary'=13
|
||||
','=14
|
||||
'='=15
|
||||
'const'=16
|
||||
'memory'=17
|
||||
'byte'=18
|
||||
'word'=19
|
||||
'float'=20
|
||||
'str'=21
|
||||
'str_p'=22
|
||||
'str_s'=23
|
||||
'str_ps'=24
|
||||
'['=25
|
||||
']'=26
|
||||
'+='=27
|
||||
'-='=28
|
||||
'/='=29
|
||||
'//='=30
|
||||
'*='=31
|
||||
'**='=32
|
||||
'<<='=33
|
||||
'>>='=34
|
||||
'<<@='=35
|
||||
'>>@='=36
|
||||
'&='=37
|
||||
'|='=38
|
||||
'^='=39
|
||||
'++'=40
|
||||
'--'=41
|
||||
'('=42
|
||||
')'=43
|
||||
'+'=44
|
||||
'-'=45
|
||||
'not'=46
|
||||
'**'=47
|
||||
'*'=48
|
||||
'/'=49
|
||||
'//'=50
|
||||
'%'=51
|
||||
'<<'=52
|
||||
'>>'=53
|
||||
'<<@'=54
|
||||
'>>@'=55
|
||||
'<'=56
|
||||
'>'=57
|
||||
'<='=58
|
||||
'>='=59
|
||||
'=='=60
|
||||
'!='=61
|
||||
'&'=62
|
||||
'^'=63
|
||||
'|'=64
|
||||
'and'=65
|
||||
'or'=66
|
||||
'xor'=67
|
||||
'to'=68
|
||||
'.'=69
|
||||
'A'=70
|
||||
'X'=71
|
||||
'Y'=72
|
||||
'AX'=73
|
||||
'AY'=74
|
||||
'XY'=75
|
||||
'SC'=76
|
||||
'SI'=77
|
||||
'SZ'=78
|
||||
'true'=79
|
||||
'false'=80
|
||||
'%asm'=81
|
||||
|
File diff suppressed because it is too large
Load Diff
BIN
lib/apiguardian-api-1.0.0.jar
Normal file
BIN
lib/apiguardian-api-1.0.0.jar
Normal file
Binary file not shown.
BIN
lib/hamcrest-core-1.2.1.jar
Normal file
BIN
lib/hamcrest-core-1.2.1.jar
Normal file
Binary file not shown.
BIN
lib/hamcrest-library-1.2.1.jar
Normal file
BIN
lib/hamcrest-library-1.2.1.jar
Normal file
Binary file not shown.
BIN
lib/junit-jupiter-api-5.2.0.jar
Normal file
BIN
lib/junit-jupiter-api-5.2.0.jar
Normal file
Binary file not shown.
BIN
lib/junit-platform-commons-1.2.0.jar
Normal file
BIN
lib/junit-platform-commons-1.2.0.jar
Normal file
Binary file not shown.
BIN
lib/opentest4j-1.1.0.jar
Normal file
BIN
lib/opentest4j-1.1.0.jar
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user