diff --git a/il65/antlr/examples/imported.ill b/il65/antlr/examples/imported.ill new file mode 100644 index 000000000..4df94482e --- /dev/null +++ b/il65/antlr/examples/imported.ill @@ -0,0 +1,6 @@ +~ extra { + ; this is imported + + X = 42 + return 44 +} diff --git a/il65/antlr/examples/test.ill b/il65/antlr/examples/test.ill new file mode 100644 index 000000000..df9437137 --- /dev/null +++ b/il65/antlr/examples/test.ill @@ -0,0 +1,14 @@ +~ main $c000 { + const byte hopla=55-33 + const byte hopla2=55-hopla + A = "derp" * %000100 + + %import maghierniet + + return 1+999 +} + +%import imported1, 33, aaa +%import imported2 +%import imported3 + diff --git a/il65/antlr/il65.g4 b/il65/antlr/il65.g4 index e2312183c..8831afff9 100644 --- a/il65/antlr/il65.g4 +++ b/il65/antlr/il65.g4 @@ -63,11 +63,12 @@ statement : | unconditionaljump | postincrdecr | inlineasm - | label + | labeldef + | returnstmt // @todo forloop, whileloop, repeatloop, ifelse ; -label : identifier ':' ; +labeldef : identifier ':' ; call_location : integerliteral | identifier | scoped_identifier ; @@ -135,13 +136,15 @@ expression : functioncall : - call_location '(' function_arg_list? ')' + call_location '(' expression_list? ')' ; -function_arg_list : +expression_list : expression (',' expression)* ; +returnstmt : 'return' expression_list? ; + identifier : NAME ; scoped_identifier : NAME ('.' NAME)+ ; diff --git a/il65/src/il65/AstChecker.kt b/il65/src/il65/AstChecker.kt new file mode 100644 index 000000000..6874111bf --- /dev/null +++ b/il65/src/il65/AstChecker.kt @@ -0,0 +1,81 @@ +package il65 + +import il65.ast.* + + +fun Module.checkValid() : List { + val checker = AstChecker() + this.process(checker) + return checker.result() +} + + +class AstChecker : IAstProcessor { + + private val checkResult: MutableList = mutableListOf() + + fun result(): List { + return checkResult + } + + override fun process(expr: PrefixExpression): IExpression { + return expr + } + + override fun process(expr: BinaryExpression): IExpression { + return expr + } + + /** + * check the arguments of the directive + */ + override fun process(directive: Directive): IStatement { + fun err(msg: String) { + checkResult.add(SyntaxError(msg, directive)) + } + when(directive.directive) { + "%output" -> { + if(directive.args.size!=1 || directive.args[0].name != "raw" && directive.args[0].name != "prg") + err("invalid output directive type, expected raw or prg") + } + "%launcher" -> { + if(directive.args.size!=1 || directive.args[0].name != "basic" && directive.args[0].name != "none") + err("invalid launcher directive type, expected basic or none") + } + "%zp" -> { + if(directive.args.size!=1 || + directive.args[0].name != "compatible" && + directive.args[0].name != "full" && + directive.args[0].name != "full-restore") + err("invalid zp directive style, expected compatible, full or full-restore") + } + "%address" -> { + if(directive.args.size!=1 || directive.args[0].int == null) + err("invalid address directive, expected numeric address argument") + } + "%import" -> { + if(directive.args.size!=1 || directive.args[0].name==null) + err("invalid import directive, expected module name argument") + } + "%breakpoint" -> { + if(directive.args.isNotEmpty()) + err("invalid breakpoint directive, expected no arguments") + } + "%asminclude" -> { + if(directive.args.size!=2 || directive.args[0].str==null || directive.args[1].name==null) + err("invalid asminclude directive, expected arguments: \"filename\", scopelabel") + } + "%asmbinary" -> { + val errormsg = "invalid asmbinary directive, expected arguments: \"filename\" [, offset [, length ] ]" + if(directive.args.isEmpty()) err(errormsg) + if(directive.args.isNotEmpty() && directive.args[0].str==null) err(errormsg) + if(directive.args.size>=2 && directive.args[1].int==null) err(errormsg) + if(directive.args.size==3 && directive.args[2].int==null) err(errormsg) + if(directive.args.size>3) err(errormsg) + } + else -> throw AstException("invalid directive ${directive.directive}") + } + return directive + } + +} diff --git a/il65/src/il65/AstOptimizer.kt b/il65/src/il65/AstOptimizer.kt index 281df15e9..c5fe68966 100644 --- a/il65/src/il65/AstOptimizer.kt +++ b/il65/src/il65/AstOptimizer.kt @@ -4,25 +4,20 @@ import il65.ast.* import kotlin.math.pow -interface IAstOptimizer { - fun optimize(expr: PrefixExpression): IExpression - fun optimize(expr: BinaryExpression): IExpression -} - fun Module.optimized() : Module { val optimizer = AstOptimizer() - var result = this.optimizeOnceWith(optimizer) + var result = this.process(optimizer) while(optimizer.optimizationsDone>0) { println("Optimizations done: ${optimizer.optimizationsDone}") optimizer.reset() - result = result.optimizeOnceWith(optimizer) + result = result.process(optimizer) } - println("nothing left to optimize!") + println("nothing left to process!") return result } -class AstOptimizer : IAstOptimizer { +class AstOptimizer : IAstProcessor { var optimizationsDone: Int = 0 private set @@ -32,16 +27,16 @@ class AstOptimizer : IAstOptimizer { } /** - * Try to optimize a unary prefix expression. + * Try to process a unary prefix expression. * Compile-time constant sub expressions will be evaluated on the spot. * For instance, the expression for "- 4.5" will be optimized into the float literal -4.5 */ - override fun optimize(expr: PrefixExpression): IExpression { - expr.expression = expr.expression.optimize(this) // optimize sub expression first + override fun process(expr: PrefixExpression): IExpression { + expr.expression = expr.expression.process(this) // process sub expression first val subexpr = expr.expression if (subexpr is LiteralValue) { - // optimize prefixed literal values (such as -3, not true) + // process prefixed literal values (such as -3, not true) return when { expr.operator == "+" -> subexpr expr.operator == "-" -> return when { @@ -80,15 +75,15 @@ class AstOptimizer : IAstOptimizer { } /** - * Try to optimize a binary expression. + * Try to process a binary expression. * Compile-time constant sub expressions will be evaluated on the spot. * For instance, "9 * (4 + 2)" will be optimized into the integer literal 54. */ - override fun optimize(expr: BinaryExpression): IExpression { + override fun process(expr: BinaryExpression): IExpression { val evaluator = ConstExprEvaluator() - // optimize sub expressions first - expr.left = expr.left.optimize(this) - expr.right = expr.right.optimize(this) + // process sub expressions first + expr.left = expr.left.process(this) + expr.right = expr.right.process(this) val leftconst = expr.left.constValue() val rightconst = expr.right.constValue() @@ -101,6 +96,11 @@ class AstOptimizer : IAstOptimizer { else -> expr } } + + override fun process(directive: Directive): IStatement { + println("directove OPT $directive") + return directive + } } diff --git a/il65/src/il65/Main.kt b/il65/src/il65/Main.kt index 333596a67..1df9c8464 100644 --- a/il65/src/il65/Main.kt +++ b/il65/src/il65/Main.kt @@ -1,13 +1,15 @@ package il65 -import il65.ast.IStatement +import il65.ast.Directive import il65.ast.Module +import il65.ast.SyntaxError import il65.ast.toAst import il65.parser.il65Lexer import il65.parser.il65Parser import org.antlr.v4.runtime.CharStreams import org.antlr.v4.runtime.CommonTokenStream import org.antlr.v4.runtime.Lexer +import java.nio.file.Paths class MyTokenStream(lexer: Lexer) : CommonTokenStream(lexer) { @@ -27,34 +29,70 @@ class MyTokenStream(lexer: Lexer) : CommonTokenStream(lexer) { } } -public inline fun Module.map(transform: (IStatement) -> R): List { - val result = ArrayList(lines.size) - for (line in this.lines) { - result.add(transform(line)) +class ParsingFailedError(override var message: String) : Exception(message) + + +fun loadModule(filename: String) : Module { + + val filePath = Paths.get(filename).normalize() + val fileLocation = filePath.parent + val fileName = filePath.fileName + + println("importing '$fileName' (from $fileLocation)...") + val input = CharStreams.fromPath(filePath) + val lexer = il65Lexer(input) + val tokens = MyTokenStream(lexer) + val parser = il65Parser(tokens) + val parseTree = parser.module() + if(parser.numberOfSyntaxErrors > 0) + throw ParsingFailedError("There are ${parser.numberOfSyntaxErrors} syntax errors in '$fileName'.") + + // TODO the comments: + // tokens.commentTokens().forEach { println(it) } + + // convert to Ast (optimizing this is done as a final step) + var moduleAst = parseTree.toAst(fileName.toString(),true) + val checkResult = moduleAst.checkValid() + checkResult.forEach { it.printError() } + if(checkResult.isNotEmpty()) + throw ParsingFailedError("There are ${checkResult.size} syntax errors in '$fileName'.") + + // process imports + val lines = moduleAst.lines.toMutableList() + val imports = lines + .mapIndexed { i, it -> Pair(i, it) } + .filter { (it.second as? Directive)?.directive == "%import" } + .map { Pair(it.first, executeImportDirective(it.second as Directive)) } + + imports.reversed().forEach { + println("IMPORT [in ${moduleAst.name}]: $it") } - return result + + moduleAst.lines = lines + return moduleAst +} + + +fun executeImportDirective(import: Directive): Module { + if(import.directive!="%import" || import.args.size!=1 || import.args[0].name==null) + throw SyntaxError("invalid import directive", import) + + return Module("???", emptyList(), null) // TODO } fun main(args: Array) { - // println("Reading source file: ${args[0]}") + println("Reading source file: ${args[0]}") + try { + val moduleAst = loadModule(args[0]).optimized() - val input = CharStreams.fromString( - "~ main \$c000 { \n" + - " const byte hopla=55-33\n"+ - " const byte hopla2=55-hopla\n"+ - " A = \"derp\" * %000100 \n" + - "}\n") - val lexer = il65Lexer(input) - val tokens = MyTokenStream(lexer) - val parser = il65Parser(tokens) - var moduleAst = parser.module().toAst(true).optimized() - - // the comments: - tokens.commentTokens().forEach { println(it) } - - moduleAst.lines.map { - println(it) + moduleAst.lines.map { + println(it) + } + } catch(sx: SyntaxError) { + sx.printError() + } catch (px: ParsingFailedError) { + System.err.println(px.message) } } diff --git a/il65/src/il65/ast/AST.kt b/il65/src/il65/ast/AST.kt index 2256396d9..aefba0426 100644 --- a/il65/src/il65/ast/AST.kt +++ b/il65/src/il65/ast/AST.kt @@ -1,6 +1,5 @@ package il65.ast -import il65.IAstOptimizer import il65.parser.il65Parser import org.antlr.v4.runtime.ParserRuleContext import org.antlr.v4.runtime.tree.TerminalNode @@ -34,39 +33,59 @@ enum class Register { open class AstException(override var message: String) : Exception(message) class ExpressionException(override var message: String) : AstException(message) +class SyntaxError(override var message: String, val node: Node?) : AstException(message) { + fun printError() { + val location = if(node?.position == null) + "" + else + "[line ${node.position!!.line} col ${node.position!!.startCol}-${node.position!!.endCol}] " + System.err.println("$location$message") + } +} + data class Position(val line: Int, val startCol:Int, val endCol: Int) +interface IAstProcessor { + fun process(expr: PrefixExpression): IExpression + fun process(expr: BinaryExpression): IExpression + fun process(directive: Directive): IStatement +} + + interface Node { val position: Position? // optional for the sake of easy unit testing } interface IStatement : Node { - fun optimize(optimizer: IAstOptimizer) : IStatement + fun process(processor: IAstProcessor) : IStatement } -data class Module(var lines: List, +data class Module(val name: String, + var lines: List, override val position: Position? = null) : Node { - fun optimizeOnceWith(optimizer: IAstOptimizer): Module { - lines = lines.map { it.optimize(optimizer) } + fun process(processor: IAstProcessor): Module { + lines = lines.map { it.process(processor) } return this } } data class Block(val name: String, val address: Int?, var statements: List, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer) : IStatement { - statements = statements.map { it.optimize(optimizer) } + override fun process(processor: IAstProcessor) : IStatement { + statements = statements.map { it.process(processor) } return this } } data class Directive(val directive: String, val args: List, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) : IStatement { + return processor.process(this) + } } data class DirectiveArg(val str: String?, val name: String?, val int: Int?, @@ -74,9 +93,18 @@ data class DirectiveArg(val str: String?, val name: String?, val int: Int?, data class Label(val name: String, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) = this } +data class Return(var values: List, + override val position: Position? = null) : IStatement { + override fun process(processor: IAstProcessor): IStatement { + values = values.map { it.process(processor) } + return this + } +} + + interface IVarDecl : IStatement { val datatype: DataType val arrayspec: ArraySpec? @@ -93,8 +121,8 @@ data class VarDecl(override val datatype: DataType, override val name: String, override var value: IExpression?, override val position: Position? = null) : IVarDecl { - override fun optimize(optimizer: IAstOptimizer): IStatement { - value = value?.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + value = value?.process(processor) return this } } @@ -104,8 +132,8 @@ data class ConstDecl(override val datatype: DataType, override val name: String, override var value: IExpression?, override val position: Position? = null) : IVarDecl { - override fun optimize(optimizer: IAstOptimizer): IStatement { - value = value?.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + value = value?.process(processor) return this } } @@ -115,34 +143,34 @@ data class MemoryVarDecl(override val datatype: DataType, override val name: String, override var value: IExpression?, override val position: Position? = null) : IVarDecl { - override fun optimize(optimizer: IAstOptimizer): IStatement { - value = value?.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + value = value?.process(processor) return this } } data class Assignment(var target: AssignTarget, val aug_op : String?, var value: IExpression, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer): IStatement { - target = target.optimize(optimizer) - value = value.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + target = target.process(processor) + value = value.process(processor) return this } } data class AssignTarget(val register: Register?, val identifier: Identifier?, override val position: Position? = null) : Node { - fun optimize(optimizer: IAstOptimizer) = this // for now + fun process(processor: IAstProcessor) = this // for now } interface IExpression: Node { fun constValue() : LiteralValue? - fun optimize(optimizer: IAstOptimizer): IExpression + fun process(processor: IAstProcessor): IExpression } -// note: some expression elements are mutable, to be able to rewrite/optimize the expression tree +// note: some expression elements are mutable, to be able to rewrite/process the expression tree data class PrefixExpression(val operator: String, var expression: IExpression, override val position: Position? = null) : IExpression { @@ -150,7 +178,7 @@ data class PrefixExpression(val operator: String, var expression: IExpression, throw ExpressionException("should have been optimized away before const value was asked") } - override fun optimize(optimizer: IAstOptimizer) = optimizer.optimize(this) + override fun process(processor: IAstProcessor) = processor.process(this) } @@ -160,7 +188,7 @@ data class BinaryExpression(var left: IExpression, val operator: String, var rig throw ExpressionException("should have been optimized away before const value was asked") } - override fun optimize(optimizer: IAstOptimizer) = optimizer.optimize(this) + override fun process(processor: IAstProcessor) = processor.process(this) } data class LiteralValue(val intvalue: Int? = null, @@ -169,16 +197,16 @@ data class LiteralValue(val intvalue: Int? = null, val arrayvalue: List? = null, override val position: Position? = null) : IExpression { override fun constValue(): LiteralValue? = this - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) = this } data class RangeExpr(var from: IExpression, var to: IExpression, override val position: Position? = null) : IExpression { override fun constValue(): LiteralValue? = null - override fun optimize(optimizer: IAstOptimizer): IExpression { - from = from.optimize(optimizer) - to = to.optimize(optimizer) + override fun process(processor: IAstProcessor): IExpression { + from = from.process(processor) + to = to.process(processor) return this } } @@ -187,7 +215,7 @@ data class RangeExpr(var from: IExpression, var to: IExpression, data class RegisterExpr(val register: Register, override val position: Position? = null) : IExpression { override fun constValue(): LiteralValue? = null - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) = this } @@ -198,20 +226,20 @@ data class Identifier(val name: String, val scope: List, return null } - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) = this } data class CallTarget(val address: Int?, val identifier: Identifier?, override val position: Position? = null) : Node { - fun optimize(optimizer: IAstOptimizer) = this + fun process(processor: IAstProcessor) = this } data class PostIncrDecr(var target: AssignTarget, val operator: String, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer): IStatement { - target = target.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + target = target.process(processor) return this } } @@ -219,8 +247,8 @@ data class PostIncrDecr(var target: AssignTarget, val operator: String, data class Jump(var target: CallTarget, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer): IStatement { - target = target.optimize(optimizer) + override fun process(processor: IAstProcessor): IStatement { + target = target.process(processor) return this } } @@ -233,9 +261,9 @@ data class FunctionCall(var target: CallTarget, var arglist: List, return null } - override fun optimize(optimizer: IAstOptimizer): IExpression { - target = target.optimize(optimizer) - arglist = arglist.map{it.optimize(optimizer)} + override fun process(processor: IAstProcessor): IExpression { + target = target.process(processor) + arglist = arglist.map{it.process(processor)} return this } } @@ -243,7 +271,7 @@ data class FunctionCall(var target: CallTarget, var arglist: List, data class InlineAssembly(val assembly: String, override val position: Position? = null) : IStatement { - override fun optimize(optimizer: IAstOptimizer) = this + override fun process(processor: IAstProcessor) = this } @@ -251,14 +279,14 @@ data class InlineAssembly(val assembly: String, fun ParserRuleContext.toPosition(withPosition: Boolean) : Position? { return if (withPosition) - Position(start.line, start.charPositionInLine, stop.charPositionInLine) + Position(start.line, start.charPositionInLine, stop.charPositionInLine+stop.text.length) else null } -fun il65Parser.ModuleContext.toAst(withPosition: Boolean) = - Module(modulestatement().map { it.toAst(withPosition) }, toPosition(withPosition)) +fun il65Parser.ModuleContext.toAst(name: String, withPosition: Boolean) = + Module(name, modulestatement().map { it.toAst(withPosition) }, toPosition(withPosition)) fun il65Parser.ModulestatementContext.toAst(withPosition: Boolean) : IStatement { @@ -341,7 +369,7 @@ fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatement { val directive = directive()?.toAst(withPosition) if(directive!=null) return directive - val label=label() + val label=labeldef() if(label!=null) return Label(label.text, label.toPosition(withPosition)) @@ -349,6 +377,10 @@ fun il65Parser.StatementContext.toAst(withPosition: Boolean) : IStatement { if(jump!=null) return Jump(jump.call_location().toAst(withPosition), jump.toPosition(withPosition)) + val returnstmt = returnstmt() + if(returnstmt!=null) + return Return(returnstmt.expression_list().toAst(withPosition)) + val asm = inlineasm() if(asm!=null) return InlineAssembly(asm.INLINEASMBLOCK().text, asm.toPosition(withPosition)) @@ -450,10 +482,10 @@ fun il65Parser.ExpressionContext.toAst(withPosition: Boolean) : IExpression { val funcall = functioncall() if(funcall!=null) { val location = funcall.call_location().toAst(withPosition) - return if(funcall.function_arg_list()==null) + return if(funcall.expression_list()==null) FunctionCall(location, emptyList(), funcall.toPosition(withPosition)) else - FunctionCall(location, funcall.function_arg_list().toAst(withPosition), funcall.toPosition(withPosition)) + FunctionCall(location, funcall.expression_list().toAst(withPosition), funcall.toPosition(withPosition)) } if (rangefrom!=null && rangeto!=null) @@ -466,7 +498,7 @@ fun il65Parser.ExpressionContext.toAst(withPosition: Boolean) : IExpression { } -fun il65Parser.Function_arg_listContext.toAst(withPosition: Boolean) = expression().map{ it.toAst(withPosition) } +fun il65Parser.Expression_listContext.toAst(withPosition: Boolean) = expression().map{ it.toAst(withPosition) } fun il65Parser.IdentifierContext.toAst(withPosition: Boolean) : Identifier { diff --git a/il65/src/il65/parser/il65.tokens b/il65/src/il65/parser/il65.tokens index e25b8de89..bb740cab2 100644 --- a/il65/src/il65/parser/il65.tokens +++ b/il65/src/il65/parser/il65.tokens @@ -76,17 +76,18 @@ T__74=75 T__75=76 T__76=77 T__77=78 -LINECOMMENT=79 -COMMENT=80 -WS=81 -EOL=82 -NAME=83 -DEC_INTEGER=84 -HEX_INTEGER=85 -BIN_INTEGER=86 -FLOAT_NUMBER=87 -STRING=88 -INLINEASMBLOCK=89 +T__78=79 +LINECOMMENT=80 +COMMENT=81 +WS=82 +EOL=83 +NAME=84 +DEC_INTEGER=85 +HEX_INTEGER=86 +BIN_INTEGER=87 +FLOAT_NUMBER=88 +STRING=89 +INLINEASMBLOCK=90 '~'=1 '{'=2 '}'=3 @@ -152,16 +153,17 @@ INLINEASMBLOCK=89 'xor'=63 'not'=64 'to'=65 -'.'=66 -'A'=67 -'X'=68 -'Y'=69 -'AX'=70 -'AY'=71 -'XY'=72 -'SC'=73 -'SI'=74 -'SZ'=75 -'true'=76 -'false'=77 -'%asm'=78 +'return'=66 +'.'=67 +'A'=68 +'X'=69 +'Y'=70 +'AX'=71 +'AY'=72 +'XY'=73 +'SC'=74 +'SI'=75 +'SZ'=76 +'true'=77 +'false'=78 +'%asm'=79 diff --git a/il65/src/il65/parser/il65Lexer.java b/il65/src/il65/parser/il65Lexer.java index 3cbc608b1..7e776b7fb 100644 --- a/il65/src/il65/parser/il65Lexer.java +++ b/il65/src/il65/parser/il65Lexer.java @@ -1,4 +1,4 @@ -// Generated from il65.g4 by ANTLR 4.7.1 +// Generated from /home/irmen/Projects/IL65/il65/antlr/il65.g4 by ANTLR 4.7 package il65.parser; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; @@ -11,7 +11,7 @@ import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) public class il65Lexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.7", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -27,9 +27,9 @@ public class il65Lexer extends Lexer { 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, 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, LINECOMMENT=79, COMMENT=80, - WS=81, EOL=82, NAME=83, DEC_INTEGER=84, HEX_INTEGER=85, BIN_INTEGER=86, - FLOAT_NUMBER=87, STRING=88, INLINEASMBLOCK=89; + T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, LINECOMMENT=80, + COMMENT=81, WS=82, EOL=83, NAME=84, DEC_INTEGER=85, HEX_INTEGER=86, BIN_INTEGER=87, + FLOAT_NUMBER=88, STRING=89, INLINEASMBLOCK=90; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -48,7 +48,7 @@ public class il65Lexer extends Lexer { "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", "LINECOMMENT", "COMMENT", + "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "LINECOMMENT", "COMMENT", "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "FNUMBER", "STRING_ESCAPE_SEQ", "STRING", "INLINEASMBLOCK" }; @@ -62,8 +62,8 @@ public class il65Lexer extends Lexer { "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'", "'-'", "'**'", "'*'", "'/'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", "'xor'", - "'not'", "'to'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'", "'SC'", - "'SI'", "'SZ'", "'true'", "'false'", "'%asm'" + "'not'", "'to'", "'return'", "'.'", "'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, @@ -72,8 +72,8 @@ 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, "LINECOMMENT", "COMMENT", "WS", - "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", + null, null, null, null, null, null, null, null, "LINECOMMENT", "COMMENT", + "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING", "INLINEASMBLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -136,10 +136,10 @@ public class il65Lexer extends Lexer { @Override public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { switch (ruleIndex) { - case 89: + case 90: STRING_action((RuleContext)_localctx, actionIndex); break; - case 90: + case 91: INLINEASMBLOCK_action((RuleContext)_localctx, actionIndex); break; } @@ -168,7 +168,7 @@ public class il65Lexer extends Lexer { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2[\u0258\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\\\u0261\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"+ @@ -178,196 +178,198 @@ public class il65Lexer extends Lexer { "\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\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\\\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 \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\61\3\62\3\62\3\62\3"+ - "\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\67\3\67\3"+ - "\67\38\38\38\39\39\39\3:\3:\3:\3;\3;\3<\3<\3=\3=\3>\3>\3>\3>\3?\3?\3?"+ - "\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3C\3C\3D\3D\3E\3E\3F\3F\3G\3G\3G\3H"+ - "\3H\3H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3M\3M\3N\3N\3N\3N"+ - "\3N\3N\3O\3O\3O\3O\3O\3P\3P\7P\u01ef\nP\fP\16P\u01f2\13P\3P\3P\3P\3P\3"+ - "Q\3Q\7Q\u01fa\nQ\fQ\16Q\u01fd\13Q\3Q\3Q\3R\3R\3R\3R\3S\6S\u0206\nS\rS"+ - "\16S\u0207\3T\3T\7T\u020c\nT\fT\16T\u020f\13T\3U\3U\3U\6U\u0214\nU\rU"+ - "\16U\u0215\5U\u0218\nU\3V\3V\6V\u021c\nV\rV\16V\u021d\3W\3W\6W\u0222\n"+ - "W\rW\16W\u0223\3X\3X\3X\5X\u0229\nX\3X\5X\u022c\nX\3Y\6Y\u022f\nY\rY\16"+ - "Y\u0230\3Y\3Y\6Y\u0235\nY\rY\16Y\u0236\5Y\u0239\nY\3Z\3Z\3Z\3Z\5Z\u023f"+ - "\nZ\3[\3[\3[\7[\u0244\n[\f[\16[\u0247\13[\3[\3[\3[\3\\\3\\\3\\\3\\\6\\"+ - "\u0250\n\\\r\\\16\\\u0251\3\\\3\\\3\\\3\\\3\\\3\u0251\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{"+ - "?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091"+ - "J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5"+ - "T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1\2\u00b3\2\u00b5Z\u00b7[\3\2"+ - "\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62;C\\aac|\5\2\62;CHch\4"+ - "\2GGgg\4\2--//\6\2\f\f\16\17$$^^\2\u0266\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\2"+ - "A\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\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\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\u00b5\3\2\2\2\2\u00b7\3\2\2\2\3\u00b9"+ - "\3\2\2\2\5\u00bb\3\2\2\2\7\u00bd\3\2\2\2\t\u00bf\3\2\2\2\13\u00c1\3\2"+ - "\2\2\r\u00c6\3\2\2\2\17\u00ce\3\2\2\2\21\u00d8\3\2\2\2\23\u00dc\3\2\2"+ - "\2\25\u00e5\3\2\2\2\27\u00ed\3\2\2\2\31\u00f9\3\2\2\2\33\u0105\3\2\2\2"+ - "\35\u0110\3\2\2\2\37\u0112\3\2\2\2!\u0114\3\2\2\2#\u011a\3\2\2\2%\u0121"+ - "\3\2\2\2\'\u0126\3\2\2\2)\u012b\3\2\2\2+\u0131\3\2\2\2-\u0135\3\2\2\2"+ - "/\u013b\3\2\2\2\61\u0141\3\2\2\2\63\u0148\3\2\2\2\65\u014a\3\2\2\2\67"+ - "\u014c\3\2\2\29\u014f\3\2\2\2;\u0152\3\2\2\2=\u0155\3\2\2\2?\u0158\3\2"+ - "\2\2A\u015c\3\2\2\2C\u0160\3\2\2\2E\u0164\3\2\2\2G\u0169\3\2\2\2I\u016e"+ - "\3\2\2\2K\u0171\3\2\2\2M\u0174\3\2\2\2O\u0177\3\2\2\2Q\u017a\3\2\2\2S"+ - "\u017d\3\2\2\2U\u017f\3\2\2\2W\u0181\3\2\2\2Y\u0183\3\2\2\2[\u0185\3\2"+ - "\2\2]\u0188\3\2\2\2_\u018a\3\2\2\2a\u018c\3\2\2\2c\u018f\3\2\2\2e\u0192"+ - "\3\2\2\2g\u0196\3\2\2\2i\u019a\3\2\2\2k\u019c\3\2\2\2m\u019e\3\2\2\2o"+ - "\u01a1\3\2\2\2q\u01a4\3\2\2\2s\u01a7\3\2\2\2u\u01aa\3\2\2\2w\u01ac\3\2"+ - "\2\2y\u01ae\3\2\2\2{\u01b0\3\2\2\2}\u01b4\3\2\2\2\177\u01b7\3\2\2\2\u0081"+ - "\u01bb\3\2\2\2\u0083\u01bf\3\2\2\2\u0085\u01c2\3\2\2\2\u0087\u01c4\3\2"+ - "\2\2\u0089\u01c6\3\2\2\2\u008b\u01c8\3\2\2\2\u008d\u01ca\3\2\2\2\u008f"+ - "\u01cd\3\2\2\2\u0091\u01d0\3\2\2\2\u0093\u01d3\3\2\2\2\u0095\u01d6\3\2"+ - "\2\2\u0097\u01d9\3\2\2\2\u0099\u01dc\3\2\2\2\u009b\u01e1\3\2\2\2\u009d"+ - "\u01e7\3\2\2\2\u009f\u01ec\3\2\2\2\u00a1\u01f7\3\2\2\2\u00a3\u0200\3\2"+ - "\2\2\u00a5\u0205\3\2\2\2\u00a7\u0209\3\2\2\2\u00a9\u0217\3\2\2\2\u00ab"+ - "\u0219\3\2\2\2\u00ad\u021f\3\2\2\2\u00af\u0225\3\2\2\2\u00b1\u022e\3\2"+ - "\2\2\u00b3\u023e\3\2\2\2\u00b5\u0240\3\2\2\2\u00b7\u024b\3\2\2\2\u00b9"+ - "\u00ba\7\u0080\2\2\u00ba\4\3\2\2\2\u00bb\u00bc\7}\2\2\u00bc\6\3\2\2\2"+ - "\u00bd\u00be\7\177\2\2\u00be\b\3\2\2\2\u00bf\u00c0\7<\2\2\u00c0\n\3\2"+ - "\2\2\u00c1\u00c2\7i\2\2\u00c2\u00c3\7q\2\2\u00c3\u00c4\7v\2\2\u00c4\u00c5"+ - "\7q\2\2\u00c5\f\3\2\2\2\u00c6\u00c7\7\'\2\2\u00c7\u00c8\7q\2\2\u00c8\u00c9"+ - "\7w\2\2\u00c9\u00ca\7v\2\2\u00ca\u00cb\7r\2\2\u00cb\u00cc\7w\2\2\u00cc"+ - "\u00cd\7v\2\2\u00cd\16\3\2\2\2\u00ce\u00cf\7\'\2\2\u00cf\u00d0\7n\2\2"+ - "\u00d0\u00d1\7c\2\2\u00d1\u00d2\7w\2\2\u00d2\u00d3\7p\2\2\u00d3\u00d4"+ - "\7e\2\2\u00d4\u00d5\7j\2\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7t\2\2\u00d7"+ - "\20\3\2\2\2\u00d8\u00d9\7\'\2\2\u00d9\u00da\7|\2\2\u00da\u00db\7r\2\2"+ - "\u00db\22\3\2\2\2\u00dc\u00dd\7\'\2\2\u00dd\u00de\7c\2\2\u00de\u00df\7"+ - "f\2\2\u00df\u00e0\7f\2\2\u00e0\u00e1\7t\2\2\u00e1\u00e2\7g\2\2\u00e2\u00e3"+ - "\7u\2\2\u00e3\u00e4\7u\2\2\u00e4\24\3\2\2\2\u00e5\u00e6\7\'\2\2\u00e6"+ - "\u00e7\7k\2\2\u00e7\u00e8\7o\2\2\u00e8\u00e9\7r\2\2\u00e9\u00ea\7q\2\2"+ - "\u00ea\u00eb\7t\2\2\u00eb\u00ec\7v\2\2\u00ec\26\3\2\2\2\u00ed\u00ee\7"+ - "\'\2\2\u00ee\u00ef\7d\2\2\u00ef\u00f0\7t\2\2\u00f0\u00f1\7g\2\2\u00f1"+ - "\u00f2\7c\2\2\u00f2\u00f3\7m\2\2\u00f3\u00f4\7r\2\2\u00f4\u00f5\7q\2\2"+ - "\u00f5\u00f6\7k\2\2\u00f6\u00f7\7p\2\2\u00f7\u00f8\7v\2\2\u00f8\30\3\2"+ - "\2\2\u00f9\u00fa\7\'\2\2\u00fa\u00fb\7c\2\2\u00fb\u00fc\7u\2\2\u00fc\u00fd"+ - "\7o\2\2\u00fd\u00fe\7k\2\2\u00fe\u00ff\7p\2\2\u00ff\u0100\7e\2\2\u0100"+ - "\u0101\7n\2\2\u0101\u0102\7w\2\2\u0102\u0103\7f\2\2\u0103\u0104\7g\2\2"+ - "\u0104\32\3\2\2\2\u0105\u0106\7\'\2\2\u0106\u0107\7c\2\2\u0107\u0108\7"+ - "u\2\2\u0108\u0109\7o\2\2\u0109\u010a\7d\2\2\u010a\u010b\7k\2\2\u010b\u010c"+ - "\7p\2\2\u010c\u010d\7c\2\2\u010d\u010e\7t\2\2\u010e\u010f\7{\2\2\u010f"+ - "\34\3\2\2\2\u0110\u0111\7.\2\2\u0111\36\3\2\2\2\u0112\u0113\7?\2\2\u0113"+ - " \3\2\2\2\u0114\u0115\7e\2\2\u0115\u0116\7q\2\2\u0116\u0117\7p\2\2\u0117"+ - "\u0118\7u\2\2\u0118\u0119\7v\2\2\u0119\"\3\2\2\2\u011a\u011b\7o\2\2\u011b"+ - "\u011c\7g\2\2\u011c\u011d\7o\2\2\u011d\u011e\7q\2\2\u011e\u011f\7t\2\2"+ - "\u011f\u0120\7{\2\2\u0120$\3\2\2\2\u0121\u0122\7d\2\2\u0122\u0123\7{\2"+ - "\2\u0123\u0124\7v\2\2\u0124\u0125\7g\2\2\u0125&\3\2\2\2\u0126\u0127\7"+ - "y\2\2\u0127\u0128\7q\2\2\u0128\u0129\7t\2\2\u0129\u012a\7f\2\2\u012a("+ - "\3\2\2\2\u012b\u012c\7h\2\2\u012c\u012d\7n\2\2\u012d\u012e\7q\2\2\u012e"+ - "\u012f\7c\2\2\u012f\u0130\7v\2\2\u0130*\3\2\2\2\u0131\u0132\7u\2\2\u0132"+ - "\u0133\7v\2\2\u0133\u0134\7t\2\2\u0134,\3\2\2\2\u0135\u0136\7u\2\2\u0136"+ - "\u0137\7v\2\2\u0137\u0138\7t\2\2\u0138\u0139\7a\2\2\u0139\u013a\7r\2\2"+ - "\u013a.\3\2\2\2\u013b\u013c\7u\2\2\u013c\u013d\7v\2\2\u013d\u013e\7t\2"+ - "\2\u013e\u013f\7a\2\2\u013f\u0140\7u\2\2\u0140\60\3\2\2\2\u0141\u0142"+ - "\7u\2\2\u0142\u0143\7v\2\2\u0143\u0144\7t\2\2\u0144\u0145\7a\2\2\u0145"+ - "\u0146\7r\2\2\u0146\u0147\7u\2\2\u0147\62\3\2\2\2\u0148\u0149\7]\2\2\u0149"+ - "\64\3\2\2\2\u014a\u014b\7_\2\2\u014b\66\3\2\2\2\u014c\u014d\7-\2\2\u014d"+ - "\u014e\7?\2\2\u014e8\3\2\2\2\u014f\u0150\7/\2\2\u0150\u0151\7?\2\2\u0151"+ - ":\3\2\2\2\u0152\u0153\7\61\2\2\u0153\u0154\7?\2\2\u0154<\3\2\2\2\u0155"+ - "\u0156\7,\2\2\u0156\u0157\7?\2\2\u0157>\3\2\2\2\u0158\u0159\7,\2\2\u0159"+ - "\u015a\7,\2\2\u015a\u015b\7?\2\2\u015b@\3\2\2\2\u015c\u015d\7>\2\2\u015d"+ - "\u015e\7>\2\2\u015e\u015f\7?\2\2\u015fB\3\2\2\2\u0160\u0161\7@\2\2\u0161"+ - "\u0162\7@\2\2\u0162\u0163\7?\2\2\u0163D\3\2\2\2\u0164\u0165\7>\2\2\u0165"+ - "\u0166\7>\2\2\u0166\u0167\7B\2\2\u0167\u0168\7?\2\2\u0168F\3\2\2\2\u0169"+ - "\u016a\7@\2\2\u016a\u016b\7@\2\2\u016b\u016c\7B\2\2\u016c\u016d\7?\2\2"+ - "\u016dH\3\2\2\2\u016e\u016f\7(\2\2\u016f\u0170\7?\2\2\u0170J\3\2\2\2\u0171"+ - "\u0172\7~\2\2\u0172\u0173\7?\2\2\u0173L\3\2\2\2\u0174\u0175\7`\2\2\u0175"+ - "\u0176\7?\2\2\u0176N\3\2\2\2\u0177\u0178\7-\2\2\u0178\u0179\7-\2\2\u0179"+ - "P\3\2\2\2\u017a\u017b\7/\2\2\u017b\u017c\7/\2\2\u017cR\3\2\2\2\u017d\u017e"+ - "\7*\2\2\u017eT\3\2\2\2\u017f\u0180\7+\2\2\u0180V\3\2\2\2\u0181\u0182\7"+ - "-\2\2\u0182X\3\2\2\2\u0183\u0184\7/\2\2\u0184Z\3\2\2\2\u0185\u0186\7,"+ - "\2\2\u0186\u0187\7,\2\2\u0187\\\3\2\2\2\u0188\u0189\7,\2\2\u0189^\3\2"+ - "\2\2\u018a\u018b\7\61\2\2\u018b`\3\2\2\2\u018c\u018d\7>\2\2\u018d\u018e"+ - "\7>\2\2\u018eb\3\2\2\2\u018f\u0190\7@\2\2\u0190\u0191\7@\2\2\u0191d\3"+ - "\2\2\2\u0192\u0193\7>\2\2\u0193\u0194\7>\2\2\u0194\u0195\7B\2\2\u0195"+ - "f\3\2\2\2\u0196\u0197\7@\2\2\u0197\u0198\7@\2\2\u0198\u0199\7B\2\2\u0199"+ - "h\3\2\2\2\u019a\u019b\7>\2\2\u019bj\3\2\2\2\u019c\u019d\7@\2\2\u019dl"+ - "\3\2\2\2\u019e\u019f\7>\2\2\u019f\u01a0\7?\2\2\u01a0n\3\2\2\2\u01a1\u01a2"+ - "\7@\2\2\u01a2\u01a3\7?\2\2\u01a3p\3\2\2\2\u01a4\u01a5\7?\2\2\u01a5\u01a6"+ - "\7?\2\2\u01a6r\3\2\2\2\u01a7\u01a8\7#\2\2\u01a8\u01a9\7?\2\2\u01a9t\3"+ - "\2\2\2\u01aa\u01ab\7(\2\2\u01abv\3\2\2\2\u01ac\u01ad\7`\2\2\u01adx\3\2"+ - "\2\2\u01ae\u01af\7~\2\2\u01afz\3\2\2\2\u01b0\u01b1\7c\2\2\u01b1\u01b2"+ - "\7p\2\2\u01b2\u01b3\7f\2\2\u01b3|\3\2\2\2\u01b4\u01b5\7q\2\2\u01b5\u01b6"+ - "\7t\2\2\u01b6~\3\2\2\2\u01b7\u01b8\7z\2\2\u01b8\u01b9\7q\2\2\u01b9\u01ba"+ - "\7t\2\2\u01ba\u0080\3\2\2\2\u01bb\u01bc\7p\2\2\u01bc\u01bd\7q\2\2\u01bd"+ - "\u01be\7v\2\2\u01be\u0082\3\2\2\2\u01bf\u01c0\7v\2\2\u01c0\u01c1\7q\2"+ - "\2\u01c1\u0084\3\2\2\2\u01c2\u01c3\7\60\2\2\u01c3\u0086\3\2\2\2\u01c4"+ - "\u01c5\7C\2\2\u01c5\u0088\3\2\2\2\u01c6\u01c7\7Z\2\2\u01c7\u008a\3\2\2"+ - "\2\u01c8\u01c9\7[\2\2\u01c9\u008c\3\2\2\2\u01ca\u01cb\7C\2\2\u01cb\u01cc"+ - "\7Z\2\2\u01cc\u008e\3\2\2\2\u01cd\u01ce\7C\2\2\u01ce\u01cf\7[\2\2\u01cf"+ - "\u0090\3\2\2\2\u01d0\u01d1\7Z\2\2\u01d1\u01d2\7[\2\2\u01d2\u0092\3\2\2"+ - "\2\u01d3\u01d4\7U\2\2\u01d4\u01d5\7E\2\2\u01d5\u0094\3\2\2\2\u01d6\u01d7"+ - "\7U\2\2\u01d7\u01d8\7K\2\2\u01d8\u0096\3\2\2\2\u01d9\u01da\7U\2\2\u01da"+ - "\u01db\7\\\2\2\u01db\u0098\3\2\2\2\u01dc\u01dd\7v\2\2\u01dd\u01de\7t\2"+ - "\2\u01de\u01df\7w\2\2\u01df\u01e0\7g\2\2\u01e0\u009a\3\2\2\2\u01e1\u01e2"+ - "\7h\2\2\u01e2\u01e3\7c\2\2\u01e3\u01e4\7n\2\2\u01e4\u01e5\7u\2\2\u01e5"+ - "\u01e6\7g\2\2\u01e6\u009c\3\2\2\2\u01e7\u01e8\7\'\2\2\u01e8\u01e9\7c\2"+ - "\2\u01e9\u01ea\7u\2\2\u01ea\u01eb\7o\2\2\u01eb\u009e\3\2\2\2\u01ec\u01f0"+ - "\t\2\2\2\u01ed\u01ef\t\3\2\2\u01ee\u01ed\3\2\2\2\u01ef\u01f2\3\2\2\2\u01f0"+ - "\u01ee\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f3\3\2\2\2\u01f2\u01f0\3\2"+ - "\2\2\u01f3\u01f4\5\u00a1Q\2\u01f4\u01f5\3\2\2\2\u01f5\u01f6\bP\2\2\u01f6"+ - "\u00a0\3\2\2\2\u01f7\u01fb\7=\2\2\u01f8\u01fa\n\2\2\2\u01f9\u01f8\3\2"+ - "\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc"+ - "\u01fe\3\2\2\2\u01fd\u01fb\3\2\2\2\u01fe\u01ff\bQ\2\2\u01ff\u00a2\3\2"+ - "\2\2\u0200\u0201\t\3\2\2\u0201\u0202\3\2\2\2\u0202\u0203\bR\3\2\u0203"+ - "\u00a4\3\2\2\2\u0204\u0206\t\2\2\2\u0205\u0204\3\2\2\2\u0206\u0207\3\2"+ - "\2\2\u0207\u0205\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u00a6\3\2\2\2\u0209"+ - "\u020d\t\4\2\2\u020a\u020c\t\5\2\2\u020b\u020a\3\2\2\2\u020c\u020f\3\2"+ - "\2\2\u020d\u020b\3\2\2\2\u020d\u020e\3\2\2\2\u020e\u00a8\3\2\2\2\u020f"+ - "\u020d\3\2\2\2\u0210\u0218\4\62;\2\u0211\u0213\4\63;\2\u0212\u0214\4\62"+ - ";\2\u0213\u0212\3\2\2\2\u0214\u0215\3\2\2\2\u0215\u0213\3\2\2\2\u0215"+ - "\u0216\3\2\2\2\u0216\u0218\3\2\2\2\u0217\u0210\3\2\2\2\u0217\u0211\3\2"+ - "\2\2\u0218\u00aa\3\2\2\2\u0219\u021b\7&\2\2\u021a\u021c\t\6\2\2\u021b"+ - "\u021a\3\2\2\2\u021c\u021d\3\2\2\2\u021d\u021b\3\2\2\2\u021d\u021e\3\2"+ - "\2\2\u021e\u00ac\3\2\2\2\u021f\u0221\7\'\2\2\u0220\u0222\4\62\63\2\u0221"+ - "\u0220\3\2\2\2\u0222\u0223\3\2\2\2\u0223\u0221\3\2\2\2\u0223\u0224\3\2"+ - "\2\2\u0224\u00ae\3\2\2\2\u0225\u022b\5\u00b1Y\2\u0226\u0228\t\7\2\2\u0227"+ - "\u0229\t\b\2\2\u0228\u0227\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022a\3\2"+ - "\2\2\u022a\u022c\5\u00b1Y\2\u022b\u0226\3\2\2\2\u022b\u022c\3\2\2\2\u022c"+ - "\u00b0\3\2\2\2\u022d\u022f\4\62;\2\u022e\u022d\3\2\2\2\u022f\u0230\3\2"+ - "\2\2\u0230\u022e\3\2\2\2\u0230\u0231\3\2\2\2\u0231\u0238\3\2\2\2\u0232"+ - "\u0234\7\60\2\2\u0233\u0235\4\62;\2\u0234\u0233\3\2\2\2\u0235\u0236\3"+ - "\2\2\2\u0236\u0234\3\2\2\2\u0236\u0237\3\2\2\2\u0237\u0239\3\2\2\2\u0238"+ - "\u0232\3\2\2\2\u0238\u0239\3\2\2\2\u0239\u00b2\3\2\2\2\u023a\u023b\7^"+ - "\2\2\u023b\u023f\13\2\2\2\u023c\u023d\7^\2\2\u023d\u023f\5\u00a5S\2\u023e"+ - "\u023a\3\2\2\2\u023e\u023c\3\2\2\2\u023f\u00b4\3\2\2\2\u0240\u0245\7$"+ - "\2\2\u0241\u0244\5\u00b3Z\2\u0242\u0244\n\t\2\2\u0243\u0241\3\2\2\2\u0243"+ - "\u0242\3\2\2\2\u0244\u0247\3\2\2\2\u0245\u0243\3\2\2\2\u0245\u0246\3\2"+ - "\2\2\u0246\u0248\3\2\2\2\u0247\u0245\3\2\2\2\u0248\u0249\7$\2\2\u0249"+ - "\u024a\b[\4\2\u024a\u00b6\3\2\2\2\u024b\u024c\7}\2\2\u024c\u024d\7}\2"+ - "\2\u024d\u024f\3\2\2\2\u024e\u0250\13\2\2\2\u024f\u024e\3\2\2\2\u0250"+ - "\u0251\3\2\2\2\u0251\u0252\3\2\2\2\u0251\u024f\3\2\2\2\u0252\u0253\3\2"+ - "\2\2\u0253\u0254\7\177\2\2\u0254\u0255\7\177\2\2\u0255\u0256\3\2\2\2\u0256"+ - "\u0257\b\\\5\2\u0257\u00b8\3\2\2\2\25\2\u01f0\u01fb\u0207\u020d\u0215"+ - "\u0217\u021b\u021d\u0223\u0228\u022b\u0230\u0236\u0238\u023e\u0243\u0245"+ - "\u0251\6\2\3\2\b\2\2\3[\2\3\\\3"; + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\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 \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\61\3\62\3\62\3\62"+ + "\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65\3\65\3\66\3\66\3\67\3\67"+ + "\3\67\38\38\38\39\39\39\3:\3:\3:\3;\3;\3<\3<\3=\3=\3>\3>\3>\3>\3?\3?\3"+ + "?\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3E\3E\3"+ + "F\3F\3G\3G\3H\3H\3H\3I\3I\3I\3J\3J\3J\3K\3K\3K\3L\3L\3L\3M\3M\3M\3N\3"+ + "N\3N\3N\3N\3O\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3Q\3Q\7Q\u01f8\nQ\fQ\16Q\u01fb"+ + "\13Q\3Q\3Q\3Q\3Q\3R\3R\7R\u0203\nR\fR\16R\u0206\13R\3R\3R\3S\3S\3S\3S"+ + "\3T\6T\u020f\nT\rT\16T\u0210\3U\3U\7U\u0215\nU\fU\16U\u0218\13U\3V\3V"+ + "\3V\6V\u021d\nV\rV\16V\u021e\5V\u0221\nV\3W\3W\6W\u0225\nW\rW\16W\u0226"+ + "\3X\3X\6X\u022b\nX\rX\16X\u022c\3Y\3Y\3Y\5Y\u0232\nY\3Y\5Y\u0235\nY\3"+ + "Z\6Z\u0238\nZ\rZ\16Z\u0239\3Z\3Z\6Z\u023e\nZ\rZ\16Z\u023f\5Z\u0242\nZ"+ + "\3[\3[\3[\3[\5[\u0248\n[\3\\\3\\\3\\\7\\\u024d\n\\\f\\\16\\\u0250\13\\"+ + "\3\\\3\\\3\\\3]\3]\3]\3]\6]\u0259\n]\r]\16]\u025a\3]\3]\3]\3]\3]\3\u025a"+ + "\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\67"+ + "m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d"+ + "H\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1"+ + "R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3\2\u00b5"+ + "\2\u00b7[\u00b9\\\3\2\n\4\2\f\f\17\17\4\2\13\13\"\"\5\2C\\aac|\6\2\62"+ + ";C\\aac|\5\2\62;CHch\4\2GGgg\4\2--//\6\2\f\f\16\17$$^^\2\u026f\2\3\3\2"+ + "\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17"+ + "\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2"+ + "\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3"+ + "\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3"+ + "\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2"+ + "=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3"+ + "\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2"+ + "\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2"+ + "c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3"+ + "\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2"+ + "\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3"+ + "\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2"+ + "\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097"+ + "\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2"+ + "\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9"+ + "\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2"+ + "\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\3\u00bb\3\2\2\2\5\u00bd\3\2\2\2\7\u00bf"+ + "\3\2\2\2\t\u00c1\3\2\2\2\13\u00c3\3\2\2\2\r\u00c8\3\2\2\2\17\u00d0\3\2"+ + "\2\2\21\u00da\3\2\2\2\23\u00de\3\2\2\2\25\u00e7\3\2\2\2\27\u00ef\3\2\2"+ + "\2\31\u00fb\3\2\2\2\33\u0107\3\2\2\2\35\u0112\3\2\2\2\37\u0114\3\2\2\2"+ + "!\u0116\3\2\2\2#\u011c\3\2\2\2%\u0123\3\2\2\2\'\u0128\3\2\2\2)\u012d\3"+ + "\2\2\2+\u0133\3\2\2\2-\u0137\3\2\2\2/\u013d\3\2\2\2\61\u0143\3\2\2\2\63"+ + "\u014a\3\2\2\2\65\u014c\3\2\2\2\67\u014e\3\2\2\29\u0151\3\2\2\2;\u0154"+ + "\3\2\2\2=\u0157\3\2\2\2?\u015a\3\2\2\2A\u015e\3\2\2\2C\u0162\3\2\2\2E"+ + "\u0166\3\2\2\2G\u016b\3\2\2\2I\u0170\3\2\2\2K\u0173\3\2\2\2M\u0176\3\2"+ + "\2\2O\u0179\3\2\2\2Q\u017c\3\2\2\2S\u017f\3\2\2\2U\u0181\3\2\2\2W\u0183"+ + "\3\2\2\2Y\u0185\3\2\2\2[\u0187\3\2\2\2]\u018a\3\2\2\2_\u018c\3\2\2\2a"+ + "\u018e\3\2\2\2c\u0191\3\2\2\2e\u0194\3\2\2\2g\u0198\3\2\2\2i\u019c\3\2"+ + "\2\2k\u019e\3\2\2\2m\u01a0\3\2\2\2o\u01a3\3\2\2\2q\u01a6\3\2\2\2s\u01a9"+ + "\3\2\2\2u\u01ac\3\2\2\2w\u01ae\3\2\2\2y\u01b0\3\2\2\2{\u01b2\3\2\2\2}"+ + "\u01b6\3\2\2\2\177\u01b9\3\2\2\2\u0081\u01bd\3\2\2\2\u0083\u01c1\3\2\2"+ + "\2\u0085\u01c4\3\2\2\2\u0087\u01cb\3\2\2\2\u0089\u01cd\3\2\2\2\u008b\u01cf"+ + "\3\2\2\2\u008d\u01d1\3\2\2\2\u008f\u01d3\3\2\2\2\u0091\u01d6\3\2\2\2\u0093"+ + "\u01d9\3\2\2\2\u0095\u01dc\3\2\2\2\u0097\u01df\3\2\2\2\u0099\u01e2\3\2"+ + "\2\2\u009b\u01e5\3\2\2\2\u009d\u01ea\3\2\2\2\u009f\u01f0\3\2\2\2\u00a1"+ + "\u01f5\3\2\2\2\u00a3\u0200\3\2\2\2\u00a5\u0209\3\2\2\2\u00a7\u020e\3\2"+ + "\2\2\u00a9\u0212\3\2\2\2\u00ab\u0220\3\2\2\2\u00ad\u0222\3\2\2\2\u00af"+ + "\u0228\3\2\2\2\u00b1\u022e\3\2\2\2\u00b3\u0237\3\2\2\2\u00b5\u0247\3\2"+ + "\2\2\u00b7\u0249\3\2\2\2\u00b9\u0254\3\2\2\2\u00bb\u00bc\7\u0080\2\2\u00bc"+ + "\4\3\2\2\2\u00bd\u00be\7}\2\2\u00be\6\3\2\2\2\u00bf\u00c0\7\177\2\2\u00c0"+ + "\b\3\2\2\2\u00c1\u00c2\7<\2\2\u00c2\n\3\2\2\2\u00c3\u00c4\7i\2\2\u00c4"+ + "\u00c5\7q\2\2\u00c5\u00c6\7v\2\2\u00c6\u00c7\7q\2\2\u00c7\f\3\2\2\2\u00c8"+ + "\u00c9\7\'\2\2\u00c9\u00ca\7q\2\2\u00ca\u00cb\7w\2\2\u00cb\u00cc\7v\2"+ + "\2\u00cc\u00cd\7r\2\2\u00cd\u00ce\7w\2\2\u00ce\u00cf\7v\2\2\u00cf\16\3"+ + "\2\2\2\u00d0\u00d1\7\'\2\2\u00d1\u00d2\7n\2\2\u00d2\u00d3\7c\2\2\u00d3"+ + "\u00d4\7w\2\2\u00d4\u00d5\7p\2\2\u00d5\u00d6\7e\2\2\u00d6\u00d7\7j\2\2"+ + "\u00d7\u00d8\7g\2\2\u00d8\u00d9\7t\2\2\u00d9\20\3\2\2\2\u00da\u00db\7"+ + "\'\2\2\u00db\u00dc\7|\2\2\u00dc\u00dd\7r\2\2\u00dd\22\3\2\2\2\u00de\u00df"+ + "\7\'\2\2\u00df\u00e0\7c\2\2\u00e0\u00e1\7f\2\2\u00e1\u00e2\7f\2\2\u00e2"+ + "\u00e3\7t\2\2\u00e3\u00e4\7g\2\2\u00e4\u00e5\7u\2\2\u00e5\u00e6\7u\2\2"+ + "\u00e6\24\3\2\2\2\u00e7\u00e8\7\'\2\2\u00e8\u00e9\7k\2\2\u00e9\u00ea\7"+ + "o\2\2\u00ea\u00eb\7r\2\2\u00eb\u00ec\7q\2\2\u00ec\u00ed\7t\2\2\u00ed\u00ee"+ + "\7v\2\2\u00ee\26\3\2\2\2\u00ef\u00f0\7\'\2\2\u00f0\u00f1\7d\2\2\u00f1"+ + "\u00f2\7t\2\2\u00f2\u00f3\7g\2\2\u00f3\u00f4\7c\2\2\u00f4\u00f5\7m\2\2"+ + "\u00f5\u00f6\7r\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8\7k\2\2\u00f8\u00f9"+ + "\7p\2\2\u00f9\u00fa\7v\2\2\u00fa\30\3\2\2\2\u00fb\u00fc\7\'\2\2\u00fc"+ + "\u00fd\7c\2\2\u00fd\u00fe\7u\2\2\u00fe\u00ff\7o\2\2\u00ff\u0100\7k\2\2"+ + "\u0100\u0101\7p\2\2\u0101\u0102\7e\2\2\u0102\u0103\7n\2\2\u0103\u0104"+ + "\7w\2\2\u0104\u0105\7f\2\2\u0105\u0106\7g\2\2\u0106\32\3\2\2\2\u0107\u0108"+ + "\7\'\2\2\u0108\u0109\7c\2\2\u0109\u010a\7u\2\2\u010a\u010b\7o\2\2\u010b"+ + "\u010c\7d\2\2\u010c\u010d\7k\2\2\u010d\u010e\7p\2\2\u010e\u010f\7c\2\2"+ + "\u010f\u0110\7t\2\2\u0110\u0111\7{\2\2\u0111\34\3\2\2\2\u0112\u0113\7"+ + ".\2\2\u0113\36\3\2\2\2\u0114\u0115\7?\2\2\u0115 \3\2\2\2\u0116\u0117\7"+ + "e\2\2\u0117\u0118\7q\2\2\u0118\u0119\7p\2\2\u0119\u011a\7u\2\2\u011a\u011b"+ + "\7v\2\2\u011b\"\3\2\2\2\u011c\u011d\7o\2\2\u011d\u011e\7g\2\2\u011e\u011f"+ + "\7o\2\2\u011f\u0120\7q\2\2\u0120\u0121\7t\2\2\u0121\u0122\7{\2\2\u0122"+ + "$\3\2\2\2\u0123\u0124\7d\2\2\u0124\u0125\7{\2\2\u0125\u0126\7v\2\2\u0126"+ + "\u0127\7g\2\2\u0127&\3\2\2\2\u0128\u0129\7y\2\2\u0129\u012a\7q\2\2\u012a"+ + "\u012b\7t\2\2\u012b\u012c\7f\2\2\u012c(\3\2\2\2\u012d\u012e\7h\2\2\u012e"+ + "\u012f\7n\2\2\u012f\u0130\7q\2\2\u0130\u0131\7c\2\2\u0131\u0132\7v\2\2"+ + "\u0132*\3\2\2\2\u0133\u0134\7u\2\2\u0134\u0135\7v\2\2\u0135\u0136\7t\2"+ + "\2\u0136,\3\2\2\2\u0137\u0138\7u\2\2\u0138\u0139\7v\2\2\u0139\u013a\7"+ + "t\2\2\u013a\u013b\7a\2\2\u013b\u013c\7r\2\2\u013c.\3\2\2\2\u013d\u013e"+ + "\7u\2\2\u013e\u013f\7v\2\2\u013f\u0140\7t\2\2\u0140\u0141\7a\2\2\u0141"+ + "\u0142\7u\2\2\u0142\60\3\2\2\2\u0143\u0144\7u\2\2\u0144\u0145\7v\2\2\u0145"+ + "\u0146\7t\2\2\u0146\u0147\7a\2\2\u0147\u0148\7r\2\2\u0148\u0149\7u\2\2"+ + "\u0149\62\3\2\2\2\u014a\u014b\7]\2\2\u014b\64\3\2\2\2\u014c\u014d\7_\2"+ + "\2\u014d\66\3\2\2\2\u014e\u014f\7-\2\2\u014f\u0150\7?\2\2\u01508\3\2\2"+ + "\2\u0151\u0152\7/\2\2\u0152\u0153\7?\2\2\u0153:\3\2\2\2\u0154\u0155\7"+ + "\61\2\2\u0155\u0156\7?\2\2\u0156<\3\2\2\2\u0157\u0158\7,\2\2\u0158\u0159"+ + "\7?\2\2\u0159>\3\2\2\2\u015a\u015b\7,\2\2\u015b\u015c\7,\2\2\u015c\u015d"+ + "\7?\2\2\u015d@\3\2\2\2\u015e\u015f\7>\2\2\u015f\u0160\7>\2\2\u0160\u0161"+ + "\7?\2\2\u0161B\3\2\2\2\u0162\u0163\7@\2\2\u0163\u0164\7@\2\2\u0164\u0165"+ + "\7?\2\2\u0165D\3\2\2\2\u0166\u0167\7>\2\2\u0167\u0168\7>\2\2\u0168\u0169"+ + "\7B\2\2\u0169\u016a\7?\2\2\u016aF\3\2\2\2\u016b\u016c\7@\2\2\u016c\u016d"+ + "\7@\2\2\u016d\u016e\7B\2\2\u016e\u016f\7?\2\2\u016fH\3\2\2\2\u0170\u0171"+ + "\7(\2\2\u0171\u0172\7?\2\2\u0172J\3\2\2\2\u0173\u0174\7~\2\2\u0174\u0175"+ + "\7?\2\2\u0175L\3\2\2\2\u0176\u0177\7`\2\2\u0177\u0178\7?\2\2\u0178N\3"+ + "\2\2\2\u0179\u017a\7-\2\2\u017a\u017b\7-\2\2\u017bP\3\2\2\2\u017c\u017d"+ + "\7/\2\2\u017d\u017e\7/\2\2\u017eR\3\2\2\2\u017f\u0180\7*\2\2\u0180T\3"+ + "\2\2\2\u0181\u0182\7+\2\2\u0182V\3\2\2\2\u0183\u0184\7-\2\2\u0184X\3\2"+ + "\2\2\u0185\u0186\7/\2\2\u0186Z\3\2\2\2\u0187\u0188\7,\2\2\u0188\u0189"+ + "\7,\2\2\u0189\\\3\2\2\2\u018a\u018b\7,\2\2\u018b^\3\2\2\2\u018c\u018d"+ + "\7\61\2\2\u018d`\3\2\2\2\u018e\u018f\7>\2\2\u018f\u0190\7>\2\2\u0190b"+ + "\3\2\2\2\u0191\u0192\7@\2\2\u0192\u0193\7@\2\2\u0193d\3\2\2\2\u0194\u0195"+ + "\7>\2\2\u0195\u0196\7>\2\2\u0196\u0197\7B\2\2\u0197f\3\2\2\2\u0198\u0199"+ + "\7@\2\2\u0199\u019a\7@\2\2\u019a\u019b\7B\2\2\u019bh\3\2\2\2\u019c\u019d"+ + "\7>\2\2\u019dj\3\2\2\2\u019e\u019f\7@\2\2\u019fl\3\2\2\2\u01a0\u01a1\7"+ + ">\2\2\u01a1\u01a2\7?\2\2\u01a2n\3\2\2\2\u01a3\u01a4\7@\2\2\u01a4\u01a5"+ + "\7?\2\2\u01a5p\3\2\2\2\u01a6\u01a7\7?\2\2\u01a7\u01a8\7?\2\2\u01a8r\3"+ + "\2\2\2\u01a9\u01aa\7#\2\2\u01aa\u01ab\7?\2\2\u01abt\3\2\2\2\u01ac\u01ad"+ + "\7(\2\2\u01adv\3\2\2\2\u01ae\u01af\7`\2\2\u01afx\3\2\2\2\u01b0\u01b1\7"+ + "~\2\2\u01b1z\3\2\2\2\u01b2\u01b3\7c\2\2\u01b3\u01b4\7p\2\2\u01b4\u01b5"+ + "\7f\2\2\u01b5|\3\2\2\2\u01b6\u01b7\7q\2\2\u01b7\u01b8\7t\2\2\u01b8~\3"+ + "\2\2\2\u01b9\u01ba\7z\2\2\u01ba\u01bb\7q\2\2\u01bb\u01bc\7t\2\2\u01bc"+ + "\u0080\3\2\2\2\u01bd\u01be\7p\2\2\u01be\u01bf\7q\2\2\u01bf\u01c0\7v\2"+ + "\2\u01c0\u0082\3\2\2\2\u01c1\u01c2\7v\2\2\u01c2\u01c3\7q\2\2\u01c3\u0084"+ + "\3\2\2\2\u01c4\u01c5\7t\2\2\u01c5\u01c6\7g\2\2\u01c6\u01c7\7v\2\2\u01c7"+ + "\u01c8\7w\2\2\u01c8\u01c9\7t\2\2\u01c9\u01ca\7p\2\2\u01ca\u0086\3\2\2"+ + "\2\u01cb\u01cc\7\60\2\2\u01cc\u0088\3\2\2\2\u01cd\u01ce\7C\2\2\u01ce\u008a"+ + "\3\2\2\2\u01cf\u01d0\7Z\2\2\u01d0\u008c\3\2\2\2\u01d1\u01d2\7[\2\2\u01d2"+ + "\u008e\3\2\2\2\u01d3\u01d4\7C\2\2\u01d4\u01d5\7Z\2\2\u01d5\u0090\3\2\2"+ + "\2\u01d6\u01d7\7C\2\2\u01d7\u01d8\7[\2\2\u01d8\u0092\3\2\2\2\u01d9\u01da"+ + "\7Z\2\2\u01da\u01db\7[\2\2\u01db\u0094\3\2\2\2\u01dc\u01dd\7U\2\2\u01dd"+ + "\u01de\7E\2\2\u01de\u0096\3\2\2\2\u01df\u01e0\7U\2\2\u01e0\u01e1\7K\2"+ + "\2\u01e1\u0098\3\2\2\2\u01e2\u01e3\7U\2\2\u01e3\u01e4\7\\\2\2\u01e4\u009a"+ + "\3\2\2\2\u01e5\u01e6\7v\2\2\u01e6\u01e7\7t\2\2\u01e7\u01e8\7w\2\2\u01e8"+ + "\u01e9\7g\2\2\u01e9\u009c\3\2\2\2\u01ea\u01eb\7h\2\2\u01eb\u01ec\7c\2"+ + "\2\u01ec\u01ed\7n\2\2\u01ed\u01ee\7u\2\2\u01ee\u01ef\7g\2\2\u01ef\u009e"+ + "\3\2\2\2\u01f0\u01f1\7\'\2\2\u01f1\u01f2\7c\2\2\u01f2\u01f3\7u\2\2\u01f3"+ + "\u01f4\7o\2\2\u01f4\u00a0\3\2\2\2\u01f5\u01f9\t\2\2\2\u01f6\u01f8\t\3"+ + "\2\2\u01f7\u01f6\3\2\2\2\u01f8\u01fb\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9"+ + "\u01fa\3\2\2\2\u01fa\u01fc\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fc\u01fd\5\u00a3"+ + "R\2\u01fd\u01fe\3\2\2\2\u01fe\u01ff\bQ\2\2\u01ff\u00a2\3\2\2\2\u0200\u0204"+ + "\7=\2\2\u0201\u0203\n\2\2\2\u0202\u0201\3\2\2\2\u0203\u0206\3\2\2\2\u0204"+ + "\u0202\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0207\3\2\2\2\u0206\u0204\3\2"+ + "\2\2\u0207\u0208\bR\2\2\u0208\u00a4\3\2\2\2\u0209\u020a\t\3\2\2\u020a"+ + "\u020b\3\2\2\2\u020b\u020c\bS\3\2\u020c\u00a6\3\2\2\2\u020d\u020f\t\2"+ + "\2\2\u020e\u020d\3\2\2\2\u020f\u0210\3\2\2\2\u0210\u020e\3\2\2\2\u0210"+ + "\u0211\3\2\2\2\u0211\u00a8\3\2\2\2\u0212\u0216\t\4\2\2\u0213\u0215\t\5"+ + "\2\2\u0214\u0213\3\2\2\2\u0215\u0218\3\2\2\2\u0216\u0214\3\2\2\2\u0216"+ + "\u0217\3\2\2\2\u0217\u00aa\3\2\2\2\u0218\u0216\3\2\2\2\u0219\u0221\4\62"+ + ";\2\u021a\u021c\4\63;\2\u021b\u021d\4\62;\2\u021c\u021b\3\2\2\2\u021d"+ + "\u021e\3\2\2\2\u021e\u021c\3\2\2\2\u021e\u021f\3\2\2\2\u021f\u0221\3\2"+ + "\2\2\u0220\u0219\3\2\2\2\u0220\u021a\3\2\2\2\u0221\u00ac\3\2\2\2\u0222"+ + "\u0224\7&\2\2\u0223\u0225\t\6\2\2\u0224\u0223\3\2\2\2\u0225\u0226\3\2"+ + "\2\2\u0226\u0224\3\2\2\2\u0226\u0227\3\2\2\2\u0227\u00ae\3\2\2\2\u0228"+ + "\u022a\7\'\2\2\u0229\u022b\4\62\63\2\u022a\u0229\3\2\2\2\u022b\u022c\3"+ + "\2\2\2\u022c\u022a\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u00b0\3\2\2\2\u022e"+ + "\u0234\5\u00b3Z\2\u022f\u0231\t\7\2\2\u0230\u0232\t\b\2\2\u0231\u0230"+ + "\3\2\2\2\u0231\u0232\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0235\5\u00b3Z"+ + "\2\u0234\u022f\3\2\2\2\u0234\u0235\3\2\2\2\u0235\u00b2\3\2\2\2\u0236\u0238"+ + "\4\62;\2\u0237\u0236\3\2\2\2\u0238\u0239\3\2\2\2\u0239\u0237\3\2\2\2\u0239"+ + "\u023a\3\2\2\2\u023a\u0241\3\2\2\2\u023b\u023d\7\60\2\2\u023c\u023e\4"+ + "\62;\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u023d\3\2\2\2\u023f"+ + "\u0240\3\2\2\2\u0240\u0242\3\2\2\2\u0241\u023b\3\2\2\2\u0241\u0242\3\2"+ + "\2\2\u0242\u00b4\3\2\2\2\u0243\u0244\7^\2\2\u0244\u0248\13\2\2\2\u0245"+ + "\u0246\7^\2\2\u0246\u0248\5\u00a7T\2\u0247\u0243\3\2\2\2\u0247\u0245\3"+ + "\2\2\2\u0248\u00b6\3\2\2\2\u0249\u024e\7$\2\2\u024a\u024d\5\u00b5[\2\u024b"+ + "\u024d\n\t\2\2\u024c\u024a\3\2\2\2\u024c\u024b\3\2\2\2\u024d\u0250\3\2"+ + "\2\2\u024e\u024c\3\2\2\2\u024e\u024f\3\2\2\2\u024f\u0251\3\2\2\2\u0250"+ + "\u024e\3\2\2\2\u0251\u0252\7$\2\2\u0252\u0253\b\\\4\2\u0253\u00b8\3\2"+ + "\2\2\u0254\u0255\7}\2\2\u0255\u0256\7}\2\2\u0256\u0258\3\2\2\2\u0257\u0259"+ + "\13\2\2\2\u0258\u0257\3\2\2\2\u0259\u025a\3\2\2\2\u025a\u025b\3\2\2\2"+ + "\u025a\u0258\3\2\2\2\u025b\u025c\3\2\2\2\u025c\u025d\7\177\2\2\u025d\u025e"+ + "\7\177\2\2\u025e\u025f\3\2\2\2\u025f\u0260\b]\5\2\u0260\u00ba\3\2\2\2"+ + "\25\2\u01f9\u0204\u0210\u0216\u021e\u0220\u0224\u0226\u022c\u0231\u0234"+ + "\u0239\u023f\u0241\u0247\u024c\u024e\u025a\6\2\3\2\b\2\2\3\\\2\3]\3"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/il65/src/il65/parser/il65Lexer.tokens b/il65/src/il65/parser/il65Lexer.tokens index e25b8de89..bb740cab2 100644 --- a/il65/src/il65/parser/il65Lexer.tokens +++ b/il65/src/il65/parser/il65Lexer.tokens @@ -76,17 +76,18 @@ T__74=75 T__75=76 T__76=77 T__77=78 -LINECOMMENT=79 -COMMENT=80 -WS=81 -EOL=82 -NAME=83 -DEC_INTEGER=84 -HEX_INTEGER=85 -BIN_INTEGER=86 -FLOAT_NUMBER=87 -STRING=88 -INLINEASMBLOCK=89 +T__78=79 +LINECOMMENT=80 +COMMENT=81 +WS=82 +EOL=83 +NAME=84 +DEC_INTEGER=85 +HEX_INTEGER=86 +BIN_INTEGER=87 +FLOAT_NUMBER=88 +STRING=89 +INLINEASMBLOCK=90 '~'=1 '{'=2 '}'=3 @@ -152,16 +153,17 @@ INLINEASMBLOCK=89 'xor'=63 'not'=64 'to'=65 -'.'=66 -'A'=67 -'X'=68 -'Y'=69 -'AX'=70 -'AY'=71 -'XY'=72 -'SC'=73 -'SI'=74 -'SZ'=75 -'true'=76 -'false'=77 -'%asm'=78 +'return'=66 +'.'=67 +'A'=68 +'X'=69 +'Y'=70 +'AX'=71 +'AY'=72 +'XY'=73 +'SC'=74 +'SI'=75 +'SZ'=76 +'true'=77 +'false'=78 +'%asm'=79 diff --git a/il65/src/il65/parser/il65Parser.java b/il65/src/il65/parser/il65Parser.java index 8edbba8a9..e333d5167 100644 --- a/il65/src/il65/parser/il65Parser.java +++ b/il65/src/il65/parser/il65Parser.java @@ -1,4 +1,4 @@ -// Generated from il65.g4 by ANTLR 4.7.1 +// Generated from /home/irmen/Projects/IL65/il65/antlr/il65.g4 by ANTLR 4.7 package il65.parser; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; @@ -11,7 +11,7 @@ import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) public class il65Parser extends Parser { - static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); } + static { RuntimeMetaData.checkVersion("4.7", RuntimeMetaData.VERSION); } protected static final DFA[] _decisionToDFA; protected static final PredictionContextCache _sharedContextCache = @@ -27,27 +27,28 @@ public class il65Parser extends Parser { 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, 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, LINECOMMENT=79, COMMENT=80, - WS=81, EOL=82, NAME=83, DEC_INTEGER=84, HEX_INTEGER=85, BIN_INTEGER=86, - FLOAT_NUMBER=87, STRING=88, INLINEASMBLOCK=89; + T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, LINECOMMENT=80, + COMMENT=81, WS=82, EOL=83, NAME=84, DEC_INTEGER=85, HEX_INTEGER=86, BIN_INTEGER=87, + FLOAT_NUMBER=88, STRING=89, INLINEASMBLOCK=90; public static final int RULE_module = 0, RULE_modulestatement = 1, RULE_block = 2, RULE_statement = 3, - RULE_label = 4, RULE_call_location = 5, RULE_unconditionaljump = 6, RULE_directive = 7, - RULE_directivearg = 8, RULE_vardecl = 9, RULE_varinitializer = 10, RULE_constdecl = 11, - RULE_memoryvardecl = 12, RULE_datatype = 13, RULE_arrayspec = 14, RULE_assignment = 15, - RULE_augassignment = 16, RULE_assign_target = 17, RULE_postincrdecr = 18, - RULE_expression = 19, RULE_functioncall = 20, RULE_function_arg_list = 21, - RULE_identifier = 22, RULE_scoped_identifier = 23, RULE_register = 24, - RULE_integerliteral = 25, RULE_booleanliteral = 26, RULE_arrayliteral = 27, - RULE_stringliteral = 28, RULE_floatliteral = 29, RULE_literalvalue = 30, - RULE_inlineasm = 31; + RULE_labeldef = 4, RULE_call_location = 5, RULE_unconditionaljump = 6, + RULE_directive = 7, RULE_directivearg = 8, RULE_vardecl = 9, RULE_varinitializer = 10, + RULE_constdecl = 11, RULE_memoryvardecl = 12, RULE_datatype = 13, RULE_arrayspec = 14, + RULE_assignment = 15, RULE_augassignment = 16, RULE_assign_target = 17, + RULE_postincrdecr = 18, RULE_expression = 19, RULE_functioncall = 20, + RULE_expression_list = 21, RULE_returnstmt = 22, RULE_identifier = 23, + RULE_scoped_identifier = 24, RULE_register = 25, RULE_integerliteral = 26, + RULE_booleanliteral = 27, RULE_arrayliteral = 28, RULE_stringliteral = 29, + RULE_floatliteral = 30, RULE_literalvalue = 31, RULE_inlineasm = 32; public static final String[] ruleNames = { - "module", "modulestatement", "block", "statement", "label", "call_location", + "module", "modulestatement", "block", "statement", "labeldef", "call_location", "unconditionaljump", "directive", "directivearg", "vardecl", "varinitializer", "constdecl", "memoryvardecl", "datatype", "arrayspec", "assignment", "augassignment", - "assign_target", "postincrdecr", "expression", "functioncall", "function_arg_list", - "identifier", "scoped_identifier", "register", "integerliteral", "booleanliteral", - "arrayliteral", "stringliteral", "floatliteral", "literalvalue", "inlineasm" + "assign_target", "postincrdecr", "expression", "functioncall", "expression_list", + "returnstmt", "identifier", "scoped_identifier", "register", "integerliteral", + "booleanliteral", "arrayliteral", "stringliteral", "floatliteral", "literalvalue", + "inlineasm" }; private static final String[] _LITERAL_NAMES = { @@ -59,8 +60,8 @@ public class il65Parser extends Parser { "'&='", "'|='", "'^='", "'++'", "'--'", "'('", "')'", "'+'", "'-'", "'**'", "'*'", "'/'", "'<<'", "'>>'", "'<<@'", "'>>@'", "'<'", "'>'", "'<='", "'>='", "'=='", "'!='", "'&'", "'^'", "'|'", "'and'", "'or'", "'xor'", - "'not'", "'to'", "'.'", "'A'", "'X'", "'Y'", "'AX'", "'AY'", "'XY'", "'SC'", - "'SI'", "'SZ'", "'true'", "'false'", "'%asm'" + "'not'", "'to'", "'return'", "'.'", "'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, @@ -69,8 +70,8 @@ public class il65Parser extends Parser { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "LINECOMMENT", "COMMENT", "WS", - "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", + null, null, null, null, null, null, null, null, "LINECOMMENT", "COMMENT", + "WS", "EOL", "NAME", "DEC_INTEGER", "HEX_INTEGER", "BIN_INTEGER", "FLOAT_NUMBER", "STRING", "INLINEASMBLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -147,12 +148,12 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(68); + setState(70); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12))) != 0) || _la==EOL) { { - setState(66); + setState(68); _errHandler.sync(this); switch (_input.LA(1)) { case T__0: @@ -165,13 +166,13 @@ public class il65Parser extends Parser { case T__11: case T__12: { - setState(64); + setState(66); modulestatement(); } break; case EOL: { - setState(65); + setState(67); match(EOL); } break; @@ -179,11 +180,11 @@ public class il65Parser extends Parser { throw new NoViableAltException(this); } } - setState(70); + setState(72); _errHandler.sync(this); _la = _input.LA(1); } - setState(71); + setState(73); match(EOF); } } @@ -215,7 +216,7 @@ public class il65Parser extends Parser { ModulestatementContext _localctx = new ModulestatementContext(_ctx, getState()); enterRule(_localctx, 2, RULE_modulestatement); try { - setState(75); + setState(77); _errHandler.sync(this); switch (_input.LA(1)) { case T__5: @@ -228,14 +229,14 @@ public class il65Parser extends Parser { case T__12: enterOuterAlt(_localctx, 1); { - setState(73); + setState(75); directive(); } break; case T__0: enterOuterAlt(_localctx, 2); { - setState(74); + setState(76); block(); } break; @@ -284,30 +285,30 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(77); + setState(79); match(T__0); - setState(78); - identifier(); setState(80); + identifier(); + setState(82); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (DEC_INTEGER - 84)) | (1L << (HEX_INTEGER - 84)) | (1L << (BIN_INTEGER - 84)))) != 0)) { + if (((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (DEC_INTEGER - 85)) | (1L << (HEX_INTEGER - 85)) | (1L << (BIN_INTEGER - 85)))) != 0)) { { - setState(79); + setState(81); integerliteral(); } } - setState(82); + setState(84); match(T__1); - setState(83); + setState(85); match(EOL); - setState(88); + setState(90); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)) | (1L << (T__77 - 67)) | (1L << (EOL - 67)) | (1L << (NAME - 67)))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23))) != 0) || ((((_la - 66)) & ~0x3f) == 0 && ((1L << (_la - 66)) & ((1L << (T__65 - 66)) | (1L << (T__67 - 66)) | (1L << (T__68 - 66)) | (1L << (T__69 - 66)) | (1L << (T__70 - 66)) | (1L << (T__71 - 66)) | (1L << (T__72 - 66)) | (1L << (T__73 - 66)) | (1L << (T__74 - 66)) | (1L << (T__75 - 66)) | (1L << (T__78 - 66)) | (1L << (EOL - 66)) | (1L << (NAME - 66)))) != 0)) { { - setState(86); + setState(88); _errHandler.sync(this); switch (_input.LA(1)) { case T__4: @@ -328,7 +329,7 @@ public class il65Parser extends Parser { case T__21: case T__22: case T__23: - case T__66: + case T__65: case T__67: case T__68: case T__69: @@ -337,16 +338,17 @@ public class il65Parser extends Parser { case T__72: case T__73: case T__74: - case T__77: + case T__75: + case T__78: case NAME: { - setState(84); + setState(86); statement(); } break; case EOL: { - setState(85); + setState(87); match(EOL); } break; @@ -354,13 +356,13 @@ public class il65Parser extends Parser { throw new NoViableAltException(this); } } - setState(90); + setState(92); _errHandler.sync(this); _la = _input.LA(1); } - setState(91); + setState(93); match(T__2); - setState(92); + setState(94); match(EOL); } } @@ -406,8 +408,11 @@ public class il65Parser extends Parser { public InlineasmContext inlineasm() { return getRuleContext(InlineasmContext.class,0); } - public LabelContext label() { - return getRuleContext(LabelContext.class,0); + public LabeldefContext labeldef() { + return getRuleContext(LabeldefContext.class,0); + } + public ReturnstmtContext returnstmt() { + return getRuleContext(ReturnstmtContext.class,0); } public StatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -419,84 +424,91 @@ public class il65Parser extends Parser { StatementContext _localctx = new StatementContext(_ctx, getState()); enterRule(_localctx, 6, RULE_statement); try { - setState(105); + setState(108); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(94); + setState(96); directive(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(95); + setState(97); varinitializer(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(96); + setState(98); vardecl(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(97); + setState(99); constdecl(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(98); + setState(100); memoryvardecl(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(99); + setState(101); assignment(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(100); + setState(102); augassignment(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(101); + setState(103); unconditionaljump(); } break; case 9: enterOuterAlt(_localctx, 9); { - setState(102); + setState(104); postincrdecr(); } break; case 10: enterOuterAlt(_localctx, 10); { - setState(103); + setState(105); inlineasm(); } break; case 11: enterOuterAlt(_localctx, 11); { - setState(104); - label(); + setState(106); + labeldef(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(107); + returnstmt(); } break; } @@ -512,25 +524,25 @@ public class il65Parser extends Parser { return _localctx; } - public static class LabelContext extends ParserRuleContext { + public static class LabeldefContext extends ParserRuleContext { public IdentifierContext identifier() { return getRuleContext(IdentifierContext.class,0); } - public LabelContext(ParserRuleContext parent, int invokingState) { + public LabeldefContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_label; } + @Override public int getRuleIndex() { return RULE_labeldef; } } - public final LabelContext label() throws RecognitionException { - LabelContext _localctx = new LabelContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_label); + public final LabeldefContext labeldef() throws RecognitionException { + LabeldefContext _localctx = new LabeldefContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_labeldef); try { enterOuterAlt(_localctx, 1); { - setState(107); + setState(110); identifier(); - setState(108); + setState(111); match(T__3); } } @@ -565,27 +577,27 @@ public class il65Parser extends Parser { Call_locationContext _localctx = new Call_locationContext(_ctx, getState()); enterRule(_localctx, 10, RULE_call_location); try { - setState(113); + setState(116); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(110); + setState(113); integerliteral(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(111); + setState(114); identifier(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(112); + setState(115); scoped_identifier(); } break; @@ -618,9 +630,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(115); + setState(118); match(T__4); - setState(116); + setState(119); call_location(); } } @@ -656,7 +668,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(118); + setState(121); ((DirectiveContext)_localctx).directivename = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12))) != 0)) ) { @@ -667,17 +679,17 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(130); + setState(133); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { case 1: { - setState(120); + setState(123); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: { - setState(119); + setState(122); directivearg(); } break; @@ -686,21 +698,21 @@ public class il65Parser extends Parser { break; case 2: { - setState(122); + setState(125); directivearg(); - setState(127); + setState(130); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__13) { { { - setState(123); + setState(126); match(T__13); - setState(124); + setState(127); directivearg(); } } - setState(129); + setState(132); _errHandler.sync(this); _la = _input.LA(1); } @@ -740,20 +752,20 @@ public class il65Parser extends Parser { DirectiveargContext _localctx = new DirectiveargContext(_ctx, getState()); enterRule(_localctx, 16, RULE_directivearg); try { - setState(135); + setState(138); _errHandler.sync(this); switch (_input.LA(1)) { case STRING: enterOuterAlt(_localctx, 1); { - setState(132); + setState(135); stringliteral(); } break; case NAME: enterOuterAlt(_localctx, 2); { - setState(133); + setState(136); identifier(); } break; @@ -762,7 +774,7 @@ public class il65Parser extends Parser { case BIN_INTEGER: enterOuterAlt(_localctx, 3); { - setState(134); + setState(137); integerliteral(); } break; @@ -804,19 +816,19 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(137); + setState(140); datatype(); - setState(139); + setState(142); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__24) { { - setState(138); + setState(141); arrayspec(); } } - setState(141); + setState(144); identifier(); } } @@ -857,23 +869,23 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(143); + setState(146); datatype(); - setState(145); + setState(148); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__24) { { - setState(144); + setState(147); arrayspec(); } } - setState(147); + setState(150); identifier(); - setState(148); + setState(151); match(T__14); - setState(149); + setState(152); expression(0); } } @@ -904,9 +916,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(151); + setState(154); match(T__15); - setState(152); + setState(155); varinitializer(); } } @@ -937,9 +949,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(154); + setState(157); match(T__16); - setState(155); + setState(158); varinitializer(); } } @@ -968,7 +980,7 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(157); + setState(160); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23))) != 0)) ) { _errHandler.recoverInline(this); @@ -1011,23 +1023,23 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(159); + setState(162); match(T__24); - setState(160); - expression(0); setState(163); + expression(0); + setState(166); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__13) { { - setState(161); + setState(164); match(T__13); - setState(162); + setState(165); expression(0); } } - setState(165); + setState(168); match(T__25); } } @@ -1061,11 +1073,11 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(167); + setState(170); assign_target(); - setState(168); + setState(171); match(T__14); - setState(169); + setState(172); expression(0); } } @@ -1101,9 +1113,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(171); + setState(174); assign_target(); - setState(172); + setState(175); ((AugassignmentContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37))) != 0)) ) { @@ -1114,7 +1126,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(173); + setState(176); expression(0); } } @@ -1149,27 +1161,27 @@ public class il65Parser extends Parser { Assign_targetContext _localctx = new Assign_targetContext(_ctx, getState()); enterRule(_localctx, 34, RULE_assign_target); try { - setState(178); + setState(181); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(175); + setState(178); register(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(176); + setState(179); identifier(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(177); + setState(180); scoped_identifier(); } break; @@ -1204,9 +1216,9 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(180); + setState(183); assign_target(); - setState(181); + setState(184); ((PostincrdecrContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__38 || _la==T__39) ) { @@ -1283,28 +1295,28 @@ public class il65Parser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(197); + setState(200); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { case 1: { - setState(184); + setState(187); match(T__40); - setState(185); + setState(188); expression(0); - setState(186); + setState(189); match(T__41); } break; case 2: { - setState(188); + setState(191); functioncall(); } break; case 3: { - setState(189); + setState(192); ((ExpressionContext)_localctx).prefix = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__42) | (1L << T__43))) != 0)) ) { @@ -1315,45 +1327,45 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(190); + setState(193); expression(19); } break; case 4: { - setState(191); + setState(194); ((ExpressionContext)_localctx).prefix = match(T__63); - setState(192); + setState(195); expression(6); } break; case 5: { - setState(193); + setState(196); literalvalue(); } break; case 6: { - setState(194); + setState(197); register(); } break; case 7: { - setState(195); + setState(198); identifier(); } break; case 8: { - setState(196); + setState(199); scoped_identifier(); } break; } _ctx.stop = _input.LT(-1); - setState(242); + setState(245); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,18,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -1361,7 +1373,7 @@ public class il65Parser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(240); + setState(243); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: @@ -1370,11 +1382,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(199); + setState(202); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(200); + setState(203); ((ExpressionContext)_localctx).bop = match(T__44); - setState(201); + setState(204); ((ExpressionContext)_localctx).right = expression(19); } break; @@ -1384,9 +1396,9 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(202); + setState(205); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(203); + setState(206); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__45 || _la==T__46) ) { @@ -1397,7 +1409,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(204); + setState(207); ((ExpressionContext)_localctx).right = expression(18); } break; @@ -1407,9 +1419,9 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(205); + setState(208); if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(206); + setState(209); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__42 || _la==T__43) ) { @@ -1420,7 +1432,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(207); + setState(210); ((ExpressionContext)_localctx).right = expression(17); } break; @@ -1430,9 +1442,9 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(208); + setState(211); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(209); + setState(212); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50))) != 0)) ) { @@ -1443,7 +1455,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(210); + setState(213); ((ExpressionContext)_localctx).right = expression(16); } break; @@ -1453,9 +1465,9 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(211); + setState(214); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(212); + setState(215); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54))) != 0)) ) { @@ -1466,7 +1478,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(213); + setState(216); ((ExpressionContext)_localctx).right = expression(15); } break; @@ -1476,9 +1488,9 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(214); + setState(217); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(215); + setState(218); ((ExpressionContext)_localctx).bop = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__55 || _la==T__56) ) { @@ -1489,7 +1501,7 @@ public class il65Parser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(216); + setState(219); ((ExpressionContext)_localctx).right = expression(14); } break; @@ -1499,11 +1511,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(217); + setState(220); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); - setState(218); + setState(221); ((ExpressionContext)_localctx).bop = match(T__57); - setState(219); + setState(222); ((ExpressionContext)_localctx).right = expression(13); } break; @@ -1513,11 +1525,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(220); + setState(223); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(221); + setState(224); ((ExpressionContext)_localctx).bop = match(T__58); - setState(222); + setState(225); ((ExpressionContext)_localctx).right = expression(12); } break; @@ -1527,11 +1539,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(223); + setState(226); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(224); + setState(227); ((ExpressionContext)_localctx).bop = match(T__59); - setState(225); + setState(228); ((ExpressionContext)_localctx).right = expression(11); } break; @@ -1541,11 +1553,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(226); + setState(229); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(227); + setState(230); ((ExpressionContext)_localctx).bop = match(T__60); - setState(228); + setState(231); ((ExpressionContext)_localctx).right = expression(10); } break; @@ -1555,11 +1567,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(229); + setState(232); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(230); + setState(233); ((ExpressionContext)_localctx).bop = match(T__61); - setState(231); + setState(234); ((ExpressionContext)_localctx).right = expression(9); } break; @@ -1569,11 +1581,11 @@ public class il65Parser extends Parser { _localctx.left = _prevctx; _localctx.left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(232); + setState(235); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(233); + setState(236); ((ExpressionContext)_localctx).bop = match(T__62); - setState(234); + setState(237); ((ExpressionContext)_localctx).right = expression(8); } break; @@ -1583,11 +1595,11 @@ public class il65Parser extends Parser { _localctx.rangefrom = _prevctx; _localctx.rangefrom = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(235); + setState(238); if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(236); + setState(239); match(T__64); - setState(237); + setState(240); ((ExpressionContext)_localctx).rangeto = expression(6); } break; @@ -1595,16 +1607,16 @@ public class il65Parser extends Parser { { _localctx = new ExpressionContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(238); + setState(241); if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(239); + setState(242); arrayspec(); } break; } } } - setState(244); + setState(247); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,18,_ctx); } @@ -1625,8 +1637,8 @@ public class il65Parser extends Parser { public Call_locationContext call_location() { return getRuleContext(Call_locationContext.class,0); } - public Function_arg_listContext function_arg_list() { - return getRuleContext(Function_arg_listContext.class,0); + public Expression_listContext expression_list() { + return getRuleContext(Expression_listContext.class,0); } public FunctioncallContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -1641,21 +1653,21 @@ public class il65Parser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(245); - call_location(); - setState(246); - match(T__40); setState(248); + call_location(); + setState(249); + match(T__40); + setState(251); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__24) | (1L << T__40) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (NAME - 64)) | (1L << (DEC_INTEGER - 64)) | (1L << (HEX_INTEGER - 64)) | (1L << (BIN_INTEGER - 64)) | (1L << (FLOAT_NUMBER - 64)) | (1L << (STRING - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__24) | (1L << T__40) | (1L << T__42) | (1L << T__43))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (NAME - 64)) | (1L << (DEC_INTEGER - 64)) | (1L << (HEX_INTEGER - 64)) | (1L << (BIN_INTEGER - 64)) | (1L << (FLOAT_NUMBER - 64)) | (1L << (STRING - 64)))) != 0)) { { - setState(247); - function_arg_list(); + setState(250); + expression_list(); } } - setState(250); + setState(253); match(T__41); } } @@ -1670,41 +1682,41 @@ public class il65Parser extends Parser { return _localctx; } - public static class Function_arg_listContext extends ParserRuleContext { + public static class Expression_listContext extends ParserRuleContext { public List expression() { return getRuleContexts(ExpressionContext.class); } public ExpressionContext expression(int i) { return getRuleContext(ExpressionContext.class,i); } - public Function_arg_listContext(ParserRuleContext parent, int invokingState) { + public Expression_listContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_function_arg_list; } + @Override public int getRuleIndex() { return RULE_expression_list; } } - public final Function_arg_listContext function_arg_list() throws RecognitionException { - Function_arg_listContext _localctx = new Function_arg_listContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_function_arg_list); + public final Expression_listContext expression_list() throws RecognitionException { + Expression_listContext _localctx = new Expression_listContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_expression_list); int _la; try { enterOuterAlt(_localctx, 1); { - setState(252); + setState(255); expression(0); - setState(257); + setState(260); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__13) { { { - setState(253); + setState(256); match(T__13); - setState(254); + setState(257); expression(0); } } - setState(259); + setState(262); _errHandler.sync(this); _la = _input.LA(1); } @@ -1721,6 +1733,47 @@ public class il65Parser extends Parser { return _localctx; } + public static class ReturnstmtContext extends ParserRuleContext { + public Expression_listContext expression_list() { + return getRuleContext(Expression_listContext.class,0); + } + public ReturnstmtContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnstmt; } + } + + public final ReturnstmtContext returnstmt() throws RecognitionException { + ReturnstmtContext _localctx = new ReturnstmtContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_returnstmt); + try { + enterOuterAlt(_localctx, 1); + { + setState(263); + match(T__65); + setState(265); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + case 1: + { + setState(264); + expression_list(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class IdentifierContext extends ParserRuleContext { public TerminalNode NAME() { return getToken(il65Parser.NAME, 0); } public IdentifierContext(ParserRuleContext parent, int invokingState) { @@ -1731,11 +1784,11 @@ public class il65Parser extends Parser { public final IdentifierContext identifier() throws RecognitionException { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_identifier); + enterRule(_localctx, 46, RULE_identifier); try { enterOuterAlt(_localctx, 1); { - setState(260); + setState(267); match(NAME); } } @@ -1763,14 +1816,14 @@ public class il65Parser extends Parser { public final Scoped_identifierContext scoped_identifier() throws RecognitionException { Scoped_identifierContext _localctx = new Scoped_identifierContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_scoped_identifier); + enterRule(_localctx, 48, RULE_scoped_identifier); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(262); + setState(269); match(NAME); - setState(265); + setState(272); _errHandler.sync(this); _alt = 1; do { @@ -1778,9 +1831,9 @@ public class il65Parser extends Parser { case 1: { { - setState(263); - match(T__65); - setState(264); + setState(270); + match(T__66); + setState(271); match(NAME); } } @@ -1788,9 +1841,9 @@ public class il65Parser extends Parser { default: throw new NoViableAltException(this); } - setState(267); + setState(274); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,21,_ctx); + _alt = getInterpreter().adaptivePredict(_input,22,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } } @@ -1814,14 +1867,14 @@ public class il65Parser extends Parser { public final RegisterContext register() throws RecognitionException { RegisterContext _localctx = new RegisterContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_register); + enterRule(_localctx, 50, RULE_register); int _la; try { enterOuterAlt(_localctx, 1); { - setState(269); + setState(276); _la = _input.LA(1); - if ( !(((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (T__66 - 67)) | (1L << (T__67 - 67)) | (1L << (T__68 - 67)) | (1L << (T__69 - 67)) | (1L << (T__70 - 67)) | (1L << (T__71 - 67)) | (1L << (T__72 - 67)) | (1L << (T__73 - 67)) | (1L << (T__74 - 67)))) != 0)) ) { + if ( !(((((_la - 68)) & ~0x3f) == 0 && ((1L << (_la - 68)) & ((1L << (T__67 - 68)) | (1L << (T__68 - 68)) | (1L << (T__69 - 68)) | (1L << (T__70 - 68)) | (1L << (T__71 - 68)) | (1L << (T__72 - 68)) | (1L << (T__73 - 68)) | (1L << (T__74 - 68)) | (1L << (T__75 - 68)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -1854,14 +1907,14 @@ public class il65Parser extends Parser { public final IntegerliteralContext integerliteral() throws RecognitionException { IntegerliteralContext _localctx = new IntegerliteralContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_integerliteral); + enterRule(_localctx, 52, RULE_integerliteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(271); + setState(278); _la = _input.LA(1); - if ( !(((((_la - 84)) & ~0x3f) == 0 && ((1L << (_la - 84)) & ((1L << (DEC_INTEGER - 84)) | (1L << (HEX_INTEGER - 84)) | (1L << (BIN_INTEGER - 84)))) != 0)) ) { + if ( !(((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (DEC_INTEGER - 85)) | (1L << (HEX_INTEGER - 85)) | (1L << (BIN_INTEGER - 85)))) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -1891,14 +1944,14 @@ public class il65Parser extends Parser { public final BooleanliteralContext booleanliteral() throws RecognitionException { BooleanliteralContext _localctx = new BooleanliteralContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_booleanliteral); + enterRule(_localctx, 54, RULE_booleanliteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(273); + setState(280); _la = _input.LA(1); - if ( !(_la==T__75 || _la==T__76) ) { + if ( !(_la==T__76 || _la==T__77) ) { _errHandler.recoverInline(this); } else { @@ -1934,32 +1987,32 @@ public class il65Parser extends Parser { public final ArrayliteralContext arrayliteral() throws RecognitionException { ArrayliteralContext _localctx = new ArrayliteralContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_arrayliteral); + enterRule(_localctx, 56, RULE_arrayliteral); int _la; try { enterOuterAlt(_localctx, 1); { - setState(275); + setState(282); match(T__24); - setState(276); + setState(283); expression(0); - setState(281); + setState(288); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__13) { { { - setState(277); + setState(284); match(T__13); - setState(278); + setState(285); expression(0); } } - setState(283); + setState(290); _errHandler.sync(this); _la = _input.LA(1); } - setState(284); + setState(291); match(T__25); } } @@ -1984,11 +2037,11 @@ public class il65Parser extends Parser { public final StringliteralContext stringliteral() throws RecognitionException { StringliteralContext _localctx = new StringliteralContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_stringliteral); + enterRule(_localctx, 58, RULE_stringliteral); try { enterOuterAlt(_localctx, 1); { - setState(286); + setState(293); match(STRING); } } @@ -2013,11 +2066,11 @@ public class il65Parser extends Parser { public final FloatliteralContext floatliteral() throws RecognitionException { FloatliteralContext _localctx = new FloatliteralContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_floatliteral); + enterRule(_localctx, 60, RULE_floatliteral); try { enterOuterAlt(_localctx, 1); { - setState(288); + setState(295); match(FLOAT_NUMBER); } } @@ -2056,9 +2109,9 @@ public class il65Parser extends Parser { public final LiteralvalueContext literalvalue() throws RecognitionException { LiteralvalueContext _localctx = new LiteralvalueContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_literalvalue); + enterRule(_localctx, 62, RULE_literalvalue); try { - setState(295); + setState(302); _errHandler.sync(this); switch (_input.LA(1)) { case DEC_INTEGER: @@ -2066,36 +2119,36 @@ public class il65Parser extends Parser { case BIN_INTEGER: enterOuterAlt(_localctx, 1); { - setState(290); + setState(297); integerliteral(); } break; - case T__75: case T__76: + case T__77: enterOuterAlt(_localctx, 2); { - setState(291); + setState(298); booleanliteral(); } break; case T__24: enterOuterAlt(_localctx, 3); { - setState(292); + setState(299); arrayliteral(); } break; case STRING: enterOuterAlt(_localctx, 4); { - setState(293); + setState(300); stringliteral(); } break; case FLOAT_NUMBER: enterOuterAlt(_localctx, 5); { - setState(294); + setState(301); floatliteral(); } break; @@ -2124,13 +2177,13 @@ public class il65Parser extends Parser { public final InlineasmContext inlineasm() throws RecognitionException { InlineasmContext _localctx = new InlineasmContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_inlineasm); + enterRule(_localctx, 64, RULE_inlineasm); try { enterOuterAlt(_localctx, 1); { - setState(297); - match(T__77); - setState(298); + setState(304); + match(T__78); + setState(305); match(INLINEASMBLOCK); } } @@ -2187,111 +2240,114 @@ public class il65Parser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3[\u012f\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\\\u0136\4\2\t\2\4"+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\3\2\3\2\7\2E\n\2\f\2\16\2H\13\2\3\2\3\2\3\3\3\3\5\3N\n\3\3\4\3\4\3"+ - "\4\5\4S\n\4\3\4\3\4\3\4\3\4\7\4Y\n\4\f\4\16\4\\\13\4\3\4\3\4\3\4\3\5\3"+ - "\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5l\n\5\3\6\3\6\3\6\3\7\3\7\3"+ - "\7\5\7t\n\7\3\b\3\b\3\b\3\t\3\t\5\t{\n\t\3\t\3\t\3\t\7\t\u0080\n\t\f\t"+ - "\16\t\u0083\13\t\5\t\u0085\n\t\3\n\3\n\3\n\5\n\u008a\n\n\3\13\3\13\5\13"+ - "\u008e\n\13\3\13\3\13\3\f\3\f\5\f\u0094\n\f\3\f\3\f\3\f\3\f\3\r\3\r\3"+ - "\r\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3\20\5\20\u00a6\n\20\3\20\3"+ - "\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\5\23\u00b5"+ - "\n\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\25\3\25\5\25\u00c8\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\t!\4\"\t\"\3\2\3\2\7\2G\n\2\f\2\16\2J\13\2\3\2\3\2\3\3\3\3\5\3P\n\3\3"+ + "\4\3\4\3\4\5\4U\n\4\3\4\3\4\3\4\3\4\7\4[\n\4\f\4\16\4^\13\4\3\4\3\4\3"+ + "\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5\5o\n\5\3\6\3\6\3"+ + "\6\3\7\3\7\3\7\5\7w\n\7\3\b\3\b\3\b\3\t\3\t\5\t~\n\t\3\t\3\t\3\t\7\t\u0083"+ + "\n\t\f\t\16\t\u0086\13\t\5\t\u0088\n\t\3\n\3\n\3\n\5\n\u008d\n\n\3\13"+ + "\3\13\5\13\u0091\n\13\3\13\3\13\3\f\3\f\5\f\u0097\n\f\3\f\3\f\3\f\3\f"+ + "\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3\20\5\20\u00a9\n"+ + "\20\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\5"+ + "\23\u00b8\n\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u00cb\n\25\3\25\3\25\3\25\3\25\3\25"+ "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u00f3\n\25\f\25\16\25\u00f6\13\25"+ - "\3\26\3\26\3\26\5\26\u00fb\n\26\3\26\3\26\3\27\3\27\3\27\7\27\u0102\n"+ - "\27\f\27\16\27\u0105\13\27\3\30\3\30\3\31\3\31\3\31\6\31\u010c\n\31\r"+ - "\31\16\31\u010d\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\35\3\35\7\35"+ - "\u011a\n\35\f\35\16\35\u011d\13\35\3\35\3\35\3\36\3\36\3\37\3\37\3 \3"+ - " \3 \3 \3 \5 \u012a\n \3!\3!\3!\3!\2\3(\"\2\4\6\b\n\f\16\20\22\24\26\30"+ - "\32\34\36 \"$&(*,.\60\62\64\668:<>@\2\17\3\2\b\17\3\2\24\32\3\2\35(\3"+ - "\2)*\4\2\3\3-.\3\2\60\61\3\2-.\3\2\62\65\3\2\669\3\2:;\3\2EM\3\2VX\3\2"+ - "NO\2\u0147\2F\3\2\2\2\4M\3\2\2\2\6O\3\2\2\2\bk\3\2\2\2\nm\3\2\2\2\fs\3"+ - "\2\2\2\16u\3\2\2\2\20x\3\2\2\2\22\u0089\3\2\2\2\24\u008b\3\2\2\2\26\u0091"+ - "\3\2\2\2\30\u0099\3\2\2\2\32\u009c\3\2\2\2\34\u009f\3\2\2\2\36\u00a1\3"+ - "\2\2\2 \u00a9\3\2\2\2\"\u00ad\3\2\2\2$\u00b4\3\2\2\2&\u00b6\3\2\2\2(\u00c7"+ - "\3\2\2\2*\u00f7\3\2\2\2,\u00fe\3\2\2\2.\u0106\3\2\2\2\60\u0108\3\2\2\2"+ - "\62\u010f\3\2\2\2\64\u0111\3\2\2\2\66\u0113\3\2\2\28\u0115\3\2\2\2:\u0120"+ - "\3\2\2\2<\u0122\3\2\2\2>\u0129\3\2\2\2@\u012b\3\2\2\2BE\5\4\3\2CE\7T\2"+ - "\2DB\3\2\2\2DC\3\2\2\2EH\3\2\2\2FD\3\2\2\2FG\3\2\2\2GI\3\2\2\2HF\3\2\2"+ - "\2IJ\7\2\2\3J\3\3\2\2\2KN\5\20\t\2LN\5\6\4\2MK\3\2\2\2ML\3\2\2\2N\5\3"+ - "\2\2\2OP\7\3\2\2PR\5.\30\2QS\5\64\33\2RQ\3\2\2\2RS\3\2\2\2ST\3\2\2\2T"+ - "U\7\4\2\2UZ\7T\2\2VY\5\b\5\2WY\7T\2\2XV\3\2\2\2XW\3\2\2\2Y\\\3\2\2\2Z"+ - "X\3\2\2\2Z[\3\2\2\2[]\3\2\2\2\\Z\3\2\2\2]^\7\5\2\2^_\7T\2\2_\7\3\2\2\2"+ - "`l\5\20\t\2al\5\26\f\2bl\5\24\13\2cl\5\30\r\2dl\5\32\16\2el\5 \21\2fl"+ - "\5\"\22\2gl\5\16\b\2hl\5&\24\2il\5@!\2jl\5\n\6\2k`\3\2\2\2ka\3\2\2\2k"+ - "b\3\2\2\2kc\3\2\2\2kd\3\2\2\2ke\3\2\2\2kf\3\2\2\2kg\3\2\2\2kh\3\2\2\2"+ - "ki\3\2\2\2kj\3\2\2\2l\t\3\2\2\2mn\5.\30\2no\7\6\2\2o\13\3\2\2\2pt\5\64"+ - "\33\2qt\5.\30\2rt\5\60\31\2sp\3\2\2\2sq\3\2\2\2sr\3\2\2\2t\r\3\2\2\2u"+ - "v\7\7\2\2vw\5\f\7\2w\17\3\2\2\2x\u0084\t\2\2\2y{\5\22\n\2zy\3\2\2\2z{"+ - "\3\2\2\2{\u0085\3\2\2\2|\u0081\5\22\n\2}~\7\20\2\2~\u0080\5\22\n\2\177"+ - "}\3\2\2\2\u0080\u0083\3\2\2\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082"+ - "\u0085\3\2\2\2\u0083\u0081\3\2\2\2\u0084z\3\2\2\2\u0084|\3\2\2\2\u0085"+ - "\21\3\2\2\2\u0086\u008a\5:\36\2\u0087\u008a\5.\30\2\u0088\u008a\5\64\33"+ - "\2\u0089\u0086\3\2\2\2\u0089\u0087\3\2\2\2\u0089\u0088\3\2\2\2\u008a\23"+ - "\3\2\2\2\u008b\u008d\5\34\17\2\u008c\u008e\5\36\20\2\u008d\u008c\3\2\2"+ - "\2\u008d\u008e\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u0090\5.\30\2\u0090\25"+ - "\3\2\2\2\u0091\u0093\5\34\17\2\u0092\u0094\5\36\20\2\u0093\u0092\3\2\2"+ - "\2\u0093\u0094\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0096\5.\30\2\u0096\u0097"+ - "\7\21\2\2\u0097\u0098\5(\25\2\u0098\27\3\2\2\2\u0099\u009a\7\22\2\2\u009a"+ - "\u009b\5\26\f\2\u009b\31\3\2\2\2\u009c\u009d\7\23\2\2\u009d\u009e\5\26"+ - "\f\2\u009e\33\3\2\2\2\u009f\u00a0\t\3\2\2\u00a0\35\3\2\2\2\u00a1\u00a2"+ - "\7\33\2\2\u00a2\u00a5\5(\25\2\u00a3\u00a4\7\20\2\2\u00a4\u00a6\5(\25\2"+ - "\u00a5\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8"+ - "\7\34\2\2\u00a8\37\3\2\2\2\u00a9\u00aa\5$\23\2\u00aa\u00ab\7\21\2\2\u00ab"+ - "\u00ac\5(\25\2\u00ac!\3\2\2\2\u00ad\u00ae\5$\23\2\u00ae\u00af\t\4\2\2"+ - "\u00af\u00b0\5(\25\2\u00b0#\3\2\2\2\u00b1\u00b5\5\62\32\2\u00b2\u00b5"+ - "\5.\30\2\u00b3\u00b5\5\60\31\2\u00b4\u00b1\3\2\2\2\u00b4\u00b2\3\2\2\2"+ - "\u00b4\u00b3\3\2\2\2\u00b5%\3\2\2\2\u00b6\u00b7\5$\23\2\u00b7\u00b8\t"+ - "\5\2\2\u00b8\'\3\2\2\2\u00b9\u00ba\b\25\1\2\u00ba\u00bb\7+\2\2\u00bb\u00bc"+ - "\5(\25\2\u00bc\u00bd\7,\2\2\u00bd\u00c8\3\2\2\2\u00be\u00c8\5*\26\2\u00bf"+ - "\u00c0\t\6\2\2\u00c0\u00c8\5(\25\25\u00c1\u00c2\7B\2\2\u00c2\u00c8\5("+ - "\25\b\u00c3\u00c8\5> \2\u00c4\u00c8\5\62\32\2\u00c5\u00c8\5.\30\2\u00c6"+ - "\u00c8\5\60\31\2\u00c7\u00b9\3\2\2\2\u00c7\u00be\3\2\2\2\u00c7\u00bf\3"+ - "\2\2\2\u00c7\u00c1\3\2\2\2\u00c7\u00c3\3\2\2\2\u00c7\u00c4\3\2\2\2\u00c7"+ - "\u00c5\3\2\2\2\u00c7\u00c6\3\2\2\2\u00c8\u00f4\3\2\2\2\u00c9\u00ca\f\24"+ - "\2\2\u00ca\u00cb\7/\2\2\u00cb\u00f3\5(\25\25\u00cc\u00cd\f\23\2\2\u00cd"+ - "\u00ce\t\7\2\2\u00ce\u00f3\5(\25\24\u00cf\u00d0\f\22\2\2\u00d0\u00d1\t"+ - "\b\2\2\u00d1\u00f3\5(\25\23\u00d2\u00d3\f\21\2\2\u00d3\u00d4\t\t\2\2\u00d4"+ - "\u00f3\5(\25\22\u00d5\u00d6\f\20\2\2\u00d6\u00d7\t\n\2\2\u00d7\u00f3\5"+ - "(\25\21\u00d8\u00d9\f\17\2\2\u00d9\u00da\t\13\2\2\u00da\u00f3\5(\25\20"+ - "\u00db\u00dc\f\16\2\2\u00dc\u00dd\7<\2\2\u00dd\u00f3\5(\25\17\u00de\u00df"+ - "\f\r\2\2\u00df\u00e0\7=\2\2\u00e0\u00f3\5(\25\16\u00e1\u00e2\f\f\2\2\u00e2"+ - "\u00e3\7>\2\2\u00e3\u00f3\5(\25\r\u00e4\u00e5\f\13\2\2\u00e5\u00e6\7?"+ - "\2\2\u00e6\u00f3\5(\25\f\u00e7\u00e8\f\n\2\2\u00e8\u00e9\7@\2\2\u00e9"+ - "\u00f3\5(\25\13\u00ea\u00eb\f\t\2\2\u00eb\u00ec\7A\2\2\u00ec\u00f3\5("+ - "\25\n\u00ed\u00ee\f\7\2\2\u00ee\u00ef\7C\2\2\u00ef\u00f3\5(\25\b\u00f0"+ - "\u00f1\f\27\2\2\u00f1\u00f3\5\36\20\2\u00f2\u00c9\3\2\2\2\u00f2\u00cc"+ - "\3\2\2\2\u00f2\u00cf\3\2\2\2\u00f2\u00d2\3\2\2\2\u00f2\u00d5\3\2\2\2\u00f2"+ - "\u00d8\3\2\2\2\u00f2\u00db\3\2\2\2\u00f2\u00de\3\2\2\2\u00f2\u00e1\3\2"+ - "\2\2\u00f2\u00e4\3\2\2\2\u00f2\u00e7\3\2\2\2\u00f2\u00ea\3\2\2\2\u00f2"+ - "\u00ed\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2\3\2"+ - "\2\2\u00f4\u00f5\3\2\2\2\u00f5)\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00f8"+ - "\5\f\7\2\u00f8\u00fa\7+\2\2\u00f9\u00fb\5,\27\2\u00fa\u00f9\3\2\2\2\u00fa"+ - "\u00fb\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00fd\7,\2\2\u00fd+\3\2\2\2\u00fe"+ - "\u0103\5(\25\2\u00ff\u0100\7\20\2\2\u0100\u0102\5(\25\2\u0101\u00ff\3"+ - "\2\2\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0104\3\2\2\2\u0104"+ - "-\3\2\2\2\u0105\u0103\3\2\2\2\u0106\u0107\7U\2\2\u0107/\3\2\2\2\u0108"+ - "\u010b\7U\2\2\u0109\u010a\7D\2\2\u010a\u010c\7U\2\2\u010b\u0109\3\2\2"+ - "\2\u010c\u010d\3\2\2\2\u010d\u010b\3\2\2\2\u010d\u010e\3\2\2\2\u010e\61"+ - "\3\2\2\2\u010f\u0110\t\f\2\2\u0110\63\3\2\2\2\u0111\u0112\t\r\2\2\u0112"+ - "\65\3\2\2\2\u0113\u0114\t\16\2\2\u0114\67\3\2\2\2\u0115\u0116\7\33\2\2"+ - "\u0116\u011b\5(\25\2\u0117\u0118\7\20\2\2\u0118\u011a\5(\25\2\u0119\u0117"+ - "\3\2\2\2\u011a\u011d\3\2\2\2\u011b\u0119\3\2\2\2\u011b\u011c\3\2\2\2\u011c"+ - "\u011e\3\2\2\2\u011d\u011b\3\2\2\2\u011e\u011f\7\34\2\2\u011f9\3\2\2\2"+ - "\u0120\u0121\7Z\2\2\u0121;\3\2\2\2\u0122\u0123\7Y\2\2\u0123=\3\2\2\2\u0124"+ - "\u012a\5\64\33\2\u0125\u012a\5\66\34\2\u0126\u012a\58\35\2\u0127\u012a"+ - "\5:\36\2\u0128\u012a\5<\37\2\u0129\u0124\3\2\2\2\u0129\u0125\3\2\2\2\u0129"+ - "\u0126\3\2\2\2\u0129\u0127\3\2\2\2\u0129\u0128\3\2\2\2\u012a?\3\2\2\2"+ - "\u012b\u012c\7P\2\2\u012c\u012d\7[\2\2\u012dA\3\2\2\2\32DFMRXZksz\u0081"+ - "\u0084\u0089\u008d\u0093\u00a5\u00b4\u00c7\u00f2\u00f4\u00fa\u0103\u010d"+ - "\u011b\u0129"; + "\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u00f6\n\25\f\25\16\25\u00f9"+ + "\13\25\3\26\3\26\3\26\5\26\u00fe\n\26\3\26\3\26\3\27\3\27\3\27\7\27\u0105"+ + "\n\27\f\27\16\27\u0108\13\27\3\30\3\30\5\30\u010c\n\30\3\31\3\31\3\32"+ + "\3\32\3\32\6\32\u0113\n\32\r\32\16\32\u0114\3\33\3\33\3\34\3\34\3\35\3"+ + "\35\3\36\3\36\3\36\3\36\7\36\u0121\n\36\f\36\16\36\u0124\13\36\3\36\3"+ + "\36\3\37\3\37\3 \3 \3!\3!\3!\3!\3!\5!\u0131\n!\3\"\3\"\3\"\3\"\2\3(#\2"+ + "\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@B\2\17"+ + "\3\2\b\17\3\2\24\32\3\2\35(\3\2)*\4\2\3\3-.\3\2\60\61\3\2-.\3\2\62\65"+ + "\3\2\669\3\2:;\3\2FN\3\2WY\3\2OP\2\u014f\2H\3\2\2\2\4O\3\2\2\2\6Q\3\2"+ + "\2\2\bn\3\2\2\2\np\3\2\2\2\fv\3\2\2\2\16x\3\2\2\2\20{\3\2\2\2\22\u008c"+ + "\3\2\2\2\24\u008e\3\2\2\2\26\u0094\3\2\2\2\30\u009c\3\2\2\2\32\u009f\3"+ + "\2\2\2\34\u00a2\3\2\2\2\36\u00a4\3\2\2\2 \u00ac\3\2\2\2\"\u00b0\3\2\2"+ + "\2$\u00b7\3\2\2\2&\u00b9\3\2\2\2(\u00ca\3\2\2\2*\u00fa\3\2\2\2,\u0101"+ + "\3\2\2\2.\u0109\3\2\2\2\60\u010d\3\2\2\2\62\u010f\3\2\2\2\64\u0116\3\2"+ + "\2\2\66\u0118\3\2\2\28\u011a\3\2\2\2:\u011c\3\2\2\2<\u0127\3\2\2\2>\u0129"+ + "\3\2\2\2@\u0130\3\2\2\2B\u0132\3\2\2\2DG\5\4\3\2EG\7U\2\2FD\3\2\2\2FE"+ + "\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2IK\3\2\2\2JH\3\2\2\2KL\7\2\2\3L"+ + "\3\3\2\2\2MP\5\20\t\2NP\5\6\4\2OM\3\2\2\2ON\3\2\2\2P\5\3\2\2\2QR\7\3\2"+ + "\2RT\5\60\31\2SU\5\66\34\2TS\3\2\2\2TU\3\2\2\2UV\3\2\2\2VW\7\4\2\2W\\"+ + "\7U\2\2X[\5\b\5\2Y[\7U\2\2ZX\3\2\2\2ZY\3\2\2\2[^\3\2\2\2\\Z\3\2\2\2\\"+ + "]\3\2\2\2]_\3\2\2\2^\\\3\2\2\2_`\7\5\2\2`a\7U\2\2a\7\3\2\2\2bo\5\20\t"+ + "\2co\5\26\f\2do\5\24\13\2eo\5\30\r\2fo\5\32\16\2go\5 \21\2ho\5\"\22\2"+ + "io\5\16\b\2jo\5&\24\2ko\5B\"\2lo\5\n\6\2mo\5.\30\2nb\3\2\2\2nc\3\2\2\2"+ + "nd\3\2\2\2ne\3\2\2\2nf\3\2\2\2ng\3\2\2\2nh\3\2\2\2ni\3\2\2\2nj\3\2\2\2"+ + "nk\3\2\2\2nl\3\2\2\2nm\3\2\2\2o\t\3\2\2\2pq\5\60\31\2qr\7\6\2\2r\13\3"+ + "\2\2\2sw\5\66\34\2tw\5\60\31\2uw\5\62\32\2vs\3\2\2\2vt\3\2\2\2vu\3\2\2"+ + "\2w\r\3\2\2\2xy\7\7\2\2yz\5\f\7\2z\17\3\2\2\2{\u0087\t\2\2\2|~\5\22\n"+ + "\2}|\3\2\2\2}~\3\2\2\2~\u0088\3\2\2\2\177\u0084\5\22\n\2\u0080\u0081\7"+ + "\20\2\2\u0081\u0083\5\22\n\2\u0082\u0080\3\2\2\2\u0083\u0086\3\2\2\2\u0084"+ + "\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0088\3\2\2\2\u0086\u0084\3\2"+ + "\2\2\u0087}\3\2\2\2\u0087\177\3\2\2\2\u0088\21\3\2\2\2\u0089\u008d\5<"+ + "\37\2\u008a\u008d\5\60\31\2\u008b\u008d\5\66\34\2\u008c\u0089\3\2\2\2"+ + "\u008c\u008a\3\2\2\2\u008c\u008b\3\2\2\2\u008d\23\3\2\2\2\u008e\u0090"+ + "\5\34\17\2\u008f\u0091\5\36\20\2\u0090\u008f\3\2\2\2\u0090\u0091\3\2\2"+ + "\2\u0091\u0092\3\2\2\2\u0092\u0093\5\60\31\2\u0093\25\3\2\2\2\u0094\u0096"+ + "\5\34\17\2\u0095\u0097\5\36\20\2\u0096\u0095\3\2\2\2\u0096\u0097\3\2\2"+ + "\2\u0097\u0098\3\2\2\2\u0098\u0099\5\60\31\2\u0099\u009a\7\21\2\2\u009a"+ + "\u009b\5(\25\2\u009b\27\3\2\2\2\u009c\u009d\7\22\2\2\u009d\u009e\5\26"+ + "\f\2\u009e\31\3\2\2\2\u009f\u00a0\7\23\2\2\u00a0\u00a1\5\26\f\2\u00a1"+ + "\33\3\2\2\2\u00a2\u00a3\t\3\2\2\u00a3\35\3\2\2\2\u00a4\u00a5\7\33\2\2"+ + "\u00a5\u00a8\5(\25\2\u00a6\u00a7\7\20\2\2\u00a7\u00a9\5(\25\2\u00a8\u00a6"+ + "\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00ab\7\34\2\2"+ + "\u00ab\37\3\2\2\2\u00ac\u00ad\5$\23\2\u00ad\u00ae\7\21\2\2\u00ae\u00af"+ + "\5(\25\2\u00af!\3\2\2\2\u00b0\u00b1\5$\23\2\u00b1\u00b2\t\4\2\2\u00b2"+ + "\u00b3\5(\25\2\u00b3#\3\2\2\2\u00b4\u00b8\5\64\33\2\u00b5\u00b8\5\60\31"+ + "\2\u00b6\u00b8\5\62\32\2\u00b7\u00b4\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b7"+ + "\u00b6\3\2\2\2\u00b8%\3\2\2\2\u00b9\u00ba\5$\23\2\u00ba\u00bb\t\5\2\2"+ + "\u00bb\'\3\2\2\2\u00bc\u00bd\b\25\1\2\u00bd\u00be\7+\2\2\u00be\u00bf\5"+ + "(\25\2\u00bf\u00c0\7,\2\2\u00c0\u00cb\3\2\2\2\u00c1\u00cb\5*\26\2\u00c2"+ + "\u00c3\t\6\2\2\u00c3\u00cb\5(\25\25\u00c4\u00c5\7B\2\2\u00c5\u00cb\5("+ + "\25\b\u00c6\u00cb\5@!\2\u00c7\u00cb\5\64\33\2\u00c8\u00cb\5\60\31\2\u00c9"+ + "\u00cb\5\62\32\2\u00ca\u00bc\3\2\2\2\u00ca\u00c1\3\2\2\2\u00ca\u00c2\3"+ + "\2\2\2\u00ca\u00c4\3\2\2\2\u00ca\u00c6\3\2\2\2\u00ca\u00c7\3\2\2\2\u00ca"+ + "\u00c8\3\2\2\2\u00ca\u00c9\3\2\2\2\u00cb\u00f7\3\2\2\2\u00cc\u00cd\f\24"+ + "\2\2\u00cd\u00ce\7/\2\2\u00ce\u00f6\5(\25\25\u00cf\u00d0\f\23\2\2\u00d0"+ + "\u00d1\t\7\2\2\u00d1\u00f6\5(\25\24\u00d2\u00d3\f\22\2\2\u00d3\u00d4\t"+ + "\b\2\2\u00d4\u00f6\5(\25\23\u00d5\u00d6\f\21\2\2\u00d6\u00d7\t\t\2\2\u00d7"+ + "\u00f6\5(\25\22\u00d8\u00d9\f\20\2\2\u00d9\u00da\t\n\2\2\u00da\u00f6\5"+ + "(\25\21\u00db\u00dc\f\17\2\2\u00dc\u00dd\t\13\2\2\u00dd\u00f6\5(\25\20"+ + "\u00de\u00df\f\16\2\2\u00df\u00e0\7<\2\2\u00e0\u00f6\5(\25\17\u00e1\u00e2"+ + "\f\r\2\2\u00e2\u00e3\7=\2\2\u00e3\u00f6\5(\25\16\u00e4\u00e5\f\f\2\2\u00e5"+ + "\u00e6\7>\2\2\u00e6\u00f6\5(\25\r\u00e7\u00e8\f\13\2\2\u00e8\u00e9\7?"+ + "\2\2\u00e9\u00f6\5(\25\f\u00ea\u00eb\f\n\2\2\u00eb\u00ec\7@\2\2\u00ec"+ + "\u00f6\5(\25\13\u00ed\u00ee\f\t\2\2\u00ee\u00ef\7A\2\2\u00ef\u00f6\5("+ + "\25\n\u00f0\u00f1\f\7\2\2\u00f1\u00f2\7C\2\2\u00f2\u00f6\5(\25\b\u00f3"+ + "\u00f4\f\27\2\2\u00f4\u00f6\5\36\20\2\u00f5\u00cc\3\2\2\2\u00f5\u00cf"+ + "\3\2\2\2\u00f5\u00d2\3\2\2\2\u00f5\u00d5\3\2\2\2\u00f5\u00d8\3\2\2\2\u00f5"+ + "\u00db\3\2\2\2\u00f5\u00de\3\2\2\2\u00f5\u00e1\3\2\2\2\u00f5\u00e4\3\2"+ + "\2\2\u00f5\u00e7\3\2\2\2\u00f5\u00ea\3\2\2\2\u00f5\u00ed\3\2\2\2\u00f5"+ + "\u00f0\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f6\u00f9\3\2\2\2\u00f7\u00f5\3\2"+ + "\2\2\u00f7\u00f8\3\2\2\2\u00f8)\3\2\2\2\u00f9\u00f7\3\2\2\2\u00fa\u00fb"+ + "\5\f\7\2\u00fb\u00fd\7+\2\2\u00fc\u00fe\5,\27\2\u00fd\u00fc\3\2\2\2\u00fd"+ + "\u00fe\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100\7,\2\2\u0100+\3\2\2\2\u0101"+ + "\u0106\5(\25\2\u0102\u0103\7\20\2\2\u0103\u0105\5(\25\2\u0104\u0102\3"+ + "\2\2\2\u0105\u0108\3\2\2\2\u0106\u0104\3\2\2\2\u0106\u0107\3\2\2\2\u0107"+ + "-\3\2\2\2\u0108\u0106\3\2\2\2\u0109\u010b\7D\2\2\u010a\u010c\5,\27\2\u010b"+ + "\u010a\3\2\2\2\u010b\u010c\3\2\2\2\u010c/\3\2\2\2\u010d\u010e\7V\2\2\u010e"+ + "\61\3\2\2\2\u010f\u0112\7V\2\2\u0110\u0111\7E\2\2\u0111\u0113\7V\2\2\u0112"+ + "\u0110\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0112\3\2\2\2\u0114\u0115\3\2"+ + "\2\2\u0115\63\3\2\2\2\u0116\u0117\t\f\2\2\u0117\65\3\2\2\2\u0118\u0119"+ + "\t\r\2\2\u0119\67\3\2\2\2\u011a\u011b\t\16\2\2\u011b9\3\2\2\2\u011c\u011d"+ + "\7\33\2\2\u011d\u0122\5(\25\2\u011e\u011f\7\20\2\2\u011f\u0121\5(\25\2"+ + "\u0120\u011e\3\2\2\2\u0121\u0124\3\2\2\2\u0122\u0120\3\2\2\2\u0122\u0123"+ + "\3\2\2\2\u0123\u0125\3\2\2\2\u0124\u0122\3\2\2\2\u0125\u0126\7\34\2\2"+ + "\u0126;\3\2\2\2\u0127\u0128\7[\2\2\u0128=\3\2\2\2\u0129\u012a\7Z\2\2\u012a"+ + "?\3\2\2\2\u012b\u0131\5\66\34\2\u012c\u0131\58\35\2\u012d\u0131\5:\36"+ + "\2\u012e\u0131\5<\37\2\u012f\u0131\5> \2\u0130\u012b\3\2\2\2\u0130\u012c"+ + "\3\2\2\2\u0130\u012d\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u012f\3\2\2\2\u0131"+ + "A\3\2\2\2\u0132\u0133\7Q\2\2\u0133\u0134\7\\\2\2\u0134C\3\2\2\2\33FHO"+ + "TZ\\nv}\u0084\u0087\u008c\u0090\u0096\u00a8\u00b7\u00ca\u00f5\u00f7\u00fd"+ + "\u0106\u010b\u0114\u0122\u0130"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static {