diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 67f7cb47d..c44b5d5b0 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -240,6 +240,7 @@ public class Compiler { private void pass3Analysis() { new Pass3AssertRValues(program).check(); + new Pass3AssertConstants(program).check(); new Pass3AssertArrayLengths(program).check(); new Pass3AssertNoMulDivMod(program).check(); new Pass3BlockSequencePlanner(program).plan(); diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java index d176fb1a4..44ec7ccfa 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java @@ -22,7 +22,7 @@ public abstract class ProgramValue { public static class ConstantVariableValue extends ProgramValue { private final ConstantVar constantVar; - public ConstantVariableValue(ConstantVar constantVar) { + ConstantVariableValue(ConstantVar constantVar) { this.constantVar = constantVar; } @@ -42,7 +42,7 @@ public abstract class ProgramValue { public static class TypeArraySize extends ProgramValue { private final SymbolTypeArray array; - public TypeArraySize(SymbolTypeArray array) { + TypeArraySize(SymbolTypeArray array) { this.array = array; } @@ -202,6 +202,29 @@ public abstract class ProgramValue { } + /** Location inside inline kickasm code. */ + public static class KickAsmLocation extends ProgramValue { + + private StatementKickAsm statementKickAsm; + + KickAsmLocation(StatementKickAsm statementKickAsm) { + super(); + this.statementKickAsm = statementKickAsm; + } + + @Override + public RValue get() { + return statementKickAsm.getLocation(); + } + + @Override + public void set(RValue value) { + statementKickAsm.setLocation(value); + } + + } + + /** * LValue as part of an assignment statement (or a call). */ @@ -276,7 +299,7 @@ public abstract class ProgramValue { private final dk.camelot64.kickc.model.values.ConstantCastValue castValue; - public ConstantCastValue(dk.camelot64.kickc.model.values.ConstantCastValue castValue) { + ConstantCastValue(dk.camelot64.kickc.model.values.ConstantCastValue castValue) { this.castValue = castValue; } @@ -299,7 +322,7 @@ public abstract class ProgramValue { private final ConstantVarPointer varPointer; - public VarPointer(ConstantVarPointer varPointer) { + VarPointer(ConstantVarPointer varPointer) { this.varPointer = varPointer; } @@ -319,7 +342,7 @@ public abstract class ProgramValue { private final ConstantArrayList arrayList; private final int idx; - public ConstantArrayElement(ConstantArrayList arrayList, int idx) { + ConstantArrayElement(ConstantArrayList arrayList, int idx) { this.arrayList = arrayList; this.idx = idx; } @@ -339,7 +362,7 @@ public abstract class ProgramValue { private ValueList list; private int idx; - public ListElement(ValueList list, int idx) { + ListElement(ValueList list, int idx) { this.list = list; this.idx = idx; } @@ -418,7 +441,7 @@ public abstract class ProgramValue { private final StatementCall call; private final int i; - public CallParameter(StatementCall call, int i) { + CallParameter(StatementCall call, int i) { this.call = call; this.i = i; } @@ -492,7 +515,7 @@ public abstract class ProgramValue { private final StatementPhiBlock.PhiVariable phiVariable; private final int i; - public PhiValue(StatementPhiBlock.PhiVariable phiVariable, int i) { + PhiValue(StatementPhiBlock.PhiVariable phiVariable, int i) { this.phiVariable = phiVariable; this.i = i; } @@ -545,7 +568,8 @@ public abstract class ProgramValue { @Override public void set(RValue value) { - this.rValue = (ConstantValue) value; + this.rValue = value; } } + } diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java index c4e9c65b0..23e804cfb 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java @@ -119,6 +119,12 @@ public class ProgramValueIterator { } execute(new ProgramValue.PhiVariable(phiVariable), handler, statement, statementsIt, block); } + } else if(statement instanceof StatementKickAsm) { + StatementKickAsm statementKickAsm = (StatementKickAsm) statement; + RValue location = statementKickAsm.getLocation(); + if(location!=null) { + execute(new ProgramValue.KickAsmLocation(statementKickAsm), handler, statement, statementsIt, block); + } } } diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementKickAsm.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementKickAsm.java index d6a4e6993..6007d7b6c 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementKickAsm.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementKickAsm.java @@ -1,6 +1,7 @@ package dk.camelot64.kickc.model.statements; import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.values.RValue; /** Inline KickAssembler code */ public class StatementKickAsm extends StatementBase { @@ -9,31 +10,37 @@ public class StatementKickAsm extends StatementBase { private String kickAsmCode; /** The absolute address to generate the kick-assembler code at. If null it is generated inline. */ - private Long location; + private RValue location; public StatementKickAsm(String kickAsmCode, StatementSource source) { super(null, source); this.kickAsmCode = kickAsmCode; } - public StatementKickAsm(String kickAsmCode, Long location, StatementSource source) { + public StatementKickAsm(String kickAsmCode, RValue location, StatementSource source) { super(null, source); this.kickAsmCode = kickAsmCode; this.location = location; } - public Long getLocation() { + public RValue getLocation() { return location; } - public void setLocation(Long location) { + public void setLocation(RValue location) { this.location = location; } @Override public String toString(Program program, boolean aliveInfo) { StringBuilder txt = new StringBuilder(); - txt.append("kickasm {{ "); + txt.append("kickasm"); + if(location!=null) { + txt.append("(location "); + txt.append(location.toString(program)); + txt.append(")"); + } + txt.append(" {{ "); txt.append(kickAsmCode); txt.append(" }}"); return txt.toString(); diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 index ca1faa364..5f567cae6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 @@ -36,28 +36,20 @@ declFunction ; declKasm - : 'kickasm' kasmParams? KICKASM + : 'kickasm' kasmDirectives? KICKASM ; -kasmParams - : '(' kasmParam ( ';' kasmParam )* ')' +kasmDirectives + : '(' kasmDirective ( ',' kasmDirective )* ')' ; -kasmParam - : 'resources' kasmResourceList #kasmParamResources - | 'clobber' STRING #kasmParamClobber - | 'param' kasmParamList #kasmParamTransfer - | 'bytes' NUMBER #kasmParamBytes - | 'cycles' NUMBER #kasmParamCycles - | 'location' ( 'inline' | NUMBER ) #kasmParamLocation - ; - -kasmResourceList - : STRING ( ',' STRING )* - ; - -kasmParamList - : NAME ':' expr ( ',' NAME ':' expr )* +kasmDirective + : 'resource' STRING #kasmDirectiveResource + | 'clobber' STRING #kasmDirectiveClobber + | 'param' NAME ':' expr #kasmDirectiveTransfer + | 'bytes' NUMBER #kasmDirectiveBytes + | 'cycles' NUMBER #kasmDirectiveCycles + | 'location' ( 'inline' | expr ) #kasmDirectiveLocation ; parameterListDecl diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens index 2b802db5b..ce21ae408 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens @@ -92,15 +92,15 @@ COMMENT_BLOCK=86 '{'=6 '}'=7 'kickasm'=8 -'resources'=9 -'clobber'=10 -'param'=11 -'bytes'=12 -'cycles'=13 -'location'=14 -'inline'=15 -','=16 -':'=17 +','=9 +'resource'=10 +'clobber'=11 +'param'=12 +':'=13 +'bytes'=14 +'cycles'=15 +'location'=16 +'inline'=17 'const'=18 'extern'=19 'align'=20 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java index dc06798a4..a3d0de278 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java @@ -124,109 +124,85 @@ public class KickCBaseListener implements KickCListener { * *

The default implementation does nothing.

*/ - @Override public void enterKasmParams(KickCParser.KasmParamsContext ctx) { } + @Override public void enterKasmDirectives(KickCParser.KasmDirectivesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParams(KickCParser.KasmParamsContext ctx) { } + @Override public void exitKasmDirectives(KickCParser.KasmDirectivesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamResources(KickCParser.KasmParamResourcesContext ctx) { } + @Override public void enterKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamResources(KickCParser.KasmParamResourcesContext ctx) { } + @Override public void exitKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamClobber(KickCParser.KasmParamClobberContext ctx) { } + @Override public void enterKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamClobber(KickCParser.KasmParamClobberContext ctx) { } + @Override public void exitKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamTransfer(KickCParser.KasmParamTransferContext ctx) { } + @Override public void enterKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamTransfer(KickCParser.KasmParamTransferContext ctx) { } + @Override public void exitKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamBytes(KickCParser.KasmParamBytesContext ctx) { } + @Override public void enterKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamBytes(KickCParser.KasmParamBytesContext ctx) { } + @Override public void exitKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamCycles(KickCParser.KasmParamCyclesContext ctx) { } + @Override public void enterKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamCycles(KickCParser.KasmParamCyclesContext ctx) { } + @Override public void exitKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterKasmParamLocation(KickCParser.KasmParamLocationContext ctx) { } + @Override public void enterKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitKasmParamLocation(KickCParser.KasmParamLocationContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterKasmResourceList(KickCParser.KasmResourceListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitKasmResourceList(KickCParser.KasmResourceListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterKasmParamList(KickCParser.KasmParamListContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitKasmParamList(KickCParser.KasmParamListContext ctx) { } + @Override public void exitKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java index 760b2299e..a16db8f29 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java @@ -80,63 +80,49 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements *

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

*/ - @Override public T visitKasmParams(KickCParser.KasmParamsContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectives(KickCParser.KasmDirectivesContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

*/ - @Override public T visitKasmParamResources(KickCParser.KasmParamResourcesContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

*/ - @Override public T visitKasmParamClobber(KickCParser.KasmParamClobberContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

*/ - @Override public T visitKasmParamTransfer(KickCParser.KasmParamTransferContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

*/ - @Override public T visitKasmParamBytes(KickCParser.KasmParamBytesContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

*/ - @Override public T visitKasmParamCycles(KickCParser.KasmParamCyclesContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

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

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

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

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

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

- */ - @Override public T visitKasmParamList(KickCParser.KasmParamListContext ctx) { return visitChildren(ctx); } + @Override public T visitKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index 6b581b296..af6d91370 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -55,8 +55,8 @@ public class KickCLexer extends Lexer { private static final String[] _LITERAL_NAMES = { null, "'import'", "'='", "';'", "'('", "')'", "'{'", "'}'", "'kickasm'", - "'resources'", "'clobber'", "'param'", "'bytes'", "'cycles'", "'location'", - "'inline'", "','", "':'", "'const'", "'extern'", "'align'", "'register'", + "','", "'resource'", "'clobber'", "'param'", "':'", "'bytes'", "'cycles'", + "'location'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", @@ -132,7 +132,7 @@ public class KickCLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2X\u0373\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2X\u0372\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"+ @@ -144,10 +144,10 @@ public class KickCLexer extends Lexer { "\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\2\3\2\3\2"+ "\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3"+ - "\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\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\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\17\3\17\3\17\3\17\3\17\3\17"+ - "\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\22\3\22"+ + "\t\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13"+ + "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\17"+ + "\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\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\23\3\24\3\24\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\26\3\26\3\26\3\26\3\26"+ "\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31"+ @@ -167,21 +167,21 @@ public class KickCLexer extends Lexer { "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3"+ - "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u0294\nD\3E\3E\3E\3E\7E\u029a"+ - "\nE\fE\16E\u029d\13E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3"+ - "F\3F\3F\3F\3F\3F\3F\3F\5F\u02b7\nF\3G\3G\3G\3G\7G\u02bd\nG\fG\16G\u02c0"+ - "\13G\3G\3G\3H\3H\3H\3H\5H\u02c8\nH\3H\3H\3I\3I\3I\3I\3I\3I\3I\3I\3I\5"+ - "I\u02d5\nI\3J\3J\5J\u02d9\nJ\3K\3K\3K\5K\u02de\nK\3L\3L\3L\3L\3L\5L\u02e5"+ - "\nL\3L\7L\u02e8\nL\fL\16L\u02eb\13L\3L\3L\6L\u02ef\nL\rL\16L\u02f0\3M"+ - "\7M\u02f4\nM\fM\16M\u02f7\13M\3M\3M\6M\u02fb\nM\rM\16M\u02fc\3N\3N\3N"+ - "\3N\3N\5N\u0304\nN\3N\7N\u0307\nN\fN\16N\u030a\13N\3N\3N\6N\u030e\nN\r"+ - "N\16N\u030f\3O\3O\3O\5O\u0315\nO\3P\3P\3P\6P\u031a\nP\rP\16P\u031b\3P"+ - "\3P\6P\u0320\nP\rP\16P\u0321\5P\u0324\nP\3Q\6Q\u0327\nQ\rQ\16Q\u0328\3"+ - "R\3R\3R\3R\3R\5R\u0330\nR\3R\6R\u0333\nR\rR\16R\u0334\3S\3S\3T\3T\3U\3"+ - "U\3V\3V\7V\u033f\nV\fV\16V\u0342\13V\3W\3W\3X\3X\3Y\3Y\7Y\u034a\nY\fY"+ - "\16Y\u034d\13Y\3Y\6Y\u0350\nY\rY\16Y\u0351\3Z\6Z\u0355\nZ\rZ\16Z\u0356"+ - "\3Z\3Z\3[\3[\3[\3[\7[\u035f\n[\f[\16[\u0362\13[\3[\3[\3\\\3\\\3\\\3\\"+ - "\7\\\u036a\n\\\f\\\16\\\u036d\13\\\3\\\3\\\3\\\3\\\3\\\4\u029b\u036b\2"+ + "D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u0293\nD\3E\3E\3E\3E\7E\u0299"+ + "\nE\fE\16E\u029c\13E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3"+ + "F\3F\3F\3F\3F\3F\3F\3F\5F\u02b6\nF\3G\3G\3G\3G\7G\u02bc\nG\fG\16G\u02bf"+ + "\13G\3G\3G\3H\3H\3H\3H\5H\u02c7\nH\3H\3H\3I\3I\3I\3I\3I\3I\3I\3I\3I\5"+ + "I\u02d4\nI\3J\3J\5J\u02d8\nJ\3K\3K\3K\5K\u02dd\nK\3L\3L\3L\3L\3L\5L\u02e4"+ + "\nL\3L\7L\u02e7\nL\fL\16L\u02ea\13L\3L\3L\6L\u02ee\nL\rL\16L\u02ef\3M"+ + "\7M\u02f3\nM\fM\16M\u02f6\13M\3M\3M\6M\u02fa\nM\rM\16M\u02fb\3N\3N\3N"+ + "\3N\3N\5N\u0303\nN\3N\7N\u0306\nN\fN\16N\u0309\13N\3N\3N\6N\u030d\nN\r"+ + "N\16N\u030e\3O\3O\3O\5O\u0314\nO\3P\3P\3P\6P\u0319\nP\rP\16P\u031a\3P"+ + "\3P\6P\u031f\nP\rP\16P\u0320\5P\u0323\nP\3Q\6Q\u0326\nQ\rQ\16Q\u0327\3"+ + "R\3R\3R\3R\3R\5R\u032f\nR\3R\6R\u0332\nR\rR\16R\u0333\3S\3S\3T\3T\3U\3"+ + "U\3V\3V\7V\u033e\nV\fV\16V\u0341\13V\3W\3W\3X\3X\3Y\3Y\7Y\u0349\nY\fY"+ + "\16Y\u034c\13Y\3Y\6Y\u034f\nY\rY\16Y\u0350\3Z\6Z\u0354\nZ\rZ\16Z\u0355"+ + "\3Z\3Z\3[\3[\3[\3[\7[\u035e\n[\f[\16[\u0361\13[\3[\3[\3\\\3\\\3\\\3\\"+ + "\7\\\u0369\n\\\f\\\16\\\u036c\13\\\3\\\3\\\3\\\3\\\3\\\4\u029a\u036a\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\67m8o"+ @@ -190,7 +190,7 @@ public class KickCLexer extends Lexer { "R\u00a3S\u00a5\2\u00a7\2\u00a9\2\u00abT\u00ad\2\u00af\2\u00b1U\u00b3V"+ "\u00b5W\u00b7X\3\2\r\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHc"+ "h\5\2C\\aac|\6\2\62;C\\aac|\4\2--//\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2"+ - "\u03db\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"+ + "\u03da\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"+ @@ -207,27 +207,27 @@ public class KickCLexer extends Lexer { "\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00ab\3\2\2\2\2\u00b1"+ "\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\3\u00b9\3\2\2"+ "\2\5\u00c0\3\2\2\2\7\u00c2\3\2\2\2\t\u00c4\3\2\2\2\13\u00c6\3\2\2\2\r"+ - "\u00c8\3\2\2\2\17\u00ca\3\2\2\2\21\u00cc\3\2\2\2\23\u00d4\3\2\2\2\25\u00de"+ - "\3\2\2\2\27\u00e6\3\2\2\2\31\u00ec\3\2\2\2\33\u00f2\3\2\2\2\35\u00f9\3"+ - "\2\2\2\37\u0102\3\2\2\2!\u0109\3\2\2\2#\u010b\3\2\2\2%\u010d\3\2\2\2\'"+ - "\u0113\3\2\2\2)\u011a\3\2\2\2+\u0120\3\2\2\2-\u0129\3\2\2\2/\u012c\3\2"+ - "\2\2\61\u0131\3\2\2\2\63\u0137\3\2\2\2\65\u013a\3\2\2\2\67\u013e\3\2\2"+ - "\29\u0145\3\2\2\2;\u0149\3\2\2\2=\u014c\3\2\2\2?\u0153\3\2\2\2A\u0155"+ - "\3\2\2\2C\u0157\3\2\2\2E\u0159\3\2\2\2G\u015c\3\2\2\2I\u015f\3\2\2\2K"+ - "\u0161\3\2\2\2M\u0163\3\2\2\2O\u0165\3\2\2\2Q\u0167\3\2\2\2S\u0169\3\2"+ - "\2\2U\u016c\3\2\2\2W\u016f\3\2\2\2Y\u0171\3\2\2\2[\u0173\3\2\2\2]\u0175"+ - "\3\2\2\2_\u0177\3\2\2\2a\u017a\3\2\2\2c\u017d\3\2\2\2e\u0180\3\2\2\2g"+ - "\u0183\3\2\2\2i\u0185\3\2\2\2k\u0187\3\2\2\2m\u018a\3\2\2\2o\u018d\3\2"+ - "\2\2q\u0190\3\2\2\2s\u0193\3\2\2\2u\u0196\3\2\2\2w\u0199\3\2\2\2y\u019c"+ - "\3\2\2\2{\u01a0\3\2\2\2}\u01a4\3\2\2\2\177\u01a7\3\2\2\2\u0081\u01aa\3"+ - "\2\2\2\u0083\u01ad\3\2\2\2\u0085\u01b3\3\2\2\2\u0087\u0293\3\2\2\2\u0089"+ - "\u0295\3\2\2\2\u008b\u02b6\3\2\2\2\u008d\u02b8\3\2\2\2\u008f\u02c3\3\2"+ - "\2\2\u0091\u02d4\3\2\2\2\u0093\u02d8\3\2\2\2\u0095\u02dd\3\2\2\2\u0097"+ - "\u02e4\3\2\2\2\u0099\u02f5\3\2\2\2\u009b\u0303\3\2\2\2\u009d\u0314\3\2"+ - "\2\2\u009f\u0323\3\2\2\2\u00a1\u0326\3\2\2\2\u00a3\u032f\3\2\2\2\u00a5"+ - "\u0336\3\2\2\2\u00a7\u0338\3\2\2\2\u00a9\u033a\3\2\2\2\u00ab\u033c\3\2"+ - "\2\2\u00ad\u0343\3\2\2\2\u00af\u0345\3\2\2\2\u00b1\u0347\3\2\2\2\u00b3"+ - "\u0354\3\2\2\2\u00b5\u035a\3\2\2\2\u00b7\u0365\3\2\2\2\u00b9\u00ba\7k"+ + "\u00c8\3\2\2\2\17\u00ca\3\2\2\2\21\u00cc\3\2\2\2\23\u00d4\3\2\2\2\25\u00d6"+ + "\3\2\2\2\27\u00df\3\2\2\2\31\u00e7\3\2\2\2\33\u00ed\3\2\2\2\35\u00ef\3"+ + "\2\2\2\37\u00f5\3\2\2\2!\u00fc\3\2\2\2#\u0105\3\2\2\2%\u010c\3\2\2\2\'"+ + "\u0112\3\2\2\2)\u0119\3\2\2\2+\u011f\3\2\2\2-\u0128\3\2\2\2/\u012b\3\2"+ + "\2\2\61\u0130\3\2\2\2\63\u0136\3\2\2\2\65\u0139\3\2\2\2\67\u013d\3\2\2"+ + "\29\u0144\3\2\2\2;\u0148\3\2\2\2=\u014b\3\2\2\2?\u0152\3\2\2\2A\u0154"+ + "\3\2\2\2C\u0156\3\2\2\2E\u0158\3\2\2\2G\u015b\3\2\2\2I\u015e\3\2\2\2K"+ + "\u0160\3\2\2\2M\u0162\3\2\2\2O\u0164\3\2\2\2Q\u0166\3\2\2\2S\u0168\3\2"+ + "\2\2U\u016b\3\2\2\2W\u016e\3\2\2\2Y\u0170\3\2\2\2[\u0172\3\2\2\2]\u0174"+ + "\3\2\2\2_\u0176\3\2\2\2a\u0179\3\2\2\2c\u017c\3\2\2\2e\u017f\3\2\2\2g"+ + "\u0182\3\2\2\2i\u0184\3\2\2\2k\u0186\3\2\2\2m\u0189\3\2\2\2o\u018c\3\2"+ + "\2\2q\u018f\3\2\2\2s\u0192\3\2\2\2u\u0195\3\2\2\2w\u0198\3\2\2\2y\u019b"+ + "\3\2\2\2{\u019f\3\2\2\2}\u01a3\3\2\2\2\177\u01a6\3\2\2\2\u0081\u01a9\3"+ + "\2\2\2\u0083\u01ac\3\2\2\2\u0085\u01b2\3\2\2\2\u0087\u0292\3\2\2\2\u0089"+ + "\u0294\3\2\2\2\u008b\u02b5\3\2\2\2\u008d\u02b7\3\2\2\2\u008f\u02c2\3\2"+ + "\2\2\u0091\u02d3\3\2\2\2\u0093\u02d7\3\2\2\2\u0095\u02dc\3\2\2\2\u0097"+ + "\u02e3\3\2\2\2\u0099\u02f4\3\2\2\2\u009b\u0302\3\2\2\2\u009d\u0313\3\2"+ + "\2\2\u009f\u0322\3\2\2\2\u00a1\u0325\3\2\2\2\u00a3\u032e\3\2\2\2\u00a5"+ + "\u0335\3\2\2\2\u00a7\u0337\3\2\2\2\u00a9\u0339\3\2\2\2\u00ab\u033b\3\2"+ + "\2\2\u00ad\u0342\3\2\2\2\u00af\u0344\3\2\2\2\u00b1\u0346\3\2\2\2\u00b3"+ + "\u0353\3\2\2\2\u00b5\u0359\3\2\2\2\u00b7\u0364\3\2\2\2\u00b9\u00ba\7k"+ "\2\2\u00ba\u00bb\7o\2\2\u00bb\u00bc\7r\2\2\u00bc\u00bd\7q\2\2\u00bd\u00be"+ "\7t\2\2\u00be\u00bf\7v\2\2\u00bf\4\3\2\2\2\u00c0\u00c1\7?\2\2\u00c1\6"+ "\3\2\2\2\u00c2\u00c3\7=\2\2\u00c3\b\3\2\2\2\u00c4\u00c5\7*\2\2\u00c5\n"+ @@ -235,222 +235,222 @@ public class KickCLexer extends Lexer { "\3\2\2\2\u00ca\u00cb\7\177\2\2\u00cb\20\3\2\2\2\u00cc\u00cd\7m\2\2\u00cd"+ "\u00ce\7k\2\2\u00ce\u00cf\7e\2\2\u00cf\u00d0\7m\2\2\u00d0\u00d1\7c\2\2"+ "\u00d1\u00d2\7u\2\2\u00d2\u00d3\7o\2\2\u00d3\22\3\2\2\2\u00d4\u00d5\7"+ - "t\2\2\u00d5\u00d6\7g\2\2\u00d6\u00d7\7u\2\2\u00d7\u00d8\7q\2\2\u00d8\u00d9"+ - "\7w\2\2\u00d9\u00da\7t\2\2\u00da\u00db\7e\2\2\u00db\u00dc\7g\2\2\u00dc"+ - "\u00dd\7u\2\2\u00dd\24\3\2\2\2\u00de\u00df\7e\2\2\u00df\u00e0\7n\2\2\u00e0"+ - "\u00e1\7q\2\2\u00e1\u00e2\7d\2\2\u00e2\u00e3\7d\2\2\u00e3\u00e4\7g\2\2"+ - "\u00e4\u00e5\7t\2\2\u00e5\26\3\2\2\2\u00e6\u00e7\7r\2\2\u00e7\u00e8\7"+ - "c\2\2\u00e8\u00e9\7t\2\2\u00e9\u00ea\7c\2\2\u00ea\u00eb\7o\2\2\u00eb\30"+ - "\3\2\2\2\u00ec\u00ed\7d\2\2\u00ed\u00ee\7{\2\2\u00ee\u00ef\7v\2\2\u00ef"+ - "\u00f0\7g\2\2\u00f0\u00f1\7u\2\2\u00f1\32\3\2\2\2\u00f2\u00f3\7e\2\2\u00f3"+ - "\u00f4\7{\2\2\u00f4\u00f5\7e\2\2\u00f5\u00f6\7n\2\2\u00f6\u00f7\7g\2\2"+ - "\u00f7\u00f8\7u\2\2\u00f8\34\3\2\2\2\u00f9\u00fa\7n\2\2\u00fa\u00fb\7"+ - "q\2\2\u00fb\u00fc\7e\2\2\u00fc\u00fd\7c\2\2\u00fd\u00fe\7v\2\2\u00fe\u00ff"+ - "\7k\2\2\u00ff\u0100\7q\2\2\u0100\u0101\7p\2\2\u0101\36\3\2\2\2\u0102\u0103"+ - "\7k\2\2\u0103\u0104\7p\2\2\u0104\u0105\7n\2\2\u0105\u0106\7k\2\2\u0106"+ - "\u0107\7p\2\2\u0107\u0108\7g\2\2\u0108 \3\2\2\2\u0109\u010a\7.\2\2\u010a"+ - "\"\3\2\2\2\u010b\u010c\7<\2\2\u010c$\3\2\2\2\u010d\u010e\7e\2\2\u010e"+ - "\u010f\7q\2\2\u010f\u0110\7p\2\2\u0110\u0111\7u\2\2\u0111\u0112\7v\2\2"+ - "\u0112&\3\2\2\2\u0113\u0114\7g\2\2\u0114\u0115\7z\2\2\u0115\u0116\7v\2"+ - "\2\u0116\u0117\7g\2\2\u0117\u0118\7t\2\2\u0118\u0119\7p\2\2\u0119(\3\2"+ - "\2\2\u011a\u011b\7c\2\2\u011b\u011c\7n\2\2\u011c\u011d\7k\2\2\u011d\u011e"+ - "\7i\2\2\u011e\u011f\7p\2\2\u011f*\3\2\2\2\u0120\u0121\7t\2\2\u0121\u0122"+ - "\7g\2\2\u0122\u0123\7i\2\2\u0123\u0124\7k\2\2\u0124\u0125\7u\2\2\u0125"+ - "\u0126\7v\2\2\u0126\u0127\7g\2\2\u0127\u0128\7t\2\2\u0128,\3\2\2\2\u0129"+ - "\u012a\7k\2\2\u012a\u012b\7h\2\2\u012b.\3\2\2\2\u012c\u012d\7g\2\2\u012d"+ - "\u012e\7n\2\2\u012e\u012f\7u\2\2\u012f\u0130\7g\2\2\u0130\60\3\2\2\2\u0131"+ - "\u0132\7y\2\2\u0132\u0133\7j\2\2\u0133\u0134\7k\2\2\u0134\u0135\7n\2\2"+ - "\u0135\u0136\7g\2\2\u0136\62\3\2\2\2\u0137\u0138\7f\2\2\u0138\u0139\7"+ - "q\2\2\u0139\64\3\2\2\2\u013a\u013b\7h\2\2\u013b\u013c\7q\2\2\u013c\u013d"+ - "\7t\2\2\u013d\66\3\2\2\2\u013e\u013f\7t\2\2\u013f\u0140\7g\2\2\u0140\u0141"+ - "\7v\2\2\u0141\u0142\7w\2\2\u0142\u0143\7t\2\2\u0143\u0144\7p\2\2\u0144"+ - "8\3\2\2\2\u0145\u0146\7c\2\2\u0146\u0147\7u\2\2\u0147\u0148\7o\2\2\u0148"+ - ":\3\2\2\2\u0149\u014a\7\60\2\2\u014a\u014b\7\60\2\2\u014b<\3\2\2\2\u014c"+ - "\u014d\7u\2\2\u014d\u014e\7k\2\2\u014e\u014f\7i\2\2\u014f\u0150\7p\2\2"+ - "\u0150\u0151\7g\2\2\u0151\u0152\7f\2\2\u0152>\3\2\2\2\u0153\u0154\7,\2"+ - "\2\u0154@\3\2\2\2\u0155\u0156\7]\2\2\u0156B\3\2\2\2\u0157\u0158\7_\2\2"+ - "\u0158D\3\2\2\2\u0159\u015a\7/\2\2\u015a\u015b\7/\2\2\u015bF\3\2\2\2\u015c"+ - "\u015d\7-\2\2\u015d\u015e\7-\2\2\u015eH\3\2\2\2\u015f\u0160\7-\2\2\u0160"+ - "J\3\2\2\2\u0161\u0162\7/\2\2\u0162L\3\2\2\2\u0163\u0164\7#\2\2\u0164N"+ - "\3\2\2\2\u0165\u0166\7(\2\2\u0166P\3\2\2\2\u0167\u0168\7\u0080\2\2\u0168"+ - "R\3\2\2\2\u0169\u016a\7@\2\2\u016a\u016b\7@\2\2\u016bT\3\2\2\2\u016c\u016d"+ - "\7>\2\2\u016d\u016e\7>\2\2\u016eV\3\2\2\2\u016f\u0170\7\61\2\2\u0170X"+ - "\3\2\2\2\u0171\u0172\7\'\2\2\u0172Z\3\2\2\2\u0173\u0174\7>\2\2\u0174\\"+ - "\3\2\2\2\u0175\u0176\7@\2\2\u0176^\3\2\2\2\u0177\u0178\7?\2\2\u0178\u0179"+ - "\7?\2\2\u0179`\3\2\2\2\u017a\u017b\7#\2\2\u017b\u017c\7?\2\2\u017cb\3"+ - "\2\2\2\u017d\u017e\7>\2\2\u017e\u017f\7?\2\2\u017fd\3\2\2\2\u0180\u0181"+ - "\7@\2\2\u0181\u0182\7?\2\2\u0182f\3\2\2\2\u0183\u0184\7`\2\2\u0184h\3"+ - "\2\2\2\u0185\u0186\7~\2\2\u0186j\3\2\2\2\u0187\u0188\7(\2\2\u0188\u0189"+ - "\7(\2\2\u0189l\3\2\2\2\u018a\u018b\7~\2\2\u018b\u018c\7~\2\2\u018cn\3"+ - "\2\2\2\u018d\u018e\7-\2\2\u018e\u018f\7?\2\2\u018fp\3\2\2\2\u0190\u0191"+ - "\7/\2\2\u0191\u0192\7?\2\2\u0192r\3\2\2\2\u0193\u0194\7,\2\2\u0194\u0195"+ - "\7?\2\2\u0195t\3\2\2\2\u0196\u0197\7\61\2\2\u0197\u0198\7?\2\2\u0198v"+ - "\3\2\2\2\u0199\u019a\7\'\2\2\u019a\u019b\7?\2\2\u019bx\3\2\2\2\u019c\u019d"+ - "\7>\2\2\u019d\u019e\7>\2\2\u019e\u019f\7?\2\2\u019fz\3\2\2\2\u01a0\u01a1"+ - "\7@\2\2\u01a1\u01a2\7@\2\2\u01a2\u01a3\7?\2\2\u01a3|\3\2\2\2\u01a4\u01a5"+ - "\7(\2\2\u01a5\u01a6\7?\2\2\u01a6~\3\2\2\2\u01a7\u01a8\7~\2\2\u01a8\u01a9"+ - "\7?\2\2\u01a9\u0080\3\2\2\2\u01aa\u01ab\7`\2\2\u01ab\u01ac\7?\2\2\u01ac"+ - "\u0082\3\2\2\2\u01ad\u01ae\7\60\2\2\u01ae\u01af\7d\2\2\u01af\u01b0\7{"+ - "\2\2\u01b0\u01b1\7v\2\2\u01b1\u01b2\7g\2\2\u01b2\u0084\3\2\2\2\u01b3\u01b4"+ - "\7%\2\2\u01b4\u0086\3\2\2\2\u01b5\u01b6\7d\2\2\u01b6\u01b7\7t\2\2\u01b7"+ - "\u0294\7m\2\2\u01b8\u01b9\7q\2\2\u01b9\u01ba\7t\2\2\u01ba\u0294\7c\2\2"+ - "\u01bb\u01bc\7m\2\2\u01bc\u01bd\7k\2\2\u01bd\u0294\7n\2\2\u01be\u01bf"+ - "\7u\2\2\u01bf\u01c0\7n\2\2\u01c0\u0294\7q\2\2\u01c1\u01c2\7p\2\2\u01c2"+ - "\u01c3\7q\2\2\u01c3\u0294\7r\2\2\u01c4\u01c5\7c\2\2\u01c5\u01c6\7u\2\2"+ - "\u01c6\u0294\7n\2\2\u01c7\u01c8\7r\2\2\u01c8\u01c9\7j\2\2\u01c9\u0294"+ - "\7r\2\2\u01ca\u01cb\7c\2\2\u01cb\u01cc\7p\2\2\u01cc\u0294\7e\2\2\u01cd"+ - "\u01ce\7d\2\2\u01ce\u01cf\7r\2\2\u01cf\u0294\7n\2\2\u01d0\u01d1\7e\2\2"+ - "\u01d1\u01d2\7n\2\2\u01d2\u0294\7e\2\2\u01d3\u01d4\7l\2\2\u01d4\u01d5"+ - "\7u\2\2\u01d5\u0294\7t\2\2\u01d6\u01d7\7c\2\2\u01d7\u01d8\7p\2\2\u01d8"+ - "\u0294\7f\2\2\u01d9\u01da\7t\2\2\u01da\u01db\7n\2\2\u01db\u0294\7c\2\2"+ - "\u01dc\u01dd\7d\2\2\u01dd\u01de\7k\2\2\u01de\u0294\7v\2\2\u01df\u01e0"+ - "\7t\2\2\u01e0\u01e1\7q\2\2\u01e1\u0294\7n\2\2\u01e2\u01e3\7r\2\2\u01e3"+ - "\u01e4\7n\2\2\u01e4\u0294\7c\2\2\u01e5\u01e6\7r\2\2\u01e6\u01e7\7n\2\2"+ - "\u01e7\u0294\7r\2\2\u01e8\u01e9\7d\2\2\u01e9\u01ea\7o\2\2\u01ea\u0294"+ - "\7k\2\2\u01eb\u01ec\7u\2\2\u01ec\u01ed\7g\2\2\u01ed\u0294\7e\2\2\u01ee"+ - "\u01ef\7t\2\2\u01ef\u01f0\7v\2\2\u01f0\u0294\7k\2\2\u01f1\u01f2\7g\2\2"+ - "\u01f2\u01f3\7q\2\2\u01f3\u0294\7t\2\2\u01f4\u01f5\7u\2\2\u01f5\u01f6"+ - "\7t\2\2\u01f6\u0294\7g\2\2\u01f7\u01f8\7n\2\2\u01f8\u01f9\7u\2\2\u01f9"+ - "\u0294\7t\2\2\u01fa\u01fb\7r\2\2\u01fb\u01fc\7j\2\2\u01fc\u0294\7c\2\2"+ - "\u01fd\u01fe\7c\2\2\u01fe\u01ff\7n\2\2\u01ff\u0294\7t\2\2\u0200\u0201"+ - "\7l\2\2\u0201\u0202\7o\2\2\u0202\u0294\7r\2\2\u0203\u0204\7d\2\2\u0204"+ - "\u0205\7x\2\2\u0205\u0294\7e\2\2\u0206\u0207\7e\2\2\u0207\u0208\7n\2\2"+ - "\u0208\u0294\7k\2\2\u0209\u020a\7t\2\2\u020a\u020b\7v\2\2\u020b\u0294"+ - "\7u\2\2\u020c\u020d\7c\2\2\u020d\u020e\7f\2\2\u020e\u0294\7e\2\2\u020f"+ - "\u0210\7t\2\2\u0210\u0211\7t\2\2\u0211\u0294\7c\2\2\u0212\u0213\7d\2\2"+ - "\u0213\u0214\7x\2\2\u0214\u0294\7u\2\2\u0215\u0216\7u\2\2\u0216\u0217"+ - "\7g\2\2\u0217\u0294\7k\2\2\u0218\u0219\7u\2\2\u0219\u021a\7c\2\2\u021a"+ - "\u0294\7z\2\2\u021b\u021c\7u\2\2\u021c\u021d\7v\2\2\u021d\u0294\7{\2\2"+ - "\u021e\u021f\7u\2\2\u021f\u0220\7v\2\2\u0220\u0294\7c\2\2\u0221\u0222"+ - "\7u\2\2\u0222\u0223\7v\2\2\u0223\u0294\7z\2\2\u0224\u0225\7f\2\2\u0225"+ - "\u0226\7g\2\2\u0226\u0294\7{\2\2\u0227\u0228\7v\2\2\u0228\u0229\7z\2\2"+ - "\u0229\u0294\7c\2\2\u022a\u022b\7z\2\2\u022b\u022c\7c\2\2\u022c\u0294"+ - "\7c\2\2\u022d\u022e\7d\2\2\u022e\u022f\7e\2\2\u022f\u0294\7e\2\2\u0230"+ - "\u0231\7c\2\2\u0231\u0232\7j\2\2\u0232\u0294\7z\2\2\u0233\u0234\7v\2\2"+ - "\u0234\u0235\7{\2\2\u0235\u0294\7c\2\2\u0236\u0237\7v\2\2\u0237\u0238"+ - "\7z\2\2\u0238\u0294\7u\2\2\u0239\u023a\7v\2\2\u023a\u023b\7c\2\2\u023b"+ - "\u0294\7u\2\2\u023c\u023d\7u\2\2\u023d\u023e\7j\2\2\u023e\u0294\7{\2\2"+ - "\u023f\u0240\7u\2\2\u0240\u0241\7j\2\2\u0241\u0294\7z\2\2\u0242\u0243"+ - "\7n\2\2\u0243\u0244\7f\2\2\u0244\u0294\7{\2\2\u0245\u0246\7n\2\2\u0246"+ - "\u0247\7f\2\2\u0247\u0294\7c\2\2\u0248\u0249\7n\2\2\u0249\u024a\7f\2\2"+ - "\u024a\u0294\7z\2\2\u024b\u024c\7n\2\2\u024c\u024d\7c\2\2\u024d\u0294"+ - "\7z\2\2\u024e\u024f\7v\2\2\u024f\u0250\7c\2\2\u0250\u0294\7{\2\2\u0251"+ - "\u0252\7v\2\2\u0252\u0253\7c\2\2\u0253\u0294\7z\2\2\u0254\u0255\7d\2\2"+ - "\u0255\u0256\7e\2\2\u0256\u0294\7u\2\2\u0257\u0258\7e\2\2\u0258\u0259"+ - "\7n\2\2\u0259\u0294\7x\2\2\u025a\u025b\7v\2\2\u025b\u025c\7u\2\2\u025c"+ - "\u0294\7z\2\2\u025d\u025e\7n\2\2\u025e\u025f\7c\2\2\u025f\u0294\7u\2\2"+ - "\u0260\u0261\7e\2\2\u0261\u0262\7r\2\2\u0262\u0294\7{\2\2\u0263\u0264"+ - "\7e\2\2\u0264\u0265\7o\2\2\u0265\u0294\7r\2\2\u0266\u0267\7e\2\2\u0267"+ - "\u0268\7r\2\2\u0268\u0294\7z\2\2\u0269\u026a\7f\2\2\u026a\u026b\7e\2\2"+ - "\u026b\u0294\7r\2\2\u026c\u026d\7f\2\2\u026d\u026e\7g\2\2\u026e\u0294"+ - "\7e\2\2\u026f\u0270\7k\2\2\u0270\u0271\7p\2\2\u0271\u0294\7e\2\2\u0272"+ - "\u0273\7c\2\2\u0273\u0274\7z\2\2\u0274\u0294\7u\2\2\u0275\u0276\7d\2\2"+ - "\u0276\u0277\7p\2\2\u0277\u0294\7g\2\2\u0278\u0279\7e\2\2\u0279\u027a"+ - "\7n\2\2\u027a\u0294\7f\2\2\u027b\u027c\7u\2\2\u027c\u027d\7d\2\2\u027d"+ - "\u0294\7e\2\2\u027e\u027f\7k\2\2\u027f\u0280\7u\2\2\u0280\u0294\7e\2\2"+ - "\u0281\u0282\7k\2\2\u0282\u0283\7p\2\2\u0283\u0294\7z\2\2\u0284\u0285"+ - "\7d\2\2\u0285\u0286\7g\2\2\u0286\u0294\7s\2\2\u0287\u0288\7u\2\2\u0288"+ - "\u0289\7g\2\2\u0289\u0294\7f\2\2\u028a\u028b\7f\2\2\u028b\u028c\7g\2\2"+ - "\u028c\u0294\7z\2\2\u028d\u028e\7k\2\2\u028e\u028f\7p\2\2\u028f\u0294"+ - "\7{\2\2\u0290\u0291\7t\2\2\u0291\u0292\7q\2\2\u0292\u0294\7t\2\2\u0293"+ - "\u01b5\3\2\2\2\u0293\u01b8\3\2\2\2\u0293\u01bb\3\2\2\2\u0293\u01be\3\2"+ - "\2\2\u0293\u01c1\3\2\2\2\u0293\u01c4\3\2\2\2\u0293\u01c7\3\2\2\2\u0293"+ - "\u01ca\3\2\2\2\u0293\u01cd\3\2\2\2\u0293\u01d0\3\2\2\2\u0293\u01d3\3\2"+ - "\2\2\u0293\u01d6\3\2\2\2\u0293\u01d9\3\2\2\2\u0293\u01dc\3\2\2\2\u0293"+ - "\u01df\3\2\2\2\u0293\u01e2\3\2\2\2\u0293\u01e5\3\2\2\2\u0293\u01e8\3\2"+ - "\2\2\u0293\u01eb\3\2\2\2\u0293\u01ee\3\2\2\2\u0293\u01f1\3\2\2\2\u0293"+ - "\u01f4\3\2\2\2\u0293\u01f7\3\2\2\2\u0293\u01fa\3\2\2\2\u0293\u01fd\3\2"+ - "\2\2\u0293\u0200\3\2\2\2\u0293\u0203\3\2\2\2\u0293\u0206\3\2\2\2\u0293"+ - "\u0209\3\2\2\2\u0293\u020c\3\2\2\2\u0293\u020f\3\2\2\2\u0293\u0212\3\2"+ - "\2\2\u0293\u0215\3\2\2\2\u0293\u0218\3\2\2\2\u0293\u021b\3\2\2\2\u0293"+ - "\u021e\3\2\2\2\u0293\u0221\3\2\2\2\u0293\u0224\3\2\2\2\u0293\u0227\3\2"+ - "\2\2\u0293\u022a\3\2\2\2\u0293\u022d\3\2\2\2\u0293\u0230\3\2\2\2\u0293"+ - "\u0233\3\2\2\2\u0293\u0236\3\2\2\2\u0293\u0239\3\2\2\2\u0293\u023c\3\2"+ - "\2\2\u0293\u023f\3\2\2\2\u0293\u0242\3\2\2\2\u0293\u0245\3\2\2\2\u0293"+ - "\u0248\3\2\2\2\u0293\u024b\3\2\2\2\u0293\u024e\3\2\2\2\u0293\u0251\3\2"+ - "\2\2\u0293\u0254\3\2\2\2\u0293\u0257\3\2\2\2\u0293\u025a\3\2\2\2\u0293"+ - "\u025d\3\2\2\2\u0293\u0260\3\2\2\2\u0293\u0263\3\2\2\2\u0293\u0266\3\2"+ - "\2\2\u0293\u0269\3\2\2\2\u0293\u026c\3\2\2\2\u0293\u026f\3\2\2\2\u0293"+ - "\u0272\3\2\2\2\u0293\u0275\3\2\2\2\u0293\u0278\3\2\2\2\u0293\u027b\3\2"+ - "\2\2\u0293\u027e\3\2\2\2\u0293\u0281\3\2\2\2\u0293\u0284\3\2\2\2\u0293"+ - "\u0287\3\2\2\2\u0293\u028a\3\2\2\2\u0293\u028d\3\2\2\2\u0293\u0290\3\2"+ - "\2\2\u0294\u0088\3\2\2\2\u0295\u0296\7}\2\2\u0296\u0297\7}\2\2\u0297\u029b"+ - "\3\2\2\2\u0298\u029a\13\2\2\2\u0299\u0298\3\2\2\2\u029a\u029d\3\2\2\2"+ - "\u029b\u029c\3\2\2\2\u029b\u0299\3\2\2\2\u029c\u029e\3\2\2\2\u029d\u029b"+ - "\3\2\2\2\u029e\u029f\7\177\2\2\u029f\u02a0\7\177\2\2\u02a0\u008a\3\2\2"+ - "\2\u02a1\u02a2\7d\2\2\u02a2\u02a3\7{\2\2\u02a3\u02a4\7v\2\2\u02a4\u02b7"+ - "\7g\2\2\u02a5\u02a6\7y\2\2\u02a6\u02a7\7q\2\2\u02a7\u02a8\7t\2\2\u02a8"+ - "\u02b7\7f\2\2\u02a9\u02aa\7f\2\2\u02aa\u02ab\7y\2\2\u02ab\u02ac\7q\2\2"+ - "\u02ac\u02ad\7t\2\2\u02ad\u02b7\7f\2\2\u02ae\u02af\7d\2\2\u02af\u02b0"+ - "\7q\2\2\u02b0\u02b1\7q\2\2\u02b1\u02b7\7n\2\2\u02b2\u02b3\7x\2\2\u02b3"+ - "\u02b4\7q\2\2\u02b4\u02b5\7k\2\2\u02b5\u02b7\7f\2\2\u02b6\u02a1\3\2\2"+ - "\2\u02b6\u02a5\3\2\2\2\u02b6\u02a9\3\2\2\2\u02b6\u02ae\3\2\2\2\u02b6\u02b2"+ - "\3\2\2\2\u02b7\u008c\3\2\2\2\u02b8\u02be\7$\2\2\u02b9\u02ba\7^\2\2\u02ba"+ - "\u02bd\7$\2\2\u02bb\u02bd\n\2\2\2\u02bc\u02b9\3\2\2\2\u02bc\u02bb\3\2"+ - "\2\2\u02bd\u02c0\3\2\2\2\u02be\u02bc\3\2\2\2\u02be\u02bf\3\2\2\2\u02bf"+ - "\u02c1\3\2\2\2\u02c0\u02be\3\2\2\2\u02c1\u02c2\7$\2\2\u02c2\u008e\3\2"+ - "\2\2\u02c3\u02c7\7)\2\2\u02c4\u02c5\7^\2\2\u02c5\u02c8\7)\2\2\u02c6\u02c8"+ - "\n\3\2\2\u02c7\u02c4\3\2\2\2\u02c7\u02c6\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c9"+ - "\u02ca\7)\2\2\u02ca\u0090\3\2\2\2\u02cb\u02cc\7v\2\2\u02cc\u02cd\7t\2"+ - "\2\u02cd\u02ce\7w\2\2\u02ce\u02d5\7g\2\2\u02cf\u02d0\7h\2\2\u02d0\u02d1"+ - "\7c\2\2\u02d1\u02d2\7n\2\2\u02d2\u02d3\7u\2\2\u02d3\u02d5\7g\2\2\u02d4"+ - "\u02cb\3\2\2\2\u02d4\u02cf\3\2\2\2\u02d5\u0092\3\2\2\2\u02d6\u02d9\5\u0095"+ - "K\2\u02d7\u02d9\5\u009dO\2\u02d8\u02d6\3\2\2\2\u02d8\u02d7\3\2\2\2\u02d9"+ - "\u0094\3\2\2\2\u02da\u02de\5\u0097L\2\u02db\u02de\5\u0099M\2\u02dc\u02de"+ - "\5\u009bN\2\u02dd\u02da\3\2\2\2\u02dd\u02db\3\2\2\2\u02dd\u02dc\3\2\2"+ - "\2\u02de\u0096\3\2\2\2\u02df\u02e5\7\'\2\2\u02e0\u02e1\7\62\2\2\u02e1"+ - "\u02e5\7d\2\2\u02e2\u02e3\7\62\2\2\u02e3\u02e5\7D\2\2\u02e4\u02df\3\2"+ - "\2\2\u02e4\u02e0\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e5\u02e9\3\2\2\2\u02e6"+ - "\u02e8\5\u00a5S\2\u02e7\u02e6\3\2\2\2\u02e8\u02eb\3\2\2\2\u02e9\u02e7"+ - "\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02ec\3\2\2\2\u02eb\u02e9\3\2\2\2\u02ec"+ - "\u02ee\7\60\2\2\u02ed\u02ef\5\u00a5S\2\u02ee\u02ed\3\2\2\2\u02ef\u02f0"+ - "\3\2\2\2\u02f0\u02ee\3\2\2\2\u02f0\u02f1\3\2\2\2\u02f1\u0098\3\2\2\2\u02f2"+ - "\u02f4\5\u00a7T\2\u02f3\u02f2\3\2\2\2\u02f4\u02f7\3\2\2\2\u02f5\u02f3"+ - "\3\2\2\2\u02f5\u02f6\3\2\2\2\u02f6\u02f8\3\2\2\2\u02f7\u02f5\3\2\2\2\u02f8"+ - "\u02fa\7\60\2\2\u02f9\u02fb\5\u00a7T\2\u02fa\u02f9\3\2\2\2\u02fb\u02fc"+ - "\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fc\u02fd\3\2\2\2\u02fd\u009a\3\2\2\2\u02fe"+ - "\u0304\7&\2\2\u02ff\u0300\7\62\2\2\u0300\u0304\7z\2\2\u0301\u0302\7\62"+ - "\2\2\u0302\u0304\7Z\2\2\u0303\u02fe\3\2\2\2\u0303\u02ff\3\2\2\2\u0303"+ - "\u0301\3\2\2\2\u0304\u0308\3\2\2\2\u0305\u0307\5\u00a9U\2\u0306\u0305"+ - "\3\2\2\2\u0307\u030a\3\2\2\2\u0308\u0306\3\2\2\2\u0308\u0309\3\2\2\2\u0309"+ - "\u030b\3\2\2\2\u030a\u0308\3\2\2\2\u030b\u030d\7\60\2\2\u030c\u030e\5"+ - "\u00a9U\2\u030d\u030c\3\2\2\2\u030e\u030f\3\2\2\2\u030f\u030d\3\2\2\2"+ - "\u030f\u0310\3\2\2\2\u0310\u009c\3\2\2\2\u0311\u0315\5\u00a1Q\2\u0312"+ - "\u0315\5\u00a3R\2\u0313\u0315\5\u009fP\2\u0314\u0311\3\2\2\2\u0314\u0312"+ - "\3\2\2\2\u0314\u0313\3\2\2\2\u0315\u009e\3\2\2\2\u0316\u0317\7\62\2\2"+ - "\u0317\u0319\t\4\2\2\u0318\u031a\5\u00a5S\2\u0319\u0318\3\2\2\2\u031a"+ - "\u031b\3\2\2\2\u031b\u0319\3\2\2\2\u031b\u031c\3\2\2\2\u031c\u0324\3\2"+ - "\2\2\u031d\u031f\7\'\2\2\u031e\u0320\5\u00a5S\2\u031f\u031e\3\2\2\2\u0320"+ - "\u0321\3\2\2\2\u0321\u031f\3\2\2\2\u0321\u0322\3\2\2\2\u0322\u0324\3\2"+ - "\2\2\u0323\u0316\3\2\2\2\u0323\u031d\3\2\2\2\u0324\u00a0\3\2\2\2\u0325"+ - "\u0327\5\u00a7T\2\u0326\u0325\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u0326"+ - "\3\2\2\2\u0328\u0329\3\2\2\2\u0329\u00a2\3\2\2\2\u032a\u0330\7&\2\2\u032b"+ - "\u032c\7\62\2\2\u032c\u0330\7z\2\2\u032d\u032e\7\62\2\2\u032e\u0330\7"+ - "Z\2\2\u032f\u032a\3\2\2\2\u032f\u032b\3\2\2\2\u032f\u032d\3\2\2\2\u0330"+ - "\u0332\3\2\2\2\u0331\u0333\5\u00a9U\2\u0332\u0331\3\2\2\2\u0333\u0334"+ - "\3\2\2\2\u0334\u0332\3\2\2\2\u0334\u0335\3\2\2\2\u0335\u00a4\3\2\2\2\u0336"+ - "\u0337\t\5\2\2\u0337\u00a6\3\2\2\2\u0338\u0339\t\6\2\2\u0339\u00a8\3\2"+ - "\2\2\u033a\u033b\t\7\2\2\u033b\u00aa\3\2\2\2\u033c\u0340\5\u00adW\2\u033d"+ - "\u033f\5\u00afX\2\u033e\u033d\3\2\2\2\u033f\u0342\3\2\2\2\u0340\u033e"+ - "\3\2\2\2\u0340\u0341\3\2\2\2\u0341\u00ac\3\2\2\2\u0342\u0340\3\2\2\2\u0343"+ - "\u0344\t\b\2\2\u0344\u00ae\3\2\2\2\u0345\u0346\t\t\2\2\u0346\u00b0\3\2"+ - "\2\2\u0347\u034b\7#\2\2\u0348\u034a\5\u00afX\2\u0349\u0348\3\2\2\2\u034a"+ - "\u034d\3\2\2\2\u034b\u0349\3\2\2\2\u034b\u034c\3\2\2\2\u034c\u034f\3\2"+ - "\2\2\u034d\u034b\3\2\2\2\u034e\u0350\t\n\2\2\u034f\u034e\3\2\2\2\u0350"+ - "\u0351\3\2\2\2\u0351\u034f\3\2\2\2\u0351\u0352\3\2\2\2\u0352\u00b2\3\2"+ - "\2\2\u0353\u0355\t\13\2\2\u0354\u0353\3\2\2\2\u0355\u0356\3\2\2\2\u0356"+ - "\u0354\3\2\2\2\u0356\u0357\3\2\2\2\u0357\u0358\3\2\2\2\u0358\u0359\bZ"+ - "\2\2\u0359\u00b4\3\2\2\2\u035a\u035b\7\61\2\2\u035b\u035c\7\61\2\2\u035c"+ - "\u0360\3\2\2\2\u035d\u035f\n\f\2\2\u035e\u035d\3\2\2\2\u035f\u0362\3\2"+ - "\2\2\u0360\u035e\3\2\2\2\u0360\u0361\3\2\2\2\u0361\u0363\3\2\2\2\u0362"+ - "\u0360\3\2\2\2\u0363\u0364\b[\2\2\u0364\u00b6\3\2\2\2\u0365\u0366\7\61"+ - "\2\2\u0366\u0367\7,\2\2\u0367\u036b\3\2\2\2\u0368\u036a\13\2\2\2\u0369"+ - "\u0368\3\2\2\2\u036a\u036d\3\2\2\2\u036b\u036c\3\2\2\2\u036b\u0369\3\2"+ - "\2\2\u036c\u036e\3\2\2\2\u036d\u036b\3\2\2\2\u036e\u036f\7,\2\2\u036f"+ - "\u0370\7\61\2\2\u0370\u0371\3\2\2\2\u0371\u0372\b\\\2\2\u0372\u00b8\3"+ - "\2\2\2!\2\u0293\u029b\u02b6\u02bc\u02be\u02c7\u02d4\u02d8\u02dd\u02e4"+ - "\u02e9\u02f0\u02f5\u02fc\u0303\u0308\u030f\u0314\u031b\u0321\u0323\u0328"+ - "\u032f\u0334\u0340\u034b\u0351\u0356\u0360\u036b\3\b\2\2"; + ".\2\2\u00d5\24\3\2\2\2\u00d6\u00d7\7t\2\2\u00d7\u00d8\7g\2\2\u00d8\u00d9"+ + "\7u\2\2\u00d9\u00da\7q\2\2\u00da\u00db\7w\2\2\u00db\u00dc\7t\2\2\u00dc"+ + "\u00dd\7e\2\2\u00dd\u00de\7g\2\2\u00de\26\3\2\2\2\u00df\u00e0\7e\2\2\u00e0"+ + "\u00e1\7n\2\2\u00e1\u00e2\7q\2\2\u00e2\u00e3\7d\2\2\u00e3\u00e4\7d\2\2"+ + "\u00e4\u00e5\7g\2\2\u00e5\u00e6\7t\2\2\u00e6\30\3\2\2\2\u00e7\u00e8\7"+ + "r\2\2\u00e8\u00e9\7c\2\2\u00e9\u00ea\7t\2\2\u00ea\u00eb\7c\2\2\u00eb\u00ec"+ + "\7o\2\2\u00ec\32\3\2\2\2\u00ed\u00ee\7<\2\2\u00ee\34\3\2\2\2\u00ef\u00f0"+ + "\7d\2\2\u00f0\u00f1\7{\2\2\u00f1\u00f2\7v\2\2\u00f2\u00f3\7g\2\2\u00f3"+ + "\u00f4\7u\2\2\u00f4\36\3\2\2\2\u00f5\u00f6\7e\2\2\u00f6\u00f7\7{\2\2\u00f7"+ + "\u00f8\7e\2\2\u00f8\u00f9\7n\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb\7u\2\2"+ + "\u00fb \3\2\2\2\u00fc\u00fd\7n\2\2\u00fd\u00fe\7q\2\2\u00fe\u00ff\7e\2"+ + "\2\u00ff\u0100\7c\2\2\u0100\u0101\7v\2\2\u0101\u0102\7k\2\2\u0102\u0103"+ + "\7q\2\2\u0103\u0104\7p\2\2\u0104\"\3\2\2\2\u0105\u0106\7k\2\2\u0106\u0107"+ + "\7p\2\2\u0107\u0108\7n\2\2\u0108\u0109\7k\2\2\u0109\u010a\7p\2\2\u010a"+ + "\u010b\7g\2\2\u010b$\3\2\2\2\u010c\u010d\7e\2\2\u010d\u010e\7q\2\2\u010e"+ + "\u010f\7p\2\2\u010f\u0110\7u\2\2\u0110\u0111\7v\2\2\u0111&\3\2\2\2\u0112"+ + "\u0113\7g\2\2\u0113\u0114\7z\2\2\u0114\u0115\7v\2\2\u0115\u0116\7g\2\2"+ + "\u0116\u0117\7t\2\2\u0117\u0118\7p\2\2\u0118(\3\2\2\2\u0119\u011a\7c\2"+ + "\2\u011a\u011b\7n\2\2\u011b\u011c\7k\2\2\u011c\u011d\7i\2\2\u011d\u011e"+ + "\7p\2\2\u011e*\3\2\2\2\u011f\u0120\7t\2\2\u0120\u0121\7g\2\2\u0121\u0122"+ + "\7i\2\2\u0122\u0123\7k\2\2\u0123\u0124\7u\2\2\u0124\u0125\7v\2\2\u0125"+ + "\u0126\7g\2\2\u0126\u0127\7t\2\2\u0127,\3\2\2\2\u0128\u0129\7k\2\2\u0129"+ + "\u012a\7h\2\2\u012a.\3\2\2\2\u012b\u012c\7g\2\2\u012c\u012d\7n\2\2\u012d"+ + "\u012e\7u\2\2\u012e\u012f\7g\2\2\u012f\60\3\2\2\2\u0130\u0131\7y\2\2\u0131"+ + "\u0132\7j\2\2\u0132\u0133\7k\2\2\u0133\u0134\7n\2\2\u0134\u0135\7g\2\2"+ + "\u0135\62\3\2\2\2\u0136\u0137\7f\2\2\u0137\u0138\7q\2\2\u0138\64\3\2\2"+ + "\2\u0139\u013a\7h\2\2\u013a\u013b\7q\2\2\u013b\u013c\7t\2\2\u013c\66\3"+ + "\2\2\2\u013d\u013e\7t\2\2\u013e\u013f\7g\2\2\u013f\u0140\7v\2\2\u0140"+ + "\u0141\7w\2\2\u0141\u0142\7t\2\2\u0142\u0143\7p\2\2\u01438\3\2\2\2\u0144"+ + "\u0145\7c\2\2\u0145\u0146\7u\2\2\u0146\u0147\7o\2\2\u0147:\3\2\2\2\u0148"+ + "\u0149\7\60\2\2\u0149\u014a\7\60\2\2\u014a<\3\2\2\2\u014b\u014c\7u\2\2"+ + "\u014c\u014d\7k\2\2\u014d\u014e\7i\2\2\u014e\u014f\7p\2\2\u014f\u0150"+ + "\7g\2\2\u0150\u0151\7f\2\2\u0151>\3\2\2\2\u0152\u0153\7,\2\2\u0153@\3"+ + "\2\2\2\u0154\u0155\7]\2\2\u0155B\3\2\2\2\u0156\u0157\7_\2\2\u0157D\3\2"+ + "\2\2\u0158\u0159\7/\2\2\u0159\u015a\7/\2\2\u015aF\3\2\2\2\u015b\u015c"+ + "\7-\2\2\u015c\u015d\7-\2\2\u015dH\3\2\2\2\u015e\u015f\7-\2\2\u015fJ\3"+ + "\2\2\2\u0160\u0161\7/\2\2\u0161L\3\2\2\2\u0162\u0163\7#\2\2\u0163N\3\2"+ + "\2\2\u0164\u0165\7(\2\2\u0165P\3\2\2\2\u0166\u0167\7\u0080\2\2\u0167R"+ + "\3\2\2\2\u0168\u0169\7@\2\2\u0169\u016a\7@\2\2\u016aT\3\2\2\2\u016b\u016c"+ + "\7>\2\2\u016c\u016d\7>\2\2\u016dV\3\2\2\2\u016e\u016f\7\61\2\2\u016fX"+ + "\3\2\2\2\u0170\u0171\7\'\2\2\u0171Z\3\2\2\2\u0172\u0173\7>\2\2\u0173\\"+ + "\3\2\2\2\u0174\u0175\7@\2\2\u0175^\3\2\2\2\u0176\u0177\7?\2\2\u0177\u0178"+ + "\7?\2\2\u0178`\3\2\2\2\u0179\u017a\7#\2\2\u017a\u017b\7?\2\2\u017bb\3"+ + "\2\2\2\u017c\u017d\7>\2\2\u017d\u017e\7?\2\2\u017ed\3\2\2\2\u017f\u0180"+ + "\7@\2\2\u0180\u0181\7?\2\2\u0181f\3\2\2\2\u0182\u0183\7`\2\2\u0183h\3"+ + "\2\2\2\u0184\u0185\7~\2\2\u0185j\3\2\2\2\u0186\u0187\7(\2\2\u0187\u0188"+ + "\7(\2\2\u0188l\3\2\2\2\u0189\u018a\7~\2\2\u018a\u018b\7~\2\2\u018bn\3"+ + "\2\2\2\u018c\u018d\7-\2\2\u018d\u018e\7?\2\2\u018ep\3\2\2\2\u018f\u0190"+ + "\7/\2\2\u0190\u0191\7?\2\2\u0191r\3\2\2\2\u0192\u0193\7,\2\2\u0193\u0194"+ + "\7?\2\2\u0194t\3\2\2\2\u0195\u0196\7\61\2\2\u0196\u0197\7?\2\2\u0197v"+ + "\3\2\2\2\u0198\u0199\7\'\2\2\u0199\u019a\7?\2\2\u019ax\3\2\2\2\u019b\u019c"+ + "\7>\2\2\u019c\u019d\7>\2\2\u019d\u019e\7?\2\2\u019ez\3\2\2\2\u019f\u01a0"+ + "\7@\2\2\u01a0\u01a1\7@\2\2\u01a1\u01a2\7?\2\2\u01a2|\3\2\2\2\u01a3\u01a4"+ + "\7(\2\2\u01a4\u01a5\7?\2\2\u01a5~\3\2\2\2\u01a6\u01a7\7~\2\2\u01a7\u01a8"+ + "\7?\2\2\u01a8\u0080\3\2\2\2\u01a9\u01aa\7`\2\2\u01aa\u01ab\7?\2\2\u01ab"+ + "\u0082\3\2\2\2\u01ac\u01ad\7\60\2\2\u01ad\u01ae\7d\2\2\u01ae\u01af\7{"+ + "\2\2\u01af\u01b0\7v\2\2\u01b0\u01b1\7g\2\2\u01b1\u0084\3\2\2\2\u01b2\u01b3"+ + "\7%\2\2\u01b3\u0086\3\2\2\2\u01b4\u01b5\7d\2\2\u01b5\u01b6\7t\2\2\u01b6"+ + "\u0293\7m\2\2\u01b7\u01b8\7q\2\2\u01b8\u01b9\7t\2\2\u01b9\u0293\7c\2\2"+ + "\u01ba\u01bb\7m\2\2\u01bb\u01bc\7k\2\2\u01bc\u0293\7n\2\2\u01bd\u01be"+ + "\7u\2\2\u01be\u01bf\7n\2\2\u01bf\u0293\7q\2\2\u01c0\u01c1\7p\2\2\u01c1"+ + "\u01c2\7q\2\2\u01c2\u0293\7r\2\2\u01c3\u01c4\7c\2\2\u01c4\u01c5\7u\2\2"+ + "\u01c5\u0293\7n\2\2\u01c6\u01c7\7r\2\2\u01c7\u01c8\7j\2\2\u01c8\u0293"+ + "\7r\2\2\u01c9\u01ca\7c\2\2\u01ca\u01cb\7p\2\2\u01cb\u0293\7e\2\2\u01cc"+ + "\u01cd\7d\2\2\u01cd\u01ce\7r\2\2\u01ce\u0293\7n\2\2\u01cf\u01d0\7e\2\2"+ + "\u01d0\u01d1\7n\2\2\u01d1\u0293\7e\2\2\u01d2\u01d3\7l\2\2\u01d3\u01d4"+ + "\7u\2\2\u01d4\u0293\7t\2\2\u01d5\u01d6\7c\2\2\u01d6\u01d7\7p\2\2\u01d7"+ + "\u0293\7f\2\2\u01d8\u01d9\7t\2\2\u01d9\u01da\7n\2\2\u01da\u0293\7c\2\2"+ + "\u01db\u01dc\7d\2\2\u01dc\u01dd\7k\2\2\u01dd\u0293\7v\2\2\u01de\u01df"+ + "\7t\2\2\u01df\u01e0\7q\2\2\u01e0\u0293\7n\2\2\u01e1\u01e2\7r\2\2\u01e2"+ + "\u01e3\7n\2\2\u01e3\u0293\7c\2\2\u01e4\u01e5\7r\2\2\u01e5\u01e6\7n\2\2"+ + "\u01e6\u0293\7r\2\2\u01e7\u01e8\7d\2\2\u01e8\u01e9\7o\2\2\u01e9\u0293"+ + "\7k\2\2\u01ea\u01eb\7u\2\2\u01eb\u01ec\7g\2\2\u01ec\u0293\7e\2\2\u01ed"+ + "\u01ee\7t\2\2\u01ee\u01ef\7v\2\2\u01ef\u0293\7k\2\2\u01f0\u01f1\7g\2\2"+ + "\u01f1\u01f2\7q\2\2\u01f2\u0293\7t\2\2\u01f3\u01f4\7u\2\2\u01f4\u01f5"+ + "\7t\2\2\u01f5\u0293\7g\2\2\u01f6\u01f7\7n\2\2\u01f7\u01f8\7u\2\2\u01f8"+ + "\u0293\7t\2\2\u01f9\u01fa\7r\2\2\u01fa\u01fb\7j\2\2\u01fb\u0293\7c\2\2"+ + "\u01fc\u01fd\7c\2\2\u01fd\u01fe\7n\2\2\u01fe\u0293\7t\2\2\u01ff\u0200"+ + "\7l\2\2\u0200\u0201\7o\2\2\u0201\u0293\7r\2\2\u0202\u0203\7d\2\2\u0203"+ + "\u0204\7x\2\2\u0204\u0293\7e\2\2\u0205\u0206\7e\2\2\u0206\u0207\7n\2\2"+ + "\u0207\u0293\7k\2\2\u0208\u0209\7t\2\2\u0209\u020a\7v\2\2\u020a\u0293"+ + "\7u\2\2\u020b\u020c\7c\2\2\u020c\u020d\7f\2\2\u020d\u0293\7e\2\2\u020e"+ + "\u020f\7t\2\2\u020f\u0210\7t\2\2\u0210\u0293\7c\2\2\u0211\u0212\7d\2\2"+ + "\u0212\u0213\7x\2\2\u0213\u0293\7u\2\2\u0214\u0215\7u\2\2\u0215\u0216"+ + "\7g\2\2\u0216\u0293\7k\2\2\u0217\u0218\7u\2\2\u0218\u0219\7c\2\2\u0219"+ + "\u0293\7z\2\2\u021a\u021b\7u\2\2\u021b\u021c\7v\2\2\u021c\u0293\7{\2\2"+ + "\u021d\u021e\7u\2\2\u021e\u021f\7v\2\2\u021f\u0293\7c\2\2\u0220\u0221"+ + "\7u\2\2\u0221\u0222\7v\2\2\u0222\u0293\7z\2\2\u0223\u0224\7f\2\2\u0224"+ + "\u0225\7g\2\2\u0225\u0293\7{\2\2\u0226\u0227\7v\2\2\u0227\u0228\7z\2\2"+ + "\u0228\u0293\7c\2\2\u0229\u022a\7z\2\2\u022a\u022b\7c\2\2\u022b\u0293"+ + "\7c\2\2\u022c\u022d\7d\2\2\u022d\u022e\7e\2\2\u022e\u0293\7e\2\2\u022f"+ + "\u0230\7c\2\2\u0230\u0231\7j\2\2\u0231\u0293\7z\2\2\u0232\u0233\7v\2\2"+ + "\u0233\u0234\7{\2\2\u0234\u0293\7c\2\2\u0235\u0236\7v\2\2\u0236\u0237"+ + "\7z\2\2\u0237\u0293\7u\2\2\u0238\u0239\7v\2\2\u0239\u023a\7c\2\2\u023a"+ + "\u0293\7u\2\2\u023b\u023c\7u\2\2\u023c\u023d\7j\2\2\u023d\u0293\7{\2\2"+ + "\u023e\u023f\7u\2\2\u023f\u0240\7j\2\2\u0240\u0293\7z\2\2\u0241\u0242"+ + "\7n\2\2\u0242\u0243\7f\2\2\u0243\u0293\7{\2\2\u0244\u0245\7n\2\2\u0245"+ + "\u0246\7f\2\2\u0246\u0293\7c\2\2\u0247\u0248\7n\2\2\u0248\u0249\7f\2\2"+ + "\u0249\u0293\7z\2\2\u024a\u024b\7n\2\2\u024b\u024c\7c\2\2\u024c\u0293"+ + "\7z\2\2\u024d\u024e\7v\2\2\u024e\u024f\7c\2\2\u024f\u0293\7{\2\2\u0250"+ + "\u0251\7v\2\2\u0251\u0252\7c\2\2\u0252\u0293\7z\2\2\u0253\u0254\7d\2\2"+ + "\u0254\u0255\7e\2\2\u0255\u0293\7u\2\2\u0256\u0257\7e\2\2\u0257\u0258"+ + "\7n\2\2\u0258\u0293\7x\2\2\u0259\u025a\7v\2\2\u025a\u025b\7u\2\2\u025b"+ + "\u0293\7z\2\2\u025c\u025d\7n\2\2\u025d\u025e\7c\2\2\u025e\u0293\7u\2\2"+ + "\u025f\u0260\7e\2\2\u0260\u0261\7r\2\2\u0261\u0293\7{\2\2\u0262\u0263"+ + "\7e\2\2\u0263\u0264\7o\2\2\u0264\u0293\7r\2\2\u0265\u0266\7e\2\2\u0266"+ + "\u0267\7r\2\2\u0267\u0293\7z\2\2\u0268\u0269\7f\2\2\u0269\u026a\7e\2\2"+ + "\u026a\u0293\7r\2\2\u026b\u026c\7f\2\2\u026c\u026d\7g\2\2\u026d\u0293"+ + "\7e\2\2\u026e\u026f\7k\2\2\u026f\u0270\7p\2\2\u0270\u0293\7e\2\2\u0271"+ + "\u0272\7c\2\2\u0272\u0273\7z\2\2\u0273\u0293\7u\2\2\u0274\u0275\7d\2\2"+ + "\u0275\u0276\7p\2\2\u0276\u0293\7g\2\2\u0277\u0278\7e\2\2\u0278\u0279"+ + "\7n\2\2\u0279\u0293\7f\2\2\u027a\u027b\7u\2\2\u027b\u027c\7d\2\2\u027c"+ + "\u0293\7e\2\2\u027d\u027e\7k\2\2\u027e\u027f\7u\2\2\u027f\u0293\7e\2\2"+ + "\u0280\u0281\7k\2\2\u0281\u0282\7p\2\2\u0282\u0293\7z\2\2\u0283\u0284"+ + "\7d\2\2\u0284\u0285\7g\2\2\u0285\u0293\7s\2\2\u0286\u0287\7u\2\2\u0287"+ + "\u0288\7g\2\2\u0288\u0293\7f\2\2\u0289\u028a\7f\2\2\u028a\u028b\7g\2\2"+ + "\u028b\u0293\7z\2\2\u028c\u028d\7k\2\2\u028d\u028e\7p\2\2\u028e\u0293"+ + "\7{\2\2\u028f\u0290\7t\2\2\u0290\u0291\7q\2\2\u0291\u0293\7t\2\2\u0292"+ + "\u01b4\3\2\2\2\u0292\u01b7\3\2\2\2\u0292\u01ba\3\2\2\2\u0292\u01bd\3\2"+ + "\2\2\u0292\u01c0\3\2\2\2\u0292\u01c3\3\2\2\2\u0292\u01c6\3\2\2\2\u0292"+ + "\u01c9\3\2\2\2\u0292\u01cc\3\2\2\2\u0292\u01cf\3\2\2\2\u0292\u01d2\3\2"+ + "\2\2\u0292\u01d5\3\2\2\2\u0292\u01d8\3\2\2\2\u0292\u01db\3\2\2\2\u0292"+ + "\u01de\3\2\2\2\u0292\u01e1\3\2\2\2\u0292\u01e4\3\2\2\2\u0292\u01e7\3\2"+ + "\2\2\u0292\u01ea\3\2\2\2\u0292\u01ed\3\2\2\2\u0292\u01f0\3\2\2\2\u0292"+ + "\u01f3\3\2\2\2\u0292\u01f6\3\2\2\2\u0292\u01f9\3\2\2\2\u0292\u01fc\3\2"+ + "\2\2\u0292\u01ff\3\2\2\2\u0292\u0202\3\2\2\2\u0292\u0205\3\2\2\2\u0292"+ + "\u0208\3\2\2\2\u0292\u020b\3\2\2\2\u0292\u020e\3\2\2\2\u0292\u0211\3\2"+ + "\2\2\u0292\u0214\3\2\2\2\u0292\u0217\3\2\2\2\u0292\u021a\3\2\2\2\u0292"+ + "\u021d\3\2\2\2\u0292\u0220\3\2\2\2\u0292\u0223\3\2\2\2\u0292\u0226\3\2"+ + "\2\2\u0292\u0229\3\2\2\2\u0292\u022c\3\2\2\2\u0292\u022f\3\2\2\2\u0292"+ + "\u0232\3\2\2\2\u0292\u0235\3\2\2\2\u0292\u0238\3\2\2\2\u0292\u023b\3\2"+ + "\2\2\u0292\u023e\3\2\2\2\u0292\u0241\3\2\2\2\u0292\u0244\3\2\2\2\u0292"+ + "\u0247\3\2\2\2\u0292\u024a\3\2\2\2\u0292\u024d\3\2\2\2\u0292\u0250\3\2"+ + "\2\2\u0292\u0253\3\2\2\2\u0292\u0256\3\2\2\2\u0292\u0259\3\2\2\2\u0292"+ + "\u025c\3\2\2\2\u0292\u025f\3\2\2\2\u0292\u0262\3\2\2\2\u0292\u0265\3\2"+ + "\2\2\u0292\u0268\3\2\2\2\u0292\u026b\3\2\2\2\u0292\u026e\3\2\2\2\u0292"+ + "\u0271\3\2\2\2\u0292\u0274\3\2\2\2\u0292\u0277\3\2\2\2\u0292\u027a\3\2"+ + "\2\2\u0292\u027d\3\2\2\2\u0292\u0280\3\2\2\2\u0292\u0283\3\2\2\2\u0292"+ + "\u0286\3\2\2\2\u0292\u0289\3\2\2\2\u0292\u028c\3\2\2\2\u0292\u028f\3\2"+ + "\2\2\u0293\u0088\3\2\2\2\u0294\u0295\7}\2\2\u0295\u0296\7}\2\2\u0296\u029a"+ + "\3\2\2\2\u0297\u0299\13\2\2\2\u0298\u0297\3\2\2\2\u0299\u029c\3\2\2\2"+ + "\u029a\u029b\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u029d\3\2\2\2\u029c\u029a"+ + "\3\2\2\2\u029d\u029e\7\177\2\2\u029e\u029f\7\177\2\2\u029f\u008a\3\2\2"+ + "\2\u02a0\u02a1\7d\2\2\u02a1\u02a2\7{\2\2\u02a2\u02a3\7v\2\2\u02a3\u02b6"+ + "\7g\2\2\u02a4\u02a5\7y\2\2\u02a5\u02a6\7q\2\2\u02a6\u02a7\7t\2\2\u02a7"+ + "\u02b6\7f\2\2\u02a8\u02a9\7f\2\2\u02a9\u02aa\7y\2\2\u02aa\u02ab\7q\2\2"+ + "\u02ab\u02ac\7t\2\2\u02ac\u02b6\7f\2\2\u02ad\u02ae\7d\2\2\u02ae\u02af"+ + "\7q\2\2\u02af\u02b0\7q\2\2\u02b0\u02b6\7n\2\2\u02b1\u02b2\7x\2\2\u02b2"+ + "\u02b3\7q\2\2\u02b3\u02b4\7k\2\2\u02b4\u02b6\7f\2\2\u02b5\u02a0\3\2\2"+ + "\2\u02b5\u02a4\3\2\2\2\u02b5\u02a8\3\2\2\2\u02b5\u02ad\3\2\2\2\u02b5\u02b1"+ + "\3\2\2\2\u02b6\u008c\3\2\2\2\u02b7\u02bd\7$\2\2\u02b8\u02b9\7^\2\2\u02b9"+ + "\u02bc\7$\2\2\u02ba\u02bc\n\2\2\2\u02bb\u02b8\3\2\2\2\u02bb\u02ba\3\2"+ + "\2\2\u02bc\u02bf\3\2\2\2\u02bd\u02bb\3\2\2\2\u02bd\u02be\3\2\2\2\u02be"+ + "\u02c0\3\2\2\2\u02bf\u02bd\3\2\2\2\u02c0\u02c1\7$\2\2\u02c1\u008e\3\2"+ + "\2\2\u02c2\u02c6\7)\2\2\u02c3\u02c4\7^\2\2\u02c4\u02c7\7)\2\2\u02c5\u02c7"+ + "\n\3\2\2\u02c6\u02c3\3\2\2\2\u02c6\u02c5\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8"+ + "\u02c9\7)\2\2\u02c9\u0090\3\2\2\2\u02ca\u02cb\7v\2\2\u02cb\u02cc\7t\2"+ + "\2\u02cc\u02cd\7w\2\2\u02cd\u02d4\7g\2\2\u02ce\u02cf\7h\2\2\u02cf\u02d0"+ + "\7c\2\2\u02d0\u02d1\7n\2\2\u02d1\u02d2\7u\2\2\u02d2\u02d4\7g\2\2\u02d3"+ + "\u02ca\3\2\2\2\u02d3\u02ce\3\2\2\2\u02d4\u0092\3\2\2\2\u02d5\u02d8\5\u0095"+ + "K\2\u02d6\u02d8\5\u009dO\2\u02d7\u02d5\3\2\2\2\u02d7\u02d6\3\2\2\2\u02d8"+ + "\u0094\3\2\2\2\u02d9\u02dd\5\u0097L\2\u02da\u02dd\5\u0099M\2\u02db\u02dd"+ + "\5\u009bN\2\u02dc\u02d9\3\2\2\2\u02dc\u02da\3\2\2\2\u02dc\u02db\3\2\2"+ + "\2\u02dd\u0096\3\2\2\2\u02de\u02e4\7\'\2\2\u02df\u02e0\7\62\2\2\u02e0"+ + "\u02e4\7d\2\2\u02e1\u02e2\7\62\2\2\u02e2\u02e4\7D\2\2\u02e3\u02de\3\2"+ + "\2\2\u02e3\u02df\3\2\2\2\u02e3\u02e1\3\2\2\2\u02e4\u02e8\3\2\2\2\u02e5"+ + "\u02e7\5\u00a5S\2\u02e6\u02e5\3\2\2\2\u02e7\u02ea\3\2\2\2\u02e8\u02e6"+ + "\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02eb\3\2\2\2\u02ea\u02e8\3\2\2\2\u02eb"+ + "\u02ed\7\60\2\2\u02ec\u02ee\5\u00a5S\2\u02ed\u02ec\3\2\2\2\u02ee\u02ef"+ + "\3\2\2\2\u02ef\u02ed\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0\u0098\3\2\2\2\u02f1"+ + "\u02f3\5\u00a7T\2\u02f2\u02f1\3\2\2\2\u02f3\u02f6\3\2\2\2\u02f4\u02f2"+ + "\3\2\2\2\u02f4\u02f5\3\2\2\2\u02f5\u02f7\3\2\2\2\u02f6\u02f4\3\2\2\2\u02f7"+ + "\u02f9\7\60\2\2\u02f8\u02fa\5\u00a7T\2\u02f9\u02f8\3\2\2\2\u02fa\u02fb"+ + "\3\2\2\2\u02fb\u02f9\3\2\2\2\u02fb\u02fc\3\2\2\2\u02fc\u009a\3\2\2\2\u02fd"+ + "\u0303\7&\2\2\u02fe\u02ff\7\62\2\2\u02ff\u0303\7z\2\2\u0300\u0301\7\62"+ + "\2\2\u0301\u0303\7Z\2\2\u0302\u02fd\3\2\2\2\u0302\u02fe\3\2\2\2\u0302"+ + "\u0300\3\2\2\2\u0303\u0307\3\2\2\2\u0304\u0306\5\u00a9U\2\u0305\u0304"+ + "\3\2\2\2\u0306\u0309\3\2\2\2\u0307\u0305\3\2\2\2\u0307\u0308\3\2\2\2\u0308"+ + "\u030a\3\2\2\2\u0309\u0307\3\2\2\2\u030a\u030c\7\60\2\2\u030b\u030d\5"+ + "\u00a9U\2\u030c\u030b\3\2\2\2\u030d\u030e\3\2\2\2\u030e\u030c\3\2\2\2"+ + "\u030e\u030f\3\2\2\2\u030f\u009c\3\2\2\2\u0310\u0314\5\u00a1Q\2\u0311"+ + "\u0314\5\u00a3R\2\u0312\u0314\5\u009fP\2\u0313\u0310\3\2\2\2\u0313\u0311"+ + "\3\2\2\2\u0313\u0312\3\2\2\2\u0314\u009e\3\2\2\2\u0315\u0316\7\62\2\2"+ + "\u0316\u0318\t\4\2\2\u0317\u0319\5\u00a5S\2\u0318\u0317\3\2\2\2\u0319"+ + "\u031a\3\2\2\2\u031a\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031b\u0323\3\2"+ + "\2\2\u031c\u031e\7\'\2\2\u031d\u031f\5\u00a5S\2\u031e\u031d\3\2\2\2\u031f"+ + "\u0320\3\2\2\2\u0320\u031e\3\2\2\2\u0320\u0321\3\2\2\2\u0321\u0323\3\2"+ + "\2\2\u0322\u0315\3\2\2\2\u0322\u031c\3\2\2\2\u0323\u00a0\3\2\2\2\u0324"+ + "\u0326\5\u00a7T\2\u0325\u0324\3\2\2\2\u0326\u0327\3\2\2\2\u0327\u0325"+ + "\3\2\2\2\u0327\u0328\3\2\2\2\u0328\u00a2\3\2\2\2\u0329\u032f\7&\2\2\u032a"+ + "\u032b\7\62\2\2\u032b\u032f\7z\2\2\u032c\u032d\7\62\2\2\u032d\u032f\7"+ + "Z\2\2\u032e\u0329\3\2\2\2\u032e\u032a\3\2\2\2\u032e\u032c\3\2\2\2\u032f"+ + "\u0331\3\2\2\2\u0330\u0332\5\u00a9U\2\u0331\u0330\3\2\2\2\u0332\u0333"+ + "\3\2\2\2\u0333\u0331\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u00a4\3\2\2\2\u0335"+ + "\u0336\t\5\2\2\u0336\u00a6\3\2\2\2\u0337\u0338\t\6\2\2\u0338\u00a8\3\2"+ + "\2\2\u0339\u033a\t\7\2\2\u033a\u00aa\3\2\2\2\u033b\u033f\5\u00adW\2\u033c"+ + "\u033e\5\u00afX\2\u033d\u033c\3\2\2\2\u033e\u0341\3\2\2\2\u033f\u033d"+ + "\3\2\2\2\u033f\u0340\3\2\2\2\u0340\u00ac\3\2\2\2\u0341\u033f\3\2\2\2\u0342"+ + "\u0343\t\b\2\2\u0343\u00ae\3\2\2\2\u0344\u0345\t\t\2\2\u0345\u00b0\3\2"+ + "\2\2\u0346\u034a\7#\2\2\u0347\u0349\5\u00afX\2\u0348\u0347\3\2\2\2\u0349"+ + "\u034c\3\2\2\2\u034a\u0348\3\2\2\2\u034a\u034b\3\2\2\2\u034b\u034e\3\2"+ + "\2\2\u034c\u034a\3\2\2\2\u034d\u034f\t\n\2\2\u034e\u034d\3\2\2\2\u034f"+ + "\u0350\3\2\2\2\u0350\u034e\3\2\2\2\u0350\u0351\3\2\2\2\u0351\u00b2\3\2"+ + "\2\2\u0352\u0354\t\13\2\2\u0353\u0352\3\2\2\2\u0354\u0355\3\2\2\2\u0355"+ + "\u0353\3\2\2\2\u0355\u0356\3\2\2\2\u0356\u0357\3\2\2\2\u0357\u0358\bZ"+ + "\2\2\u0358\u00b4\3\2\2\2\u0359\u035a\7\61\2\2\u035a\u035b\7\61\2\2\u035b"+ + "\u035f\3\2\2\2\u035c\u035e\n\f\2\2\u035d\u035c\3\2\2\2\u035e\u0361\3\2"+ + "\2\2\u035f\u035d\3\2\2\2\u035f\u0360\3\2\2\2\u0360\u0362\3\2\2\2\u0361"+ + "\u035f\3\2\2\2\u0362\u0363\b[\2\2\u0363\u00b6\3\2\2\2\u0364\u0365\7\61"+ + "\2\2\u0365\u0366\7,\2\2\u0366\u036a\3\2\2\2\u0367\u0369\13\2\2\2\u0368"+ + "\u0367\3\2\2\2\u0369\u036c\3\2\2\2\u036a\u036b\3\2\2\2\u036a\u0368\3\2"+ + "\2\2\u036b\u036d\3\2\2\2\u036c\u036a\3\2\2\2\u036d\u036e\7,\2\2\u036e"+ + "\u036f\7\61\2\2\u036f\u0370\3\2\2\2\u0370\u0371\b\\\2\2\u0371\u00b8\3"+ + "\2\2\2!\2\u0292\u029a\u02b5\u02bb\u02bd\u02c6\u02d3\u02d7\u02dc\u02e3"+ + "\u02e8\u02ef\u02f4\u02fb\u0302\u0307\u030e\u0313\u031a\u0320\u0322\u0327"+ + "\u032e\u0333\u033f\u034a\u0350\u0355\u035f\u036a\3\b\2\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index 2b802db5b..ce21ae408 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -92,15 +92,15 @@ COMMENT_BLOCK=86 '{'=6 '}'=7 'kickasm'=8 -'resources'=9 -'clobber'=10 -'param'=11 -'bytes'=12 -'cycles'=13 -'location'=14 -'inline'=15 -','=16 -':'=17 +','=9 +'resource'=10 +'clobber'=11 +'param'=12 +':'=13 +'bytes'=14 +'cycles'=15 +'location'=16 +'inline'=17 'const'=18 'extern'=19 'align'=20 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java index b2ee61db3..301bfdcb6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java @@ -98,107 +98,87 @@ public interface KickCListener extends ParseTreeListener { */ void exitDeclKasm(KickCParser.DeclKasmContext ctx); /** - * Enter a parse tree produced by {@link KickCParser#kasmParams}. + * Enter a parse tree produced by {@link KickCParser#kasmDirectives}. * @param ctx the parse tree */ - void enterKasmParams(KickCParser.KasmParamsContext ctx); + void enterKasmDirectives(KickCParser.KasmDirectivesContext ctx); /** - * Exit a parse tree produced by {@link KickCParser#kasmParams}. + * Exit a parse tree produced by {@link KickCParser#kasmDirectives}. * @param ctx the parse tree */ - void exitKasmParams(KickCParser.KasmParamsContext ctx); + void exitKasmDirectives(KickCParser.KasmDirectivesContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamResources} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveResource} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamResources(KickCParser.KasmParamResourcesContext ctx); + void enterKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamResources} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveResource} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamResources(KickCParser.KasmParamResourcesContext ctx); + void exitKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamClobber} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveClobber} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamClobber(KickCParser.KasmParamClobberContext ctx); + void enterKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamClobber} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveClobber} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamClobber(KickCParser.KasmParamClobberContext ctx); + void exitKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamTransfer} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveTransfer} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamTransfer(KickCParser.KasmParamTransferContext ctx); + void enterKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamTransfer} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveTransfer} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamTransfer(KickCParser.KasmParamTransferContext ctx); + void exitKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamBytes} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveBytes} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamBytes(KickCParser.KasmParamBytesContext ctx); + void enterKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamBytes} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveBytes} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamBytes(KickCParser.KasmParamBytesContext ctx); + void exitKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamCycles} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveCycles} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamCycles(KickCParser.KasmParamCyclesContext ctx); + void enterKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamCycles} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveCycles} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamCycles(KickCParser.KasmParamCyclesContext ctx); + void exitKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx); /** - * Enter a parse tree produced by the {@code kasmParamLocation} - * labeled alternative in {@link KickCParser#kasmParam}. + * Enter a parse tree produced by the {@code kasmDirectiveLocation} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void enterKasmParamLocation(KickCParser.KasmParamLocationContext ctx); + void enterKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx); /** - * Exit a parse tree produced by the {@code kasmParamLocation} - * labeled alternative in {@link KickCParser#kasmParam}. + * Exit a parse tree produced by the {@code kasmDirectiveLocation} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree */ - void exitKasmParamLocation(KickCParser.KasmParamLocationContext ctx); - /** - * Enter a parse tree produced by {@link KickCParser#kasmResourceList}. - * @param ctx the parse tree - */ - void enterKasmResourceList(KickCParser.KasmResourceListContext ctx); - /** - * Exit a parse tree produced by {@link KickCParser#kasmResourceList}. - * @param ctx the parse tree - */ - void exitKasmResourceList(KickCParser.KasmResourceListContext ctx); - /** - * Enter a parse tree produced by {@link KickCParser#kasmParamList}. - * @param ctx the parse tree - */ - void enterKasmParamList(KickCParser.KasmParamListContext ctx); - /** - * Exit a parse tree produced by {@link KickCParser#kasmParamList}. - * @param ctx the parse tree - */ - void exitKasmParamList(KickCParser.KasmParamListContext ctx); + void exitKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx); /** * Enter a parse tree produced by {@link KickCParser#parameterListDecl}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index e8dfa59f0..2fbe144c8 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -33,25 +33,24 @@ public class KickCParser extends Parser { public static final int RULE_file = 0, RULE_asmFile = 1, RULE_importSeq = 2, RULE_importDecl = 3, RULE_declSeq = 4, RULE_decl = 5, RULE_declVariable = 6, RULE_declFunction = 7, - RULE_declKasm = 8, RULE_kasmParams = 9, RULE_kasmParam = 10, RULE_kasmResourceList = 11, - RULE_kasmParamList = 12, RULE_parameterListDecl = 13, RULE_parameterDecl = 14, - RULE_directive = 15, RULE_stmtSeq = 16, RULE_stmt = 17, RULE_forDeclaration = 18, - RULE_forIteration = 19, RULE_typeDecl = 20, RULE_expr = 21, RULE_parameterList = 22, - RULE_asmLines = 23, RULE_asmLine = 24, RULE_asmLabel = 25, RULE_asmInstruction = 26, - RULE_asmBytes = 27, RULE_asmParamMode = 28, RULE_asmExpr = 29; + RULE_declKasm = 8, RULE_kasmDirectives = 9, RULE_kasmDirective = 10, RULE_parameterListDecl = 11, + RULE_parameterDecl = 12, RULE_directive = 13, RULE_stmtSeq = 14, RULE_stmt = 15, + RULE_forDeclaration = 16, RULE_forIteration = 17, RULE_typeDecl = 18, + RULE_expr = 19, RULE_parameterList = 20, RULE_asmLines = 21, RULE_asmLine = 22, + RULE_asmLabel = 23, RULE_asmInstruction = 24, RULE_asmBytes = 25, RULE_asmParamMode = 26, + RULE_asmExpr = 27; public static final String[] ruleNames = { "file", "asmFile", "importSeq", "importDecl", "declSeq", "decl", "declVariable", - "declFunction", "declKasm", "kasmParams", "kasmParam", "kasmResourceList", - "kasmParamList", "parameterListDecl", "parameterDecl", "directive", "stmtSeq", - "stmt", "forDeclaration", "forIteration", "typeDecl", "expr", "parameterList", - "asmLines", "asmLine", "asmLabel", "asmInstruction", "asmBytes", "asmParamMode", - "asmExpr" + "declFunction", "declKasm", "kasmDirectives", "kasmDirective", "parameterListDecl", + "parameterDecl", "directive", "stmtSeq", "stmt", "forDeclaration", "forIteration", + "typeDecl", "expr", "parameterList", "asmLines", "asmLine", "asmLabel", + "asmInstruction", "asmBytes", "asmParamMode", "asmExpr" }; private static final String[] _LITERAL_NAMES = { null, "'import'", "'='", "';'", "'('", "')'", "'{'", "'}'", "'kickasm'", - "'resources'", "'clobber'", "'param'", "'bytes'", "'cycles'", "'location'", - "'inline'", "','", "':'", "'const'", "'extern'", "'align'", "'register'", + "','", "'resource'", "'clobber'", "'param'", "':'", "'bytes'", "'cycles'", + "'location'", "'inline'", "'const'", "'extern'", "'align'", "'register'", "'if'", "'else'", "'while'", "'do'", "'for'", "'return'", "'asm'", "'..'", "'signed'", "'*'", "'['", "']'", "'--'", "'++'", "'+'", "'-'", "'!'", "'&'", "'~'", "'>>'", "'<<'", "'/'", "'%'", "'<'", "'>'", "'=='", "'!='", @@ -151,11 +150,11 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(60); + setState(56); importSeq(); - setState(61); + setState(57); declSeq(); - setState(62); + setState(58); match(EOF); } } @@ -200,9 +199,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(64); + setState(60); asmLines(); - setState(65); + setState(61); match(EOF); } } @@ -250,17 +249,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(70); + setState(66); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__0) { { { - setState(67); + setState(63); importDecl(); } } - setState(72); + setState(68); _errHandler.sync(this); _la = _input.LA(1); } @@ -304,9 +303,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(73); + setState(69); match(T__0); - setState(74); + setState(70); match(STRING); } } @@ -354,20 +353,20 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(77); + setState(73); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(76); + setState(72); decl(); } } - setState(79); + setState(75); _errHandler.sync(this); _la = _input.LA(1); - } while ( ((((_la - 8)) & ~0x3f) == 0 && ((1L << (_la - 8)) & ((1L << (T__7 - 8)) | (1L << (T__14 - 8)) | (1L << (T__17 - 8)) | (1L << (T__18 - 8)) | (1L << (T__19 - 8)) | (1L << (T__20 - 8)) | (1L << (T__29 - 8)) | (1L << (SIMPLETYPE - 8)))) != 0) ); + } while ( ((((_la - 8)) & ~0x3f) == 0 && ((1L << (_la - 8)) & ((1L << (T__7 - 8)) | (1L << (T__16 - 8)) | (1L << (T__17 - 8)) | (1L << (T__18 - 8)) | (1L << (T__19 - 8)) | (1L << (T__20 - 8)) | (1L << (T__29 - 8)) | (1L << (SIMPLETYPE - 8)))) != 0) ); } } catch (RecognitionException re) { @@ -414,27 +413,27 @@ public class KickCParser extends Parser { DeclContext _localctx = new DeclContext(_ctx, getState()); enterRule(_localctx, 10, RULE_decl); try { - setState(84); + setState(80); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(81); + setState(77); declVariable(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(82); + setState(78); declFunction(); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(83); + setState(79); declKasm(); } break; @@ -491,51 +490,51 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(89); + setState(85); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(86); + setState(82); directive(); } } - setState(91); + setState(87); _errHandler.sync(this); _la = _input.LA(1); } - setState(92); + setState(88); typeDecl(0); - setState(96); + setState(92); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(93); + setState(89); directive(); } } - setState(98); + setState(94); _errHandler.sync(this); _la = _input.LA(1); } - setState(99); + setState(95); match(NAME); - setState(102); + setState(98); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__1) { { - setState(100); + setState(96); match(T__1); - setState(101); + setState(97); expr(0); } } - setState(104); + setState(100); match(T__2); } } @@ -593,65 +592,65 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(109); + setState(105); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(106); + setState(102); directive(); } } - setState(111); + setState(107); _errHandler.sync(this); _la = _input.LA(1); } - setState(112); + setState(108); typeDecl(0); - setState(116); + setState(112); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(113); + setState(109); directive(); } } - setState(118); + setState(114); _errHandler.sync(this); _la = _input.LA(1); } - setState(119); + setState(115); match(NAME); - setState(120); + setState(116); match(T__3); - setState(122); + setState(118); _errHandler.sync(this); _la = _input.LA(1); - if (((((_la - 15)) & ~0x3f) == 0 && ((1L << (_la - 15)) & ((1L << (T__14 - 15)) | (1L << (T__17 - 15)) | (1L << (T__18 - 15)) | (1L << (T__19 - 15)) | (1L << (T__20 - 15)) | (1L << (T__29 - 15)) | (1L << (SIMPLETYPE - 15)))) != 0)) { + if (((((_la - 17)) & ~0x3f) == 0 && ((1L << (_la - 17)) & ((1L << (T__16 - 17)) | (1L << (T__17 - 17)) | (1L << (T__18 - 17)) | (1L << (T__19 - 17)) | (1L << (T__20 - 17)) | (1L << (T__29 - 17)) | (1L << (SIMPLETYPE - 17)))) != 0)) { { - setState(121); + setState(117); parameterListDecl(); } } - setState(124); + setState(120); match(T__4); - setState(125); + setState(121); match(T__5); - setState(127); + setState(123); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { { - setState(126); + setState(122); stmtSeq(); } } - setState(129); + setState(125); match(T__6); } } @@ -668,8 +667,8 @@ public class KickCParser extends Parser { public static class DeclKasmContext extends ParserRuleContext { public TerminalNode KICKASM() { return getToken(KickCParser.KICKASM, 0); } - public KasmParamsContext kasmParams() { - return getRuleContext(KasmParamsContext.class,0); + public KasmDirectivesContext kasmDirectives() { + return getRuleContext(KasmDirectivesContext.class,0); } public DeclKasmContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -697,19 +696,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(131); + setState(127); match(T__7); - setState(133); + setState(129); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(132); - kasmParams(); + setState(128); + kasmDirectives(); } } - setState(135); + setState(131); match(KICKASM); } } @@ -724,60 +723,60 @@ public class KickCParser extends Parser { return _localctx; } - public static class KasmParamsContext extends ParserRuleContext { - public List kasmParam() { - return getRuleContexts(KasmParamContext.class); + public static class KasmDirectivesContext extends ParserRuleContext { + public List kasmDirective() { + return getRuleContexts(KasmDirectiveContext.class); } - public KasmParamContext kasmParam(int i) { - return getRuleContext(KasmParamContext.class,i); + public KasmDirectiveContext kasmDirective(int i) { + return getRuleContext(KasmDirectiveContext.class,i); } - public KasmParamsContext(ParserRuleContext parent, int invokingState) { + public KasmDirectivesContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_kasmParams; } + @Override public int getRuleIndex() { return RULE_kasmDirectives; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParams(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectives(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParams(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectives(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParams(this); + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectives(this); else return visitor.visitChildren(this); } } - public final KasmParamsContext kasmParams() throws RecognitionException { - KasmParamsContext _localctx = new KasmParamsContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_kasmParams); + public final KasmDirectivesContext kasmDirectives() throws RecognitionException { + KasmDirectivesContext _localctx = new KasmDirectivesContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_kasmDirectives); int _la; try { enterOuterAlt(_localctx, 1); { - setState(137); + setState(133); match(T__3); - setState(138); - kasmParam(); - setState(143); + setState(134); + kasmDirective(); + setState(139); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__2) { + while (_la==T__8) { { { - setState(139); - match(T__2); - setState(140); - kasmParam(); + setState(135); + match(T__8); + setState(136); + kasmDirective(); } } - setState(145); + setState(141); _errHandler.sync(this); _la = _input.LA(1); } - setState(146); + setState(142); match(T__4); } } @@ -792,197 +791,225 @@ public class KickCParser extends Parser { return _localctx; } - public static class KasmParamContext extends ParserRuleContext { - public KasmParamContext(ParserRuleContext parent, int invokingState) { + public static class KasmDirectiveContext extends ParserRuleContext { + public KasmDirectiveContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_kasmParam; } + @Override public int getRuleIndex() { return RULE_kasmDirective; } - public KasmParamContext() { } - public void copyFrom(KasmParamContext ctx) { + public KasmDirectiveContext() { } + public void copyFrom(KasmDirectiveContext ctx) { super.copyFrom(ctx); } } - public static class KasmParamCyclesContext extends KasmParamContext { + public static class KasmDirectiveCyclesContext extends KasmDirectiveContext { public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } - public KasmParamCyclesContext(KasmParamContext ctx) { copyFrom(ctx); } + public KasmDirectiveCyclesContext(KasmDirectiveContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamCycles(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveCycles(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamCycles(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveCycles(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamCycles(this); + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveCycles(this); else return visitor.visitChildren(this); } } - public static class KasmParamBytesContext extends KasmParamContext { + public static class KasmDirectiveBytesContext extends KasmDirectiveContext { public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } - public KasmParamBytesContext(KasmParamContext ctx) { copyFrom(ctx); } + public KasmDirectiveBytesContext(KasmDirectiveContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamBytes(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveBytes(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamBytes(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveBytes(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamBytes(this); + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveBytes(this); else return visitor.visitChildren(this); } } - public static class KasmParamLocationContext extends KasmParamContext { - public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } - public KasmParamLocationContext(KasmParamContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamLocation(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamLocation(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamLocation(this); - else return visitor.visitChildren(this); - } - } - public static class KasmParamResourcesContext extends KasmParamContext { - public KasmResourceListContext kasmResourceList() { - return getRuleContext(KasmResourceListContext.class,0); - } - public KasmParamResourcesContext(KasmParamContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamResources(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamResources(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamResources(this); - else return visitor.visitChildren(this); - } - } - public static class KasmParamClobberContext extends KasmParamContext { + public static class KasmDirectiveResourceContext extends KasmDirectiveContext { public TerminalNode STRING() { return getToken(KickCParser.STRING, 0); } - public KasmParamClobberContext(KasmParamContext ctx) { copyFrom(ctx); } + public KasmDirectiveResourceContext(KasmDirectiveContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamClobber(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveResource(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamClobber(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveResource(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamClobber(this); + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveResource(this); else return visitor.visitChildren(this); } } - public static class KasmParamTransferContext extends KasmParamContext { - public KasmParamListContext kasmParamList() { - return getRuleContext(KasmParamListContext.class,0); + public static class KasmDirectiveLocationContext extends KasmDirectiveContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } - public KasmParamTransferContext(KasmParamContext ctx) { copyFrom(ctx); } + public KasmDirectiveLocationContext(KasmDirectiveContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamTransfer(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveLocation(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamTransfer(this); + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveLocation(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamTransfer(this); + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveLocation(this); + else return visitor.visitChildren(this); + } + } + public static class KasmDirectiveClobberContext extends KasmDirectiveContext { + public TerminalNode STRING() { return getToken(KickCParser.STRING, 0); } + public KasmDirectiveClobberContext(KasmDirectiveContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveClobber(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveClobber(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveClobber(this); + else return visitor.visitChildren(this); + } + } + public static class KasmDirectiveTransferContext extends KasmDirectiveContext { + public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public KasmDirectiveTransferContext(KasmDirectiveContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmDirectiveTransfer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmDirectiveTransfer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmDirectiveTransfer(this); else return visitor.visitChildren(this); } } - public final KasmParamContext kasmParam() throws RecognitionException { - KasmParamContext _localctx = new KasmParamContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_kasmParam); - int _la; + public final KasmDirectiveContext kasmDirective() throws RecognitionException { + KasmDirectiveContext _localctx = new KasmDirectiveContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_kasmDirective); try { - setState(160); + setState(161); _errHandler.sync(this); switch (_input.LA(1)) { - case T__8: - _localctx = new KasmParamResourcesContext(_localctx); + case T__9: + _localctx = new KasmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(148); - match(T__8); - setState(149); - kasmResourceList(); - } - break; - case T__9: - _localctx = new KasmParamClobberContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(150); + setState(144); match(T__9); - setState(151); + setState(145); match(STRING); } break; case T__10: - _localctx = new KasmParamTransferContext(_localctx); - enterOuterAlt(_localctx, 3); + _localctx = new KasmDirectiveClobberContext(_localctx); + enterOuterAlt(_localctx, 2); { - setState(152); + setState(146); match(T__10); - setState(153); - kasmParamList(); + setState(147); + match(STRING); } break; case T__11: - _localctx = new KasmParamBytesContext(_localctx); + _localctx = new KasmDirectiveTransferContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(148); + match(T__11); + setState(149); + match(NAME); + setState(150); + match(T__12); + setState(151); + expr(0); + } + break; + case T__13: + _localctx = new KasmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { + setState(152); + match(T__13); + setState(153); + match(NUMBER); + } + break; + case T__14: + _localctx = new KasmDirectiveCyclesContext(_localctx); + enterOuterAlt(_localctx, 5); + { setState(154); - match(T__11); + match(T__14); setState(155); match(NUMBER); } break; - case T__12: - _localctx = new KasmParamCyclesContext(_localctx); - enterOuterAlt(_localctx, 5); - { - setState(156); - match(T__12); - setState(157); - match(NUMBER); - } - break; - case T__13: - _localctx = new KasmParamLocationContext(_localctx); + case T__15: + _localctx = new KasmDirectiveLocationContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(158); - match(T__13); + setState(156); + match(T__15); setState(159); - _la = _input.LA(1); - if ( !(_la==T__14 || _la==NUMBER) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__16: + { + setState(157); + match(T__16); + } + break; + case T__3: + case T__5: + case T__30: + case T__33: + case T__34: + case T__35: + case T__36: + case T__37: + case T__38: + case T__39: + case T__44: + case T__45: + case STRING: + case CHAR: + case BOOLEAN: + case NUMBER: + case NAME: + { + setState(158); + expr(0); + } + break; + default: + throw new NoViableAltException(this); } } break; @@ -1001,144 +1028,6 @@ public class KickCParser extends Parser { return _localctx; } - public static class KasmResourceListContext extends ParserRuleContext { - public List STRING() { return getTokens(KickCParser.STRING); } - public TerminalNode STRING(int i) { - return getToken(KickCParser.STRING, i); - } - public KasmResourceListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_kasmResourceList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmResourceList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmResourceList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmResourceList(this); - else return visitor.visitChildren(this); - } - } - - public final KasmResourceListContext kasmResourceList() throws RecognitionException { - KasmResourceListContext _localctx = new KasmResourceListContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_kasmResourceList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(162); - match(STRING); - setState(167); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__15) { - { - { - setState(163); - match(T__15); - setState(164); - match(STRING); - } - } - setState(169); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class KasmParamListContext extends ParserRuleContext { - public List NAME() { return getTokens(KickCParser.NAME); } - public TerminalNode NAME(int i) { - return getToken(KickCParser.NAME, i); - } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public KasmParamListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_kasmParamList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterKasmParamList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitKasmParamList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitKasmParamList(this); - else return visitor.visitChildren(this); - } - } - - public final KasmParamListContext kasmParamList() throws RecognitionException { - KasmParamListContext _localctx = new KasmParamListContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_kasmParamList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(170); - match(NAME); - setState(171); - match(T__16); - setState(172); - expr(0); - setState(179); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__15) { - { - { - setState(173); - match(T__15); - setState(174); - match(NAME); - setState(175); - match(T__16); - setState(176); - expr(0); - } - } - setState(181); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - public static class ParameterListDeclContext extends ParserRuleContext { public List parameterDecl() { return getRuleContexts(ParameterDeclContext.class); @@ -1167,26 +1056,26 @@ public class KickCParser extends Parser { public final ParameterListDeclContext parameterListDecl() throws RecognitionException { ParameterListDeclContext _localctx = new ParameterListDeclContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_parameterListDecl); + enterRule(_localctx, 22, RULE_parameterListDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(182); + setState(163); parameterDecl(); - setState(187); + setState(168); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__15) { + while (_la==T__8) { { { - setState(183); - match(T__15); - setState(184); + setState(164); + match(T__8); + setState(165); parameterDecl(); } } - setState(189); + setState(170); _errHandler.sync(this); _la = _input.LA(1); } @@ -1235,42 +1124,42 @@ public class KickCParser extends Parser { public final ParameterDeclContext parameterDecl() throws RecognitionException { ParameterDeclContext _localctx = new ParameterDeclContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_parameterDecl); + enterRule(_localctx, 24, RULE_parameterDecl); int _la; try { enterOuterAlt(_localctx, 1); { - setState(193); + setState(174); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(190); + setState(171); directive(); } } - setState(195); + setState(176); _errHandler.sync(this); _la = _input.LA(1); } - setState(196); + setState(177); typeDecl(0); - setState(200); + setState(181); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(197); + setState(178); directive(); } } - setState(202); + setState(183); _errHandler.sync(this); _la = _input.LA(1); } - setState(203); + setState(184); match(NAME); } } @@ -1381,16 +1270,16 @@ public class KickCParser extends Parser { public final DirectiveContext directive() throws RecognitionException { DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_directive); + enterRule(_localctx, 26, RULE_directive); try { - setState(216); + setState(197); _errHandler.sync(this); switch (_input.LA(1)) { case T__17: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(205); + setState(186); match(T__17); } break; @@ -1398,7 +1287,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExternContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(206); + setState(187); match(T__18); } break; @@ -1406,13 +1295,13 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(207); + setState(188); match(T__19); - setState(208); + setState(189); match(T__3); - setState(209); + setState(190); match(NUMBER); - setState(210); + setState(191); match(T__4); } break; @@ -1420,22 +1309,22 @@ public class KickCParser extends Parser { _localctx = new DirectiveRegisterContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(211); + setState(192); match(T__20); - setState(212); + setState(193); match(T__3); - setState(213); + setState(194); match(NAME); - setState(214); + setState(195); match(T__4); } break; - case T__14: + case T__16: _localctx = new DirectiveInlineContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(215); - match(T__14); + setState(196); + match(T__16); } break; default: @@ -1481,25 +1370,25 @@ public class KickCParser extends Parser { public final StmtSeqContext stmtSeq() throws RecognitionException { StmtSeqContext _localctx = new StmtSeqContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_stmtSeq); + enterRule(_localctx, 28, RULE_stmtSeq); int _la; try { enterOuterAlt(_localctx, 1); { - setState(219); + setState(200); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(218); + setState(199); stmt(); } } - setState(221); + setState(202); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0) ); } } catch (RecognitionException re) { @@ -1744,17 +1633,17 @@ public class KickCParser extends Parser { public final StmtContext stmt() throws RecognitionException { StmtContext _localctx = new StmtContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_stmt); + enterRule(_localctx, 30, RULE_stmt); int _la; try { - setState(284); + setState(265); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(223); + setState(204); declVariable(); } break; @@ -1762,19 +1651,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(224); + setState(205); match(T__5); - setState(226); + setState(207); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__7) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__29) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (SIMPLETYPE - 69)) | (1L << (STRING - 69)) | (1L << (CHAR - 69)) | (1L << (BOOLEAN - 69)) | (1L << (NUMBER - 69)) | (1L << (NAME - 69)))) != 0)) { { - setState(225); + setState(206); stmtSeq(); } } - setState(228); + setState(209); match(T__6); } break; @@ -1782,9 +1671,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(229); + setState(210); expr(0); - setState(230); + setState(211); match(T__2); } break; @@ -1792,24 +1681,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(232); + setState(213); match(T__21); - setState(233); + setState(214); match(T__3); - setState(234); + setState(215); expr(0); - setState(235); + setState(216); match(T__4); - setState(236); + setState(217); stmt(); - setState(239); + setState(220); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: { - setState(237); + setState(218); match(T__22); - setState(238); + setState(219); stmt(); } break; @@ -1820,25 +1709,25 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(242); + setState(223); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { - setState(241); + setState(222); directive(); } } - setState(244); + setState(225); match(T__23); - setState(245); + setState(226); match(T__3); - setState(246); + setState(227); expr(0); - setState(247); + setState(228); match(T__4); - setState(248); + setState(229); stmt(); } break; @@ -1846,29 +1735,29 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(251); + setState(232); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { - setState(250); + setState(231); directive(); } } - setState(253); + setState(234); match(T__24); - setState(254); + setState(235); stmt(); - setState(255); + setState(236); match(T__23); - setState(256); + setState(237); match(T__3); - setState(257); + setState(238); expr(0); - setState(258); + setState(239); match(T__4); - setState(259); + setState(240); match(T__2); } break; @@ -1876,35 +1765,35 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(262); + setState(243); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { - setState(261); + setState(242); directive(); } } - setState(264); + setState(245); match(T__25); - setState(265); + setState(246); match(T__3); - setState(267); + setState(248); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__29))) != 0) || _la==SIMPLETYPE || _la==NAME) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__29))) != 0) || _la==SIMPLETYPE || _la==NAME) { { - setState(266); + setState(247); forDeclaration(); } } - setState(269); + setState(250); forIteration(); - setState(270); + setState(251); match(T__4); - setState(271); + setState(252); stmt(); } break; @@ -1912,19 +1801,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(273); + setState(254); match(T__26); - setState(275); + setState(256); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { { - setState(274); + setState(255); expr(0); } } - setState(277); + setState(258); match(T__2); } break; @@ -1932,13 +1821,13 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(278); + setState(259); match(T__27); - setState(279); + setState(260); match(T__5); - setState(280); + setState(261); asmLines(); - setState(281); + setState(262); match(T__6); } break; @@ -1946,7 +1835,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(283); + setState(264); declKasm(); } break; @@ -2006,63 +1895,63 @@ public class KickCParser extends Parser { public final ForDeclarationContext forDeclaration() throws RecognitionException { ForDeclarationContext _localctx = new ForDeclarationContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_forDeclaration); + enterRule(_localctx, 32, RULE_forDeclaration); int _la; try { int _alt; _localctx = new ForDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(289); + setState(270); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(286); + setState(267); directive(); } } } - setState(291); + setState(272); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); + _alt = getInterpreter().adaptivePredict(_input,27,_ctx); } - setState(293); + setState(274); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__29 || _la==SIMPLETYPE) { { - setState(292); + setState(273); typeDecl(0); } } - setState(298); + setState(279); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20))) != 0)) { { { - setState(295); + setState(276); directive(); } } - setState(300); + setState(281); _errHandler.sync(this); _la = _input.LA(1); } - setState(301); + setState(282); match(NAME); - setState(304); + setState(285); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__1) { { - setState(302); + setState(283); match(T__1); - setState(303); + setState(284); expr(0); } } @@ -2138,38 +2027,38 @@ public class KickCParser extends Parser { public final ForIterationContext forIteration() throws RecognitionException { ForIterationContext _localctx = new ForIterationContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_forIteration); + enterRule(_localctx, 34, RULE_forIteration); try { - setState(316); + setState(297); _errHandler.sync(this); switch (_input.LA(1)) { case T__2: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(306); + setState(287); match(T__2); - setState(307); + setState(288); expr(0); - setState(308); + setState(289); match(T__2); - setState(309); + setState(290); expr(0); } break; - case T__16: + case T__12: _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(311); - match(T__16); - setState(312); + setState(292); + match(T__12); + setState(293); expr(0); { - setState(313); + setState(294); match(T__28); } - setState(314); + setState(295); expr(0); } break; @@ -2284,14 +2173,14 @@ public class KickCParser extends Parser { int _parentState = getState(); TypeDeclContext _localctx = new TypeDeclContext(_ctx, _parentState); TypeDeclContext _prevctx = _localctx; - int _startState = 40; - enterRecursionRule(_localctx, 40, RULE_typeDecl, _p); + int _startState = 36; + enterRecursionRule(_localctx, 36, RULE_typeDecl, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(322); + setState(303); _errHandler.sync(this); switch (_input.LA(1)) { case SIMPLETYPE: @@ -2300,7 +2189,7 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(319); + setState(300); match(SIMPLETYPE); } break; @@ -2309,9 +2198,9 @@ public class KickCParser extends Parser { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(320); + setState(301); match(T__29); - setState(321); + setState(302); match(SIMPLETYPE); } break; @@ -2319,24 +2208,24 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(334); + setState(315); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(332); + setState(313); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { case 1: { _localctx = new TypePtrContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(324); + setState(305); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(325); + setState(306); match(T__30); } break; @@ -2344,30 +2233,30 @@ public class KickCParser extends Parser { { _localctx = new TypeArrayContext(new TypeDeclContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeDecl); - setState(326); + setState(307); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(327); + setState(308); match(T__31); - setState(329); + setState(310); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { { - setState(328); + setState(309); expr(0); } } - setState(331); + setState(312); match(T__32); } break; } } } - setState(336); + setState(317); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } } } @@ -2735,27 +2624,27 @@ public class KickCParser extends Parser { int _parentState = getState(); ExprContext _localctx = new ExprContext(_ctx, _parentState); ExprContext _prevctx = _localctx; - int _startState = 42; - enterRecursionRule(_localctx, 42, RULE_expr, _p); + int _startState = 38; + enterRecursionRule(_localctx, 38, RULE_expr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(377); + setState(358); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { case 1: { _localctx = new ExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(338); + setState(319); match(T__3); - setState(339); + setState(320); expr(0); - setState(340); + setState(321); match(T__4); } break; @@ -2764,21 +2653,21 @@ public class KickCParser extends Parser { _localctx = new ExprCallContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(342); + setState(323); match(NAME); - setState(343); + setState(324); match(T__3); - setState(345); + setState(326); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__5) | (1L << T__30) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__44) | (1L << T__45))) != 0) || ((((_la - 70)) & ~0x3f) == 0 && ((1L << (_la - 70)) & ((1L << (STRING - 70)) | (1L << (CHAR - 70)) | (1L << (BOOLEAN - 70)) | (1L << (NUMBER - 70)) | (1L << (NAME - 70)))) != 0)) { { - setState(344); + setState(325); parameterList(); } } - setState(347); + setState(328); match(T__4); } break; @@ -2787,13 +2676,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(348); + setState(329); match(T__3); - setState(349); + setState(330); typeDecl(0); - setState(350); + setState(331); match(T__4); - setState(351); + setState(332); expr(23); } break; @@ -2802,7 +2691,7 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(353); + setState(334); _la = _input.LA(1); if ( !(_la==T__33 || _la==T__34) ) { _errHandler.recoverInline(this); @@ -2812,7 +2701,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(354); + setState(335); expr(22); } break; @@ -2821,9 +2710,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(355); + setState(336); match(T__30); - setState(356); + setState(337); expr(20); } break; @@ -2832,7 +2721,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(357); + setState(338); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39))) != 0)) ) { _errHandler.recoverInline(this); @@ -2842,7 +2731,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(358); + setState(339); expr(19); } break; @@ -2851,7 +2740,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(359); + setState(340); _la = _input.LA(1); if ( !(_la==T__44 || _la==T__45) ) { _errHandler.recoverInline(this); @@ -2861,7 +2750,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(360); + setState(341); expr(15); } break; @@ -2870,27 +2759,27 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(361); + setState(342); match(T__5); - setState(362); + setState(343); expr(0); - setState(367); + setState(348); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__15) { + while (_la==T__8) { { { - setState(363); - match(T__15); - setState(364); + setState(344); + match(T__8); + setState(345); expr(0); } } - setState(369); + setState(350); _errHandler.sync(this); _la = _input.LA(1); } - setState(370); + setState(351); match(T__6); } break; @@ -2899,7 +2788,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(372); + setState(353); match(NAME); } break; @@ -2908,7 +2797,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(373); + setState(354); match(NUMBER); } break; @@ -2917,7 +2806,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(374); + setState(355); match(STRING); } break; @@ -2926,7 +2815,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(375); + setState(356); match(CHAR); } break; @@ -2935,30 +2824,30 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(376); + setState(357); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(421); + setState(402); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(419); + setState(400); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(379); + setState(360); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(380); + setState(361); _la = _input.LA(1); if ( !(_la==T__40 || _la==T__41) ) { _errHandler.recoverInline(this); @@ -2968,7 +2857,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(381); + setState(362); expr(19); } break; @@ -2976,9 +2865,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(382); + setState(363); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(383); + setState(364); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__30) | (1L << T__42) | (1L << T__43))) != 0)) ) { _errHandler.recoverInline(this); @@ -2988,7 +2877,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(384); + setState(365); expr(18); } break; @@ -2996,9 +2885,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(385); + setState(366); if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(386); + setState(367); _la = _input.LA(1); if ( !(_la==T__35 || _la==T__36) ) { _errHandler.recoverInline(this); @@ -3008,7 +2897,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(387); + setState(368); expr(17); } break; @@ -3016,9 +2905,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(388); + setState(369); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(389); + setState(370); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49))) != 0)) ) { _errHandler.recoverInline(this); @@ -3028,7 +2917,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(390); + setState(371); expr(15); } break; @@ -3036,13 +2925,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(391); + setState(372); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(392); + setState(373); match(T__38); } - setState(393); + setState(374); expr(14); } break; @@ -3050,13 +2939,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(394); + setState(375); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(395); + setState(376); match(T__50); } - setState(396); + setState(377); expr(13); } break; @@ -3064,13 +2953,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(397); + setState(378); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(398); + setState(379); match(T__51); } - setState(399); + setState(380); expr(12); } break; @@ -3078,13 +2967,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(400); + setState(381); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(401); + setState(382); match(T__52); } - setState(402); + setState(383); expr(11); } break; @@ -3092,13 +2981,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(403); + setState(384); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); { - setState(404); + setState(385); match(T__53); } - setState(405); + setState(386); expr(10); } break; @@ -3106,11 +2995,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(406); + setState(387); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(407); + setState(388); match(T__1); - setState(408); + setState(389); expr(8); } break; @@ -3118,9 +3007,9 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(409); + setState(390); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(410); + setState(391); _la = _input.LA(1); if ( !(((((_la - 55)) & ~0x3f) == 0 && ((1L << (_la - 55)) & ((1L << (T__54 - 55)) | (1L << (T__55 - 55)) | (1L << (T__56 - 55)) | (1L << (T__57 - 55)) | (1L << (T__58 - 55)) | (1L << (T__59 - 55)) | (1L << (T__60 - 55)) | (1L << (T__61 - 55)) | (1L << (T__62 - 55)) | (1L << (T__63 - 55)))) != 0)) ) { _errHandler.recoverInline(this); @@ -3130,7 +3019,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(411); + setState(392); expr(7); } break; @@ -3138,13 +3027,13 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(412); + setState(393); if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)"); - setState(413); + setState(394); match(T__31); - setState(414); + setState(395); expr(0); - setState(415); + setState(396); match(T__32); } break; @@ -3152,9 +3041,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(417); + setState(398); if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(418); + setState(399); _la = _input.LA(1); if ( !(_la==T__33 || _la==T__34) ) { _errHandler.recoverInline(this); @@ -3169,9 +3058,9 @@ public class KickCParser extends Parser { } } } - setState(423); + setState(404); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } } } @@ -3214,26 +3103,26 @@ public class KickCParser extends Parser { public final ParameterListContext parameterList() throws RecognitionException { ParameterListContext _localctx = new ParameterListContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_parameterList); + enterRule(_localctx, 40, RULE_parameterList); int _la; try { enterOuterAlt(_localctx, 1); { - setState(424); + setState(405); expr(0); - setState(429); + setState(410); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__15) { + while (_la==T__8) { { { - setState(425); - match(T__15); - setState(426); + setState(406); + match(T__8); + setState(407); expr(0); } } - setState(431); + setState(412); _errHandler.sync(this); _la = _input.LA(1); } @@ -3278,22 +3167,22 @@ public class KickCParser extends Parser { public final AsmLinesContext asmLines() throws RecognitionException { AsmLinesContext _localctx = new AsmLinesContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_asmLines); + enterRule(_localctx, 42, RULE_asmLines); int _la; try { enterOuterAlt(_localctx, 1); { - setState(435); + setState(416); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 38)) & ~0x3f) == 0 && ((1L << (_la - 38)) & ((1L << (T__37 - 38)) | (1L << (T__64 - 38)) | (1L << (MNEMONIC - 38)) | (1L << (NAME - 38)))) != 0)) { { { - setState(432); + setState(413); asmLine(); } } - setState(437); + setState(418); _errHandler.sync(this); _la = _input.LA(1); } @@ -3341,30 +3230,30 @@ public class KickCParser extends Parser { public final AsmLineContext asmLine() throws RecognitionException { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_asmLine); + enterRule(_localctx, 44, RULE_asmLine); try { - setState(441); + setState(422); _errHandler.sync(this); switch (_input.LA(1)) { case T__37: case NAME: enterOuterAlt(_localctx, 1); { - setState(438); + setState(419); asmLabel(); } break; case MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(439); + setState(420); asmInstruction(); } break; case T__64: enterOuterAlt(_localctx, 3); { - setState(440); + setState(421); asmBytes(); } break; @@ -3431,40 +3320,40 @@ public class KickCParser extends Parser { public final AsmLabelContext asmLabel() throws RecognitionException { AsmLabelContext _localctx = new AsmLabelContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_asmLabel); + enterRule(_localctx, 46, RULE_asmLabel); int _la; try { - setState(450); + setState(431); _errHandler.sync(this); switch (_input.LA(1)) { case NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(443); + setState(424); match(NAME); - setState(444); - match(T__16); + setState(425); + match(T__12); } break; case T__37: _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(445); + setState(426); match(T__37); - setState(447); + setState(428); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(446); + setState(427); match(NAME); } } - setState(449); - match(T__16); + setState(430); + match(T__12); } break; default: @@ -3508,18 +3397,18 @@ public class KickCParser extends Parser { public final AsmInstructionContext asmInstruction() throws RecognitionException { AsmInstructionContext _localctx = new AsmInstructionContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_asmInstruction); + enterRule(_localctx, 48, RULE_asmInstruction); try { enterOuterAlt(_localctx, 1); { - setState(452); + setState(433); match(MNEMONIC); - setState(454); + setState(435); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) { case 1: { - setState(453); + setState(434); asmParamMode(); } break; @@ -3565,28 +3454,28 @@ public class KickCParser extends Parser { public final AsmBytesContext asmBytes() throws RecognitionException { AsmBytesContext _localctx = new AsmBytesContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_asmBytes); + enterRule(_localctx, 50, RULE_asmBytes); int _la; try { enterOuterAlt(_localctx, 1); { - setState(456); + setState(437); match(T__64); - setState(457); + setState(438); asmExpr(0); - setState(462); + setState(443); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__15) { + while (_la==T__8) { { { - setState(458); - match(T__15); - setState(459); + setState(439); + match(T__8); + setState(440); asmExpr(0); } } - setState(464); + setState(445); _errHandler.sync(this); _la = _input.LA(1); } @@ -3734,16 +3623,16 @@ public class KickCParser extends Parser { public final AsmParamModeContext asmParamMode() throws RecognitionException { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_asmParamMode); + enterRule(_localctx, 52, RULE_asmParamMode); try { - setState(488); + setState(469); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,49,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(465); + setState(446); asmExpr(0); } break; @@ -3751,9 +3640,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(466); + setState(447); match(T__65); - setState(467); + setState(448); asmExpr(0); } break; @@ -3761,11 +3650,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(468); + setState(449); asmExpr(0); - setState(469); - match(T__15); - setState(470); + setState(450); + match(T__8); + setState(451); match(NAME); } break; @@ -3773,15 +3662,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(472); + setState(453); match(T__3); - setState(473); + setState(454); asmExpr(0); - setState(474); + setState(455); match(T__4); - setState(475); - match(T__15); - setState(476); + setState(456); + match(T__8); + setState(457); match(NAME); } break; @@ -3789,15 +3678,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(478); + setState(459); match(T__3); - setState(479); + setState(460); asmExpr(0); - setState(480); - match(T__15); - setState(481); + setState(461); + match(T__8); + setState(462); match(NAME); - setState(482); + setState(463); match(T__4); } break; @@ -3805,11 +3694,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(484); + setState(465); match(T__3); - setState(485); + setState(466); asmExpr(0); - setState(486); + setState(467); match(T__4); } break; @@ -3992,14 +3881,14 @@ public class KickCParser extends Parser { int _parentState = getState(); AsmExprContext _localctx = new AsmExprContext(_ctx, _parentState); AsmExprContext _prevctx = _localctx; - int _startState = 58; - enterRecursionRule(_localctx, 58, RULE_asmExpr, _p); + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_asmExpr, _p); int _la; try { int _alt; enterOuterAlt(_localctx, 1); { - setState(504); + setState(485); _errHandler.sync(this); switch (_input.LA(1)) { case T__31: @@ -4008,11 +3897,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(491); + setState(472); match(T__31); - setState(492); + setState(473); asmExpr(0); - setState(493); + setState(474); match(T__32); } break; @@ -4024,7 +3913,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(495); + setState(476); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__35) | (1L << T__36) | (1L << T__44) | (1L << T__45))) != 0)) ) { _errHandler.recoverInline(this); @@ -4034,7 +3923,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(496); + setState(477); asmExpr(8); } break; @@ -4043,7 +3932,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(497); + setState(478); match(NAME); } break; @@ -4052,7 +3941,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(498); + setState(479); match(ASMREL); } break; @@ -4061,11 +3950,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(499); + setState(480); match(T__5); - setState(500); + setState(481); match(NAME); - setState(501); + setState(482); match(T__6); } break; @@ -4074,7 +3963,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(502); + setState(483); match(NUMBER); } break; @@ -4083,7 +3972,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(503); + setState(484); match(CHAR); } break; @@ -4091,24 +3980,24 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(517); + setState(498); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(515); + setState(496); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(506); + setState(487); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(507); + setState(488); _la = _input.LA(1); if ( !(_la==T__40 || _la==T__41) ) { _errHandler.recoverInline(this); @@ -4118,7 +4007,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(508); + setState(489); asmExpr(10); } break; @@ -4126,9 +4015,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(509); + setState(490); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(510); + setState(491); _la = _input.LA(1); if ( !(_la==T__30 || _la==T__42) ) { _errHandler.recoverInline(this); @@ -4138,7 +4027,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(511); + setState(492); asmExpr(8); } break; @@ -4146,9 +4035,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(512); + setState(493); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(513); + setState(494); _la = _input.LA(1); if ( !(_la==T__35 || _la==T__36) ) { _errHandler.recoverInline(this); @@ -4158,16 +4047,16 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(514); + setState(495); asmExpr(7); } break; } } } - setState(519); + setState(500); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); } } } @@ -4184,11 +4073,11 @@ public class KickCParser extends Parser { public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 20: + case 18: return typeDecl_sempred((TypeDeclContext)_localctx, predIndex); - case 21: + case 19: return expr_sempred((ExprContext)_localctx, predIndex); - case 29: + case 27: return asmExpr_sempred((AsmExprContext)_localctx, predIndex); } return true; @@ -4246,209 +4135,201 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3X\u020b\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3X\u01f8\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\3\2\3\2\3"+ - "\2\3\2\3\3\3\3\3\3\3\4\7\4G\n\4\f\4\16\4J\13\4\3\5\3\5\3\5\3\6\6\6P\n"+ - "\6\r\6\16\6Q\3\7\3\7\3\7\5\7W\n\7\3\b\7\bZ\n\b\f\b\16\b]\13\b\3\b\3\b"+ - "\7\ba\n\b\f\b\16\bd\13\b\3\b\3\b\3\b\5\bi\n\b\3\b\3\b\3\t\7\tn\n\t\f\t"+ - "\16\tq\13\t\3\t\3\t\7\tu\n\t\f\t\16\tx\13\t\3\t\3\t\3\t\5\t}\n\t\3\t\3"+ - "\t\3\t\5\t\u0082\n\t\3\t\3\t\3\n\3\n\5\n\u0088\n\n\3\n\3\n\3\13\3\13\3"+ - "\13\3\13\7\13\u0090\n\13\f\13\16\13\u0093\13\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\5\f\u00a3\n\f\3\r\3\r\3\r\7\r\u00a8"+ - "\n\r\f\r\16\r\u00ab\13\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\7\16\u00b4"+ - "\n\16\f\16\16\16\u00b7\13\16\3\17\3\17\3\17\7\17\u00bc\n\17\f\17\16\17"+ - "\u00bf\13\17\3\20\7\20\u00c2\n\20\f\20\16\20\u00c5\13\20\3\20\3\20\7\20"+ - "\u00c9\n\20\f\20\16\20\u00cc\13\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00db\n\21\3\22\6\22\u00de\n\22\r"+ - "\22\16\22\u00df\3\23\3\23\3\23\5\23\u00e5\n\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00f2\n\23\3\23\5\23\u00f5\n\23\3"+ - "\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00fe\n\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\3\23\3\23\5\23\u0109\n\23\3\23\3\23\3\23\5\23\u010e\n"+ - "\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u0116\n\23\3\23\3\23\3\23\3\23"+ - "\3\23\3\23\3\23\5\23\u011f\n\23\3\24\7\24\u0122\n\24\f\24\16\24\u0125"+ - "\13\24\3\24\5\24\u0128\n\24\3\24\7\24\u012b\n\24\f\24\16\24\u012e\13\24"+ - "\3\24\3\24\3\24\5\24\u0133\n\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\5\25\u013f\n\25\3\26\3\26\3\26\3\26\5\26\u0145\n\26\3\26\3"+ - "\26\3\26\3\26\3\26\5\26\u014c\n\26\3\26\7\26\u014f\n\26\f\26\16\26\u0152"+ - "\13\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u015c\n\27\3\27\3"+ - "\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3"+ - "\27\3\27\3\27\7\27\u0170\n\27\f\27\16\27\u0173\13\27\3\27\3\27\3\27\3"+ - "\27\3\27\3\27\3\27\5\27\u017c\n\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\7\27\u01a6\n\27\f\27\16\27\u01a9\13\27\3\30"+ - "\3\30\3\30\7\30\u01ae\n\30\f\30\16\30\u01b1\13\30\3\31\7\31\u01b4\n\31"+ - "\f\31\16\31\u01b7\13\31\3\32\3\32\3\32\5\32\u01bc\n\32\3\33\3\33\3\33"+ - "\3\33\5\33\u01c2\n\33\3\33\5\33\u01c5\n\33\3\34\3\34\5\34\u01c9\n\34\3"+ - "\35\3\35\3\35\3\35\7\35\u01cf\n\35\f\35\16\35\u01d2\13\35\3\36\3\36\3"+ - "\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3"+ - "\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u01eb\n\36\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01fb\n\37\3\37"+ - "\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0206\n\37\f\37\16\37\u0209"+ - "\13\37\3\37\2\5*,< \2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60"+ - "\62\64\668:<\2\r\4\2\21\21KK\3\2$%\3\2&*\3\2/\60\3\2+,\4\2!!-.\3\2&\'"+ - "\3\2/\64\3\29B\4\2&\'/\60\4\2!!--\2\u0252\2>\3\2\2\2\4B\3\2\2\2\6H\3\2"+ - "\2\2\bK\3\2\2\2\nO\3\2\2\2\fV\3\2\2\2\16[\3\2\2\2\20o\3\2\2\2\22\u0085"+ - "\3\2\2\2\24\u008b\3\2\2\2\26\u00a2\3\2\2\2\30\u00a4\3\2\2\2\32\u00ac\3"+ - "\2\2\2\34\u00b8\3\2\2\2\36\u00c3\3\2\2\2 \u00da\3\2\2\2\"\u00dd\3\2\2"+ - "\2$\u011e\3\2\2\2&\u0123\3\2\2\2(\u013e\3\2\2\2*\u0144\3\2\2\2,\u017b"+ - "\3\2\2\2.\u01aa\3\2\2\2\60\u01b5\3\2\2\2\62\u01bb\3\2\2\2\64\u01c4\3\2"+ - "\2\2\66\u01c6\3\2\2\28\u01ca\3\2\2\2:\u01ea\3\2\2\2<\u01fa\3\2\2\2>?\5"+ - "\6\4\2?@\5\n\6\2@A\7\2\2\3A\3\3\2\2\2BC\5\60\31\2CD\7\2\2\3D\5\3\2\2\2"+ - "EG\5\b\5\2FE\3\2\2\2GJ\3\2\2\2HF\3\2\2\2HI\3\2\2\2I\7\3\2\2\2JH\3\2\2"+ - "\2KL\7\3\2\2LM\7H\2\2M\t\3\2\2\2NP\5\f\7\2ON\3\2\2\2PQ\3\2\2\2QO\3\2\2"+ - "\2QR\3\2\2\2R\13\3\2\2\2SW\5\16\b\2TW\5\20\t\2UW\5\22\n\2VS\3\2\2\2VT"+ - "\3\2\2\2VU\3\2\2\2W\r\3\2\2\2XZ\5 \21\2YX\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2"+ - "[\\\3\2\2\2\\^\3\2\2\2][\3\2\2\2^b\5*\26\2_a\5 \21\2`_\3\2\2\2ad\3\2\2"+ - "\2b`\3\2\2\2bc\3\2\2\2ce\3\2\2\2db\3\2\2\2eh\7T\2\2fg\7\4\2\2gi\5,\27"+ - "\2hf\3\2\2\2hi\3\2\2\2ij\3\2\2\2jk\7\5\2\2k\17\3\2\2\2ln\5 \21\2ml\3\2"+ - "\2\2nq\3\2\2\2om\3\2\2\2op\3\2\2\2pr\3\2\2\2qo\3\2\2\2rv\5*\26\2su\5 "+ - "\21\2ts\3\2\2\2ux\3\2\2\2vt\3\2\2\2vw\3\2\2\2wy\3\2\2\2xv\3\2\2\2yz\7"+ - "T\2\2z|\7\6\2\2{}\5\34\17\2|{\3\2\2\2|}\3\2\2\2}~\3\2\2\2~\177\7\7\2\2"+ - "\177\u0081\7\b\2\2\u0080\u0082\5\"\22\2\u0081\u0080\3\2\2\2\u0081\u0082"+ - "\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7\t\2\2\u0084\21\3\2\2\2\u0085"+ - "\u0087\7\n\2\2\u0086\u0088\5\24\13\2\u0087\u0086\3\2\2\2\u0087\u0088\3"+ - "\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a\7F\2\2\u008a\23\3\2\2\2\u008b\u008c"+ - "\7\6\2\2\u008c\u0091\5\26\f\2\u008d\u008e\7\5\2\2\u008e\u0090\5\26\f\2"+ - "\u008f\u008d\3\2\2\2\u0090\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0091\u0092"+ - "\3\2\2\2\u0092\u0094\3\2\2\2\u0093\u0091\3\2\2\2\u0094\u0095\7\7\2\2\u0095"+ - "\25\3\2\2\2\u0096\u0097\7\13\2\2\u0097\u00a3\5\30\r\2\u0098\u0099\7\f"+ - "\2\2\u0099\u00a3\7H\2\2\u009a\u009b\7\r\2\2\u009b\u00a3\5\32\16\2\u009c"+ - "\u009d\7\16\2\2\u009d\u00a3\7K\2\2\u009e\u009f\7\17\2\2\u009f\u00a3\7"+ - "K\2\2\u00a0\u00a1\7\20\2\2\u00a1\u00a3\t\2\2\2\u00a2\u0096\3\2\2\2\u00a2"+ - "\u0098\3\2\2\2\u00a2\u009a\3\2\2\2\u00a2\u009c\3\2\2\2\u00a2\u009e\3\2"+ - "\2\2\u00a2\u00a0\3\2\2\2\u00a3\27\3\2\2\2\u00a4\u00a9\7H\2\2\u00a5\u00a6"+ - "\7\22\2\2\u00a6\u00a8\7H\2\2\u00a7\u00a5\3\2\2\2\u00a8\u00ab\3\2\2\2\u00a9"+ - "\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\31\3\2\2\2\u00ab\u00a9\3\2\2"+ - "\2\u00ac\u00ad\7T\2\2\u00ad\u00ae\7\23\2\2\u00ae\u00b5\5,\27\2\u00af\u00b0"+ - "\7\22\2\2\u00b0\u00b1\7T\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b4\5,\27\2"+ - "\u00b3\u00af\3\2\2\2\u00b4\u00b7\3\2\2\2\u00b5\u00b3\3\2\2\2\u00b5\u00b6"+ - "\3\2\2\2\u00b6\33\3\2\2\2\u00b7\u00b5\3\2\2\2\u00b8\u00bd\5\36\20\2\u00b9"+ - "\u00ba\7\22\2\2\u00ba\u00bc\5\36\20\2\u00bb\u00b9\3\2\2\2\u00bc\u00bf"+ - "\3\2\2\2\u00bd\u00bb\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\35\3\2\2\2\u00bf"+ - "\u00bd\3\2\2\2\u00c0\u00c2\5 \21\2\u00c1\u00c0\3\2\2\2\u00c2\u00c5\3\2"+ - "\2\2\u00c3\u00c1\3\2\2\2\u00c3\u00c4\3\2\2\2\u00c4\u00c6\3\2\2\2\u00c5"+ - "\u00c3\3\2\2\2\u00c6\u00ca\5*\26\2\u00c7\u00c9\5 \21\2\u00c8\u00c7\3\2"+ - "\2\2\u00c9\u00cc\3\2\2\2\u00ca\u00c8\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb"+ - "\u00cd\3\2\2\2\u00cc\u00ca\3\2\2\2\u00cd\u00ce\7T\2\2\u00ce\37\3\2\2\2"+ - "\u00cf\u00db\7\24\2\2\u00d0\u00db\7\25\2\2\u00d1\u00d2\7\26\2\2\u00d2"+ - "\u00d3\7\6\2\2\u00d3\u00d4\7K\2\2\u00d4\u00db\7\7\2\2\u00d5\u00d6\7\27"+ - "\2\2\u00d6\u00d7\7\6\2\2\u00d7\u00d8\7T\2\2\u00d8\u00db\7\7\2\2\u00d9"+ - "\u00db\7\21\2\2\u00da\u00cf\3\2\2\2\u00da\u00d0\3\2\2\2\u00da\u00d1\3"+ - "\2\2\2\u00da\u00d5\3\2\2\2\u00da\u00d9\3\2\2\2\u00db!\3\2\2\2\u00dc\u00de"+ - "\5$\23\2\u00dd\u00dc\3\2\2\2\u00de\u00df\3\2\2\2\u00df\u00dd\3\2\2\2\u00df"+ - "\u00e0\3\2\2\2\u00e0#\3\2\2\2\u00e1\u011f\5\16\b\2\u00e2\u00e4\7\b\2\2"+ - "\u00e3\u00e5\5\"\22\2\u00e4\u00e3\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00e6"+ - "\3\2\2\2\u00e6\u011f\7\t\2\2\u00e7\u00e8\5,\27\2\u00e8\u00e9\7\5\2\2\u00e9"+ - "\u011f\3\2\2\2\u00ea\u00eb\7\30\2\2\u00eb\u00ec\7\6\2\2\u00ec\u00ed\5"+ - ",\27\2\u00ed\u00ee\7\7\2\2\u00ee\u00f1\5$\23\2\u00ef\u00f0\7\31\2\2\u00f0"+ - "\u00f2\5$\23\2\u00f1\u00ef\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u011f\3\2"+ - "\2\2\u00f3\u00f5\5 \21\2\u00f4\u00f3\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5"+ - "\u00f6\3\2\2\2\u00f6\u00f7\7\32\2\2\u00f7\u00f8\7\6\2\2\u00f8\u00f9\5"+ - ",\27\2\u00f9\u00fa\7\7\2\2\u00fa\u00fb\5$\23\2\u00fb\u011f\3\2\2\2\u00fc"+ - "\u00fe\5 \21\2\u00fd\u00fc\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\u00ff\3\2"+ - "\2\2\u00ff\u0100\7\33\2\2\u0100\u0101\5$\23\2\u0101\u0102\7\32\2\2\u0102"+ - "\u0103\7\6\2\2\u0103\u0104\5,\27\2\u0104\u0105\7\7\2\2\u0105\u0106\7\5"+ - "\2\2\u0106\u011f\3\2\2\2\u0107\u0109\5 \21\2\u0108\u0107\3\2\2\2\u0108"+ - "\u0109\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u010b\7\34\2\2\u010b\u010d\7"+ - "\6\2\2\u010c\u010e\5&\24\2\u010d\u010c\3\2\2\2\u010d\u010e\3\2\2\2\u010e"+ - "\u010f\3\2\2\2\u010f\u0110\5(\25\2\u0110\u0111\7\7\2\2\u0111\u0112\5$"+ - "\23\2\u0112\u011f\3\2\2\2\u0113\u0115\7\35\2\2\u0114\u0116\5,\27\2\u0115"+ - "\u0114\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u011f\7\5"+ - "\2\2\u0118\u0119\7\36\2\2\u0119\u011a\7\b\2\2\u011a\u011b\5\60\31\2\u011b"+ - "\u011c\7\t\2\2\u011c\u011f\3\2\2\2\u011d\u011f\5\22\n\2\u011e\u00e1\3"+ - "\2\2\2\u011e\u00e2\3\2\2\2\u011e\u00e7\3\2\2\2\u011e\u00ea\3\2\2\2\u011e"+ - "\u00f4\3\2\2\2\u011e\u00fd\3\2\2\2\u011e\u0108\3\2\2\2\u011e\u0113\3\2"+ - "\2\2\u011e\u0118\3\2\2\2\u011e\u011d\3\2\2\2\u011f%\3\2\2\2\u0120\u0122"+ - "\5 \21\2\u0121\u0120\3\2\2\2\u0122\u0125\3\2\2\2\u0123\u0121\3\2\2\2\u0123"+ - "\u0124\3\2\2\2\u0124\u0127\3\2\2\2\u0125\u0123\3\2\2\2\u0126\u0128\5*"+ - "\26\2\u0127\u0126\3\2\2\2\u0127\u0128\3\2\2\2\u0128\u012c\3\2\2\2\u0129"+ - "\u012b\5 \21\2\u012a\u0129\3\2\2\2\u012b\u012e\3\2\2\2\u012c\u012a\3\2"+ - "\2\2\u012c\u012d\3\2\2\2\u012d\u012f\3\2\2\2\u012e\u012c\3\2\2\2\u012f"+ - "\u0132\7T\2\2\u0130\u0131\7\4\2\2\u0131\u0133\5,\27\2\u0132\u0130\3\2"+ - "\2\2\u0132\u0133\3\2\2\2\u0133\'\3\2\2\2\u0134\u0135\7\5\2\2\u0135\u0136"+ - "\5,\27\2\u0136\u0137\7\5\2\2\u0137\u0138\5,\27\2\u0138\u013f\3\2\2\2\u0139"+ - "\u013a\7\23\2\2\u013a\u013b\5,\27\2\u013b\u013c\7\37\2\2\u013c\u013d\5"+ - ",\27\2\u013d\u013f\3\2\2\2\u013e\u0134\3\2\2\2\u013e\u0139\3\2\2\2\u013f"+ - ")\3\2\2\2\u0140\u0141\b\26\1\2\u0141\u0145\7G\2\2\u0142\u0143\7 \2\2\u0143"+ - "\u0145\7G\2\2\u0144\u0140\3\2\2\2\u0144\u0142\3\2\2\2\u0145\u0150\3\2"+ - "\2\2\u0146\u0147\f\4\2\2\u0147\u014f\7!\2\2\u0148\u0149\f\3\2\2\u0149"+ - "\u014b\7\"\2\2\u014a\u014c\5,\27\2\u014b\u014a\3\2\2\2\u014b\u014c\3\2"+ - "\2\2\u014c\u014d\3\2\2\2\u014d\u014f\7#\2\2\u014e\u0146\3\2\2\2\u014e"+ - "\u0148\3\2\2\2\u014f\u0152\3\2\2\2\u0150\u014e\3\2\2\2\u0150\u0151\3\2"+ - "\2\2\u0151+\3\2\2\2\u0152\u0150\3\2\2\2\u0153\u0154\b\27\1\2\u0154\u0155"+ - "\7\6\2\2\u0155\u0156\5,\27\2\u0156\u0157\7\7\2\2\u0157\u017c\3\2\2\2\u0158"+ - "\u0159\7T\2\2\u0159\u015b\7\6\2\2\u015a\u015c\5.\30\2\u015b\u015a\3\2"+ - "\2\2\u015b\u015c\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u017c\7\7\2\2\u015e"+ - "\u015f\7\6\2\2\u015f\u0160\5*\26\2\u0160\u0161\7\7\2\2\u0161\u0162\5,"+ - "\27\31\u0162\u017c\3\2\2\2\u0163\u0164\t\3\2\2\u0164\u017c\5,\27\30\u0165"+ - "\u0166\7!\2\2\u0166\u017c\5,\27\26\u0167\u0168\t\4\2\2\u0168\u017c\5,"+ - "\27\25\u0169\u016a\t\5\2\2\u016a\u017c\5,\27\21\u016b\u016c\7\b\2\2\u016c"+ - "\u0171\5,\27\2\u016d\u016e\7\22\2\2\u016e\u0170\5,\27\2\u016f\u016d\3"+ - "\2\2\2\u0170\u0173\3\2\2\2\u0171\u016f\3\2\2\2\u0171\u0172\3\2\2\2\u0172"+ - "\u0174\3\2\2\2\u0173\u0171\3\2\2\2\u0174\u0175\7\t\2\2\u0175\u017c\3\2"+ - "\2\2\u0176\u017c\7T\2\2\u0177\u017c\7K\2\2\u0178\u017c\7H\2\2\u0179\u017c"+ - "\7I\2\2\u017a\u017c\7J\2\2\u017b\u0153\3\2\2\2\u017b\u0158\3\2\2\2\u017b"+ - "\u015e\3\2\2\2\u017b\u0163\3\2\2\2\u017b\u0165\3\2\2\2\u017b\u0167\3\2"+ - "\2\2\u017b\u0169\3\2\2\2\u017b\u016b\3\2\2\2\u017b\u0176\3\2\2\2\u017b"+ - "\u0177\3\2\2\2\u017b\u0178\3\2\2\2\u017b\u0179\3\2\2\2\u017b\u017a\3\2"+ - "\2\2\u017c\u01a7\3\2\2\2\u017d\u017e\f\24\2\2\u017e\u017f\t\6\2\2\u017f"+ - "\u01a6\5,\27\25\u0180\u0181\f\23\2\2\u0181\u0182\t\7\2\2\u0182\u01a6\5"+ - ",\27\24\u0183\u0184\f\22\2\2\u0184\u0185\t\b\2\2\u0185\u01a6\5,\27\23"+ - "\u0186\u0187\f\20\2\2\u0187\u0188\t\t\2\2\u0188\u01a6\5,\27\21\u0189\u018a"+ - "\f\17\2\2\u018a\u018b\7)\2\2\u018b\u01a6\5,\27\20\u018c\u018d\f\16\2\2"+ - "\u018d\u018e\7\65\2\2\u018e\u01a6\5,\27\17\u018f\u0190\f\r\2\2\u0190\u0191"+ - "\7\66\2\2\u0191\u01a6\5,\27\16\u0192\u0193\f\f\2\2\u0193\u0194\7\67\2"+ - "\2\u0194\u01a6\5,\27\r\u0195\u0196\f\13\2\2\u0196\u0197\78\2\2\u0197\u01a6"+ - "\5,\27\f\u0198\u0199\f\n\2\2\u0199\u019a\7\4\2\2\u019a\u01a6\5,\27\n\u019b"+ - "\u019c\f\t\2\2\u019c\u019d\t\n\2\2\u019d\u01a6\5,\27\t\u019e\u019f\f\32"+ - "\2\2\u019f\u01a0\7\"\2\2\u01a0\u01a1\5,\27\2\u01a1\u01a2\7#\2\2\u01a2"+ - "\u01a6\3\2\2\2\u01a3\u01a4\f\27\2\2\u01a4\u01a6\t\3\2\2\u01a5\u017d\3"+ - "\2\2\2\u01a5\u0180\3\2\2\2\u01a5\u0183\3\2\2\2\u01a5\u0186\3\2\2\2\u01a5"+ - "\u0189\3\2\2\2\u01a5\u018c\3\2\2\2\u01a5\u018f\3\2\2\2\u01a5\u0192\3\2"+ - "\2\2\u01a5\u0195\3\2\2\2\u01a5\u0198\3\2\2\2\u01a5\u019b\3\2\2\2\u01a5"+ - "\u019e\3\2\2\2\u01a5\u01a3\3\2\2\2\u01a6\u01a9\3\2\2\2\u01a7\u01a5\3\2"+ - "\2\2\u01a7\u01a8\3\2\2\2\u01a8-\3\2\2\2\u01a9\u01a7\3\2\2\2\u01aa\u01af"+ - "\5,\27\2\u01ab\u01ac\7\22\2\2\u01ac\u01ae\5,\27\2\u01ad\u01ab\3\2\2\2"+ - "\u01ae\u01b1\3\2\2\2\u01af\u01ad\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0/\3"+ - "\2\2\2\u01b1\u01af\3\2\2\2\u01b2\u01b4\5\62\32\2\u01b3\u01b2\3\2\2\2\u01b4"+ - "\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\61\3\2\2"+ - "\2\u01b7\u01b5\3\2\2\2\u01b8\u01bc\5\64\33\2\u01b9\u01bc\5\66\34\2\u01ba"+ - "\u01bc\58\35\2\u01bb\u01b8\3\2\2\2\u01bb\u01b9\3\2\2\2\u01bb\u01ba\3\2"+ - "\2\2\u01bc\63\3\2\2\2\u01bd\u01be\7T\2\2\u01be\u01c5\7\23\2\2\u01bf\u01c1"+ - "\7(\2\2\u01c0\u01c2\7T\2\2\u01c1\u01c0\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2"+ - "\u01c3\3\2\2\2\u01c3\u01c5\7\23\2\2\u01c4\u01bd\3\2\2\2\u01c4\u01bf\3"+ - "\2\2\2\u01c5\65\3\2\2\2\u01c6\u01c8\7E\2\2\u01c7\u01c9\5:\36\2\u01c8\u01c7"+ - "\3\2\2\2\u01c8\u01c9\3\2\2\2\u01c9\67\3\2\2\2\u01ca\u01cb\7C\2\2\u01cb"+ - "\u01d0\5<\37\2\u01cc\u01cd\7\22\2\2\u01cd\u01cf\5<\37\2\u01ce\u01cc\3"+ - "\2\2\2\u01cf\u01d2\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1"+ - "9\3\2\2\2\u01d2\u01d0\3\2\2\2\u01d3\u01eb\5<\37\2\u01d4\u01d5\7D\2\2\u01d5"+ - "\u01eb\5<\37\2\u01d6\u01d7\5<\37\2\u01d7\u01d8\7\22\2\2\u01d8\u01d9\7"+ - "T\2\2\u01d9\u01eb\3\2\2\2\u01da\u01db\7\6\2\2\u01db\u01dc\5<\37\2\u01dc"+ - "\u01dd\7\7\2\2\u01dd\u01de\7\22\2\2\u01de\u01df\7T\2\2\u01df\u01eb\3\2"+ - "\2\2\u01e0\u01e1\7\6\2\2\u01e1\u01e2\5<\37\2\u01e2\u01e3\7\22\2\2\u01e3"+ - "\u01e4\7T\2\2\u01e4\u01e5\7\7\2\2\u01e5\u01eb\3\2\2\2\u01e6\u01e7\7\6"+ - "\2\2\u01e7\u01e8\5<\37\2\u01e8\u01e9\7\7\2\2\u01e9\u01eb\3\2\2\2\u01ea"+ - "\u01d3\3\2\2\2\u01ea\u01d4\3\2\2\2\u01ea\u01d6\3\2\2\2\u01ea\u01da\3\2"+ - "\2\2\u01ea\u01e0\3\2\2\2\u01ea\u01e6\3\2\2\2\u01eb;\3\2\2\2\u01ec\u01ed"+ - "\b\37\1\2\u01ed\u01ee\7\"\2\2\u01ee\u01ef\5<\37\2\u01ef\u01f0\7#\2\2\u01f0"+ - "\u01fb\3\2\2\2\u01f1\u01f2\t\13\2\2\u01f2\u01fb\5<\37\n\u01f3\u01fb\7"+ - "T\2\2\u01f4\u01fb\7U\2\2\u01f5\u01f6\7\b\2\2\u01f6\u01f7\7T\2\2\u01f7"+ - "\u01fb\7\t\2\2\u01f8\u01fb\7K\2\2\u01f9\u01fb\7I\2\2\u01fa\u01ec\3\2\2"+ - "\2\u01fa\u01f1\3\2\2\2\u01fa\u01f3\3\2\2\2\u01fa\u01f4\3\2\2\2\u01fa\u01f5"+ - "\3\2\2\2\u01fa\u01f8\3\2\2\2\u01fa\u01f9\3\2\2\2\u01fb\u0207\3\2\2\2\u01fc"+ - "\u01fd\f\13\2\2\u01fd\u01fe\t\6\2\2\u01fe\u0206\5<\37\f\u01ff\u0200\f"+ - "\t\2\2\u0200\u0201\t\f\2\2\u0201\u0206\5<\37\n\u0202\u0203\f\b\2\2\u0203"+ - "\u0204\t\b\2\2\u0204\u0206\5<\37\t\u0205\u01fc\3\2\2\2\u0205\u01ff\3\2"+ - "\2\2\u0205\u0202\3\2\2\2\u0206\u0209\3\2\2\2\u0207\u0205\3\2\2\2\u0207"+ - "\u0208\3\2\2\2\u0208=\3\2\2\2\u0209\u0207\3\2\2\2\67HQV[bhov|\u0081\u0087"+ - "\u0091\u00a2\u00a9\u00b5\u00bd\u00c3\u00ca\u00da\u00df\u00e4\u00f1\u00f4"+ - "\u00fd\u0108\u010d\u0115\u011e\u0123\u0127\u012c\u0132\u013e\u0144\u014b"+ - "\u014e\u0150\u015b\u0171\u017b\u01a5\u01a7\u01af\u01b5\u01bb\u01c1\u01c4"+ - "\u01c8\u01d0\u01ea\u01fa\u0205\u0207"; + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3"+ + "\4\7\4C\n\4\f\4\16\4F\13\4\3\5\3\5\3\5\3\6\6\6L\n\6\r\6\16\6M\3\7\3\7"+ + "\3\7\5\7S\n\7\3\b\7\bV\n\b\f\b\16\bY\13\b\3\b\3\b\7\b]\n\b\f\b\16\b`\13"+ + "\b\3\b\3\b\3\b\5\be\n\b\3\b\3\b\3\t\7\tj\n\t\f\t\16\tm\13\t\3\t\3\t\7"+ + "\tq\n\t\f\t\16\tt\13\t\3\t\3\t\3\t\5\ty\n\t\3\t\3\t\3\t\5\t~\n\t\3\t\3"+ + "\t\3\n\3\n\5\n\u0084\n\n\3\n\3\n\3\13\3\13\3\13\3\13\7\13\u008c\n\13\f"+ + "\13\16\13\u008f\13\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\f\3\f\3\f\5\f\u00a2\n\f\5\f\u00a4\n\f\3\r\3\r\3\r\7\r\u00a9"+ + "\n\r\f\r\16\r\u00ac\13\r\3\16\7\16\u00af\n\16\f\16\16\16\u00b2\13\16\3"+ + "\16\3\16\7\16\u00b6\n\16\f\16\16\16\u00b9\13\16\3\16\3\16\3\17\3\17\3"+ + "\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u00c8\n\17\3\20\6\20"+ + "\u00cb\n\20\r\20\16\20\u00cc\3\21\3\21\3\21\5\21\u00d2\n\21\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00df\n\21\3\21\5\21"+ + "\u00e2\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00eb\n\21\3\21\3"+ + "\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00f6\n\21\3\21\3\21\3\21"+ + "\5\21\u00fb\n\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u0103\n\21\3\21\3"+ + "\21\3\21\3\21\3\21\3\21\3\21\5\21\u010c\n\21\3\22\7\22\u010f\n\22\f\22"+ + "\16\22\u0112\13\22\3\22\5\22\u0115\n\22\3\22\7\22\u0118\n\22\f\22\16\22"+ + "\u011b\13\22\3\22\3\22\3\22\5\22\u0120\n\22\3\23\3\23\3\23\3\23\3\23\3"+ + "\23\3\23\3\23\3\23\3\23\5\23\u012c\n\23\3\24\3\24\3\24\3\24\5\24\u0132"+ + "\n\24\3\24\3\24\3\24\3\24\3\24\5\24\u0139\n\24\3\24\7\24\u013c\n\24\f"+ + "\24\16\24\u013f\13\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u0149"+ + "\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\7\25\u015d\n\25\f\25\16\25\u0160\13\25\3\25"+ + "\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u0169\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\3\25\7\25\u0193\n\25\f\25\16\25\u0196\13"+ + "\25\3\26\3\26\3\26\7\26\u019b\n\26\f\26\16\26\u019e\13\26\3\27\7\27\u01a1"+ + "\n\27\f\27\16\27\u01a4\13\27\3\30\3\30\3\30\5\30\u01a9\n\30\3\31\3\31"+ + "\3\31\3\31\5\31\u01af\n\31\3\31\5\31\u01b2\n\31\3\32\3\32\5\32\u01b6\n"+ + "\32\3\33\3\33\3\33\3\33\7\33\u01bc\n\33\f\33\16\33\u01bf\13\33\3\34\3"+ + "\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3"+ + "\34\3\34\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u01d8\n\34\3\35\3\35\3\35"+ + "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u01e8\n\35"+ + "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\7\35\u01f3\n\35\f\35\16"+ + "\35\u01f6\13\35\3\35\2\5&(8\36\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36"+ + " \"$&(*,.\60\62\64\668\2\f\3\2$%\3\2&*\3\2/\60\3\2+,\4\2!!-.\3\2&\'\3"+ + "\2/\64\3\29B\4\2&\'/\60\4\2!!--\2\u0240\2:\3\2\2\2\4>\3\2\2\2\6D\3\2\2"+ + "\2\bG\3\2\2\2\nK\3\2\2\2\fR\3\2\2\2\16W\3\2\2\2\20k\3\2\2\2\22\u0081\3"+ + "\2\2\2\24\u0087\3\2\2\2\26\u00a3\3\2\2\2\30\u00a5\3\2\2\2\32\u00b0\3\2"+ + "\2\2\34\u00c7\3\2\2\2\36\u00ca\3\2\2\2 \u010b\3\2\2\2\"\u0110\3\2\2\2"+ + "$\u012b\3\2\2\2&\u0131\3\2\2\2(\u0168\3\2\2\2*\u0197\3\2\2\2,\u01a2\3"+ + "\2\2\2.\u01a8\3\2\2\2\60\u01b1\3\2\2\2\62\u01b3\3\2\2\2\64\u01b7\3\2\2"+ + "\2\66\u01d7\3\2\2\28\u01e7\3\2\2\2:;\5\6\4\2;<\5\n\6\2<=\7\2\2\3=\3\3"+ + "\2\2\2>?\5,\27\2?@\7\2\2\3@\5\3\2\2\2AC\5\b\5\2BA\3\2\2\2CF\3\2\2\2DB"+ + "\3\2\2\2DE\3\2\2\2E\7\3\2\2\2FD\3\2\2\2GH\7\3\2\2HI\7H\2\2I\t\3\2\2\2"+ + "JL\5\f\7\2KJ\3\2\2\2LM\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\13\3\2\2\2OS\5\16"+ + "\b\2PS\5\20\t\2QS\5\22\n\2RO\3\2\2\2RP\3\2\2\2RQ\3\2\2\2S\r\3\2\2\2TV"+ + "\5\34\17\2UT\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2XZ\3\2\2\2YW\3\2\2\2"+ + "Z^\5&\24\2[]\5\34\17\2\\[\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_a\3\2"+ + "\2\2`^\3\2\2\2ad\7T\2\2bc\7\4\2\2ce\5(\25\2db\3\2\2\2de\3\2\2\2ef\3\2"+ + "\2\2fg\7\5\2\2g\17\3\2\2\2hj\5\34\17\2ih\3\2\2\2jm\3\2\2\2ki\3\2\2\2k"+ + "l\3\2\2\2ln\3\2\2\2mk\3\2\2\2nr\5&\24\2oq\5\34\17\2po\3\2\2\2qt\3\2\2"+ + "\2rp\3\2\2\2rs\3\2\2\2su\3\2\2\2tr\3\2\2\2uv\7T\2\2vx\7\6\2\2wy\5\30\r"+ + "\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z{\7\7\2\2{}\7\b\2\2|~\5\36\20\2}|\3\2"+ + "\2\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7\t\2\2\u0080\21\3\2\2\2\u0081\u0083"+ + "\7\n\2\2\u0082\u0084\5\24\13\2\u0083\u0082\3\2\2\2\u0083\u0084\3\2\2\2"+ + "\u0084\u0085\3\2\2\2\u0085\u0086\7F\2\2\u0086\23\3\2\2\2\u0087\u0088\7"+ + "\6\2\2\u0088\u008d\5\26\f\2\u0089\u008a\7\13\2\2\u008a\u008c\5\26\f\2"+ + "\u008b\u0089\3\2\2\2\u008c\u008f\3\2\2\2\u008d\u008b\3\2\2\2\u008d\u008e"+ + "\3\2\2\2\u008e\u0090\3\2\2\2\u008f\u008d\3\2\2\2\u0090\u0091\7\7\2\2\u0091"+ + "\25\3\2\2\2\u0092\u0093\7\f\2\2\u0093\u00a4\7H\2\2\u0094\u0095\7\r\2\2"+ + "\u0095\u00a4\7H\2\2\u0096\u0097\7\16\2\2\u0097\u0098\7T\2\2\u0098\u0099"+ + "\7\17\2\2\u0099\u00a4\5(\25\2\u009a\u009b\7\20\2\2\u009b\u00a4\7K\2\2"+ + "\u009c\u009d\7\21\2\2\u009d\u00a4\7K\2\2\u009e\u00a1\7\22\2\2\u009f\u00a2"+ + "\7\23\2\2\u00a0\u00a2\5(\25\2\u00a1\u009f\3\2\2\2\u00a1\u00a0\3\2\2\2"+ + "\u00a2\u00a4\3\2\2\2\u00a3\u0092\3\2\2\2\u00a3\u0094\3\2\2\2\u00a3\u0096"+ + "\3\2\2\2\u00a3\u009a\3\2\2\2\u00a3\u009c\3\2\2\2\u00a3\u009e\3\2\2\2\u00a4"+ + "\27\3\2\2\2\u00a5\u00aa\5\32\16\2\u00a6\u00a7\7\13\2\2\u00a7\u00a9\5\32"+ + "\16\2\u00a8\u00a6\3\2\2\2\u00a9\u00ac\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa"+ + "\u00ab\3\2\2\2\u00ab\31\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad\u00af\5\34\17"+ + "\2\u00ae\u00ad\3\2\2\2\u00af\u00b2\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b0\u00b1"+ + "\3\2\2\2\u00b1\u00b3\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b3\u00b7\5&\24\2\u00b4"+ + "\u00b6\5\34\17\2\u00b5\u00b4\3\2\2\2\u00b6\u00b9\3\2\2\2\u00b7\u00b5\3"+ + "\2\2\2\u00b7\u00b8\3\2\2\2\u00b8\u00ba\3\2\2\2\u00b9\u00b7\3\2\2\2\u00ba"+ + "\u00bb\7T\2\2\u00bb\33\3\2\2\2\u00bc\u00c8\7\24\2\2\u00bd\u00c8\7\25\2"+ + "\2\u00be\u00bf\7\26\2\2\u00bf\u00c0\7\6\2\2\u00c0\u00c1\7K\2\2\u00c1\u00c8"+ + "\7\7\2\2\u00c2\u00c3\7\27\2\2\u00c3\u00c4\7\6\2\2\u00c4\u00c5\7T\2\2\u00c5"+ + "\u00c8\7\7\2\2\u00c6\u00c8\7\23\2\2\u00c7\u00bc\3\2\2\2\u00c7\u00bd\3"+ + "\2\2\2\u00c7\u00be\3\2\2\2\u00c7\u00c2\3\2\2\2\u00c7\u00c6\3\2\2\2\u00c8"+ + "\35\3\2\2\2\u00c9\u00cb\5 \21\2\u00ca\u00c9\3\2\2\2\u00cb\u00cc\3\2\2"+ + "\2\u00cc\u00ca\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\37\3\2\2\2\u00ce\u010c"+ + "\5\16\b\2\u00cf\u00d1\7\b\2\2\u00d0\u00d2\5\36\20\2\u00d1\u00d0\3\2\2"+ + "\2\u00d1\u00d2\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u010c\7\t\2\2\u00d4\u00d5"+ + "\5(\25\2\u00d5\u00d6\7\5\2\2\u00d6\u010c\3\2\2\2\u00d7\u00d8\7\30\2\2"+ + "\u00d8\u00d9\7\6\2\2\u00d9\u00da\5(\25\2\u00da\u00db\7\7\2\2\u00db\u00de"+ + "\5 \21\2\u00dc\u00dd\7\31\2\2\u00dd\u00df\5 \21\2\u00de\u00dc\3\2\2\2"+ + "\u00de\u00df\3\2\2\2\u00df\u010c\3\2\2\2\u00e0\u00e2\5\34\17\2\u00e1\u00e0"+ + "\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e4\7\32\2\2"+ + "\u00e4\u00e5\7\6\2\2\u00e5\u00e6\5(\25\2\u00e6\u00e7\7\7\2\2\u00e7\u00e8"+ + "\5 \21\2\u00e8\u010c\3\2\2\2\u00e9\u00eb\5\34\17\2\u00ea\u00e9\3\2\2\2"+ + "\u00ea\u00eb\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\u00ed\7\33\2\2\u00ed\u00ee"+ + "\5 \21\2\u00ee\u00ef\7\32\2\2\u00ef\u00f0\7\6\2\2\u00f0\u00f1\5(\25\2"+ + "\u00f1\u00f2\7\7\2\2\u00f2\u00f3\7\5\2\2\u00f3\u010c\3\2\2\2\u00f4\u00f6"+ + "\5\34\17\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f7\3\2\2\2"+ + "\u00f7\u00f8\7\34\2\2\u00f8\u00fa\7\6\2\2\u00f9\u00fb\5\"\22\2\u00fa\u00f9"+ + "\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\3\2\2\2\u00fc\u00fd\5$\23\2\u00fd"+ + "\u00fe\7\7\2\2\u00fe\u00ff\5 \21\2\u00ff\u010c\3\2\2\2\u0100\u0102\7\35"+ + "\2\2\u0101\u0103\5(\25\2\u0102\u0101\3\2\2\2\u0102\u0103\3\2\2\2\u0103"+ + "\u0104\3\2\2\2\u0104\u010c\7\5\2\2\u0105\u0106\7\36\2\2\u0106\u0107\7"+ + "\b\2\2\u0107\u0108\5,\27\2\u0108\u0109\7\t\2\2\u0109\u010c\3\2\2\2\u010a"+ + "\u010c\5\22\n\2\u010b\u00ce\3\2\2\2\u010b\u00cf\3\2\2\2\u010b\u00d4\3"+ + "\2\2\2\u010b\u00d7\3\2\2\2\u010b\u00e1\3\2\2\2\u010b\u00ea\3\2\2\2\u010b"+ + "\u00f5\3\2\2\2\u010b\u0100\3\2\2\2\u010b\u0105\3\2\2\2\u010b\u010a\3\2"+ + "\2\2\u010c!\3\2\2\2\u010d\u010f\5\34\17\2\u010e\u010d\3\2\2\2\u010f\u0112"+ + "\3\2\2\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0114\3\2\2\2\u0112"+ + "\u0110\3\2\2\2\u0113\u0115\5&\24\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2"+ + "\2\2\u0115\u0119\3\2\2\2\u0116\u0118\5\34\17\2\u0117\u0116\3\2\2\2\u0118"+ + "\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011c\3\2"+ + "\2\2\u011b\u0119\3\2\2\2\u011c\u011f\7T\2\2\u011d\u011e\7\4\2\2\u011e"+ + "\u0120\5(\25\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120#\3\2\2\2"+ + "\u0121\u0122\7\5\2\2\u0122\u0123\5(\25\2\u0123\u0124\7\5\2\2\u0124\u0125"+ + "\5(\25\2\u0125\u012c\3\2\2\2\u0126\u0127\7\17\2\2\u0127\u0128\5(\25\2"+ + "\u0128\u0129\7\37\2\2\u0129\u012a\5(\25\2\u012a\u012c\3\2\2\2\u012b\u0121"+ + "\3\2\2\2\u012b\u0126\3\2\2\2\u012c%\3\2\2\2\u012d\u012e\b\24\1\2\u012e"+ + "\u0132\7G\2\2\u012f\u0130\7 \2\2\u0130\u0132\7G\2\2\u0131\u012d\3\2\2"+ + "\2\u0131\u012f\3\2\2\2\u0132\u013d\3\2\2\2\u0133\u0134\f\4\2\2\u0134\u013c"+ + "\7!\2\2\u0135\u0136\f\3\2\2\u0136\u0138\7\"\2\2\u0137\u0139\5(\25\2\u0138"+ + "\u0137\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u013c\7#"+ + "\2\2\u013b\u0133\3\2\2\2\u013b\u0135\3\2\2\2\u013c\u013f\3\2\2\2\u013d"+ + "\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\'\3\2\2\2\u013f\u013d\3\2\2\2"+ + "\u0140\u0141\b\25\1\2\u0141\u0142\7\6\2\2\u0142\u0143\5(\25\2\u0143\u0144"+ + "\7\7\2\2\u0144\u0169\3\2\2\2\u0145\u0146\7T\2\2\u0146\u0148\7\6\2\2\u0147"+ + "\u0149\5*\26\2\u0148\u0147\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2"+ + "\2\2\u014a\u0169\7\7\2\2\u014b\u014c\7\6\2\2\u014c\u014d\5&\24\2\u014d"+ + "\u014e\7\7\2\2\u014e\u014f\5(\25\31\u014f\u0169\3\2\2\2\u0150\u0151\t"+ + "\2\2\2\u0151\u0169\5(\25\30\u0152\u0153\7!\2\2\u0153\u0169\5(\25\26\u0154"+ + "\u0155\t\3\2\2\u0155\u0169\5(\25\25\u0156\u0157\t\4\2\2\u0157\u0169\5"+ + "(\25\21\u0158\u0159\7\b\2\2\u0159\u015e\5(\25\2\u015a\u015b\7\13\2\2\u015b"+ + "\u015d\5(\25\2\u015c\u015a\3\2\2\2\u015d\u0160\3\2\2\2\u015e\u015c\3\2"+ + "\2\2\u015e\u015f\3\2\2\2\u015f\u0161\3\2\2\2\u0160\u015e\3\2\2\2\u0161"+ + "\u0162\7\t\2\2\u0162\u0169\3\2\2\2\u0163\u0169\7T\2\2\u0164\u0169\7K\2"+ + "\2\u0165\u0169\7H\2\2\u0166\u0169\7I\2\2\u0167\u0169\7J\2\2\u0168\u0140"+ + "\3\2\2\2\u0168\u0145\3\2\2\2\u0168\u014b\3\2\2\2\u0168\u0150\3\2\2\2\u0168"+ + "\u0152\3\2\2\2\u0168\u0154\3\2\2\2\u0168\u0156\3\2\2\2\u0168\u0158\3\2"+ + "\2\2\u0168\u0163\3\2\2\2\u0168\u0164\3\2\2\2\u0168\u0165\3\2\2\2\u0168"+ + "\u0166\3\2\2\2\u0168\u0167\3\2\2\2\u0169\u0194\3\2\2\2\u016a\u016b\f\24"+ + "\2\2\u016b\u016c\t\5\2\2\u016c\u0193\5(\25\25\u016d\u016e\f\23\2\2\u016e"+ + "\u016f\t\6\2\2\u016f\u0193\5(\25\24\u0170\u0171\f\22\2\2\u0171\u0172\t"+ + "\7\2\2\u0172\u0193\5(\25\23\u0173\u0174\f\20\2\2\u0174\u0175\t\b\2\2\u0175"+ + "\u0193\5(\25\21\u0176\u0177\f\17\2\2\u0177\u0178\7)\2\2\u0178\u0193\5"+ + "(\25\20\u0179\u017a\f\16\2\2\u017a\u017b\7\65\2\2\u017b\u0193\5(\25\17"+ + "\u017c\u017d\f\r\2\2\u017d\u017e\7\66\2\2\u017e\u0193\5(\25\16\u017f\u0180"+ + "\f\f\2\2\u0180\u0181\7\67\2\2\u0181\u0193\5(\25\r\u0182\u0183\f\13\2\2"+ + "\u0183\u0184\78\2\2\u0184\u0193\5(\25\f\u0185\u0186\f\n\2\2\u0186\u0187"+ + "\7\4\2\2\u0187\u0193\5(\25\n\u0188\u0189\f\t\2\2\u0189\u018a\t\t\2\2\u018a"+ + "\u0193\5(\25\t\u018b\u018c\f\32\2\2\u018c\u018d\7\"\2\2\u018d\u018e\5"+ + "(\25\2\u018e\u018f\7#\2\2\u018f\u0193\3\2\2\2\u0190\u0191\f\27\2\2\u0191"+ + "\u0193\t\2\2\2\u0192\u016a\3\2\2\2\u0192\u016d\3\2\2\2\u0192\u0170\3\2"+ + "\2\2\u0192\u0173\3\2\2\2\u0192\u0176\3\2\2\2\u0192\u0179\3\2\2\2\u0192"+ + "\u017c\3\2\2\2\u0192\u017f\3\2\2\2\u0192\u0182\3\2\2\2\u0192\u0185\3\2"+ + "\2\2\u0192\u0188\3\2\2\2\u0192\u018b\3\2\2\2\u0192\u0190\3\2\2\2\u0193"+ + "\u0196\3\2\2\2\u0194\u0192\3\2\2\2\u0194\u0195\3\2\2\2\u0195)\3\2\2\2"+ + "\u0196\u0194\3\2\2\2\u0197\u019c\5(\25\2\u0198\u0199\7\13\2\2\u0199\u019b"+ + "\5(\25\2\u019a\u0198\3\2\2\2\u019b\u019e\3\2\2\2\u019c\u019a\3\2\2\2\u019c"+ + "\u019d\3\2\2\2\u019d+\3\2\2\2\u019e\u019c\3\2\2\2\u019f\u01a1\5.\30\2"+ + "\u01a0\u019f\3\2\2\2\u01a1\u01a4\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a3"+ + "\3\2\2\2\u01a3-\3\2\2\2\u01a4\u01a2\3\2\2\2\u01a5\u01a9\5\60\31\2\u01a6"+ + "\u01a9\5\62\32\2\u01a7\u01a9\5\64\33\2\u01a8\u01a5\3\2\2\2\u01a8\u01a6"+ + "\3\2\2\2\u01a8\u01a7\3\2\2\2\u01a9/\3\2\2\2\u01aa\u01ab\7T\2\2\u01ab\u01b2"+ + "\7\17\2\2\u01ac\u01ae\7(\2\2\u01ad\u01af\7T\2\2\u01ae\u01ad\3\2\2\2\u01ae"+ + "\u01af\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0\u01b2\7\17\2\2\u01b1\u01aa\3"+ + "\2\2\2\u01b1\u01ac\3\2\2\2\u01b2\61\3\2\2\2\u01b3\u01b5\7E\2\2\u01b4\u01b6"+ + "\5\66\34\2\u01b5\u01b4\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\63\3\2\2\2\u01b7"+ + "\u01b8\7C\2\2\u01b8\u01bd\58\35\2\u01b9\u01ba\7\13\2\2\u01ba\u01bc\58"+ + "\35\2\u01bb\u01b9\3\2\2\2\u01bc\u01bf\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd"+ + "\u01be\3\2\2\2\u01be\65\3\2\2\2\u01bf\u01bd\3\2\2\2\u01c0\u01d8\58\35"+ + "\2\u01c1\u01c2\7D\2\2\u01c2\u01d8\58\35\2\u01c3\u01c4\58\35\2\u01c4\u01c5"+ + "\7\13\2\2\u01c5\u01c6\7T\2\2\u01c6\u01d8\3\2\2\2\u01c7\u01c8\7\6\2\2\u01c8"+ + "\u01c9\58\35\2\u01c9\u01ca\7\7\2\2\u01ca\u01cb\7\13\2\2\u01cb\u01cc\7"+ + "T\2\2\u01cc\u01d8\3\2\2\2\u01cd\u01ce\7\6\2\2\u01ce\u01cf\58\35\2\u01cf"+ + "\u01d0\7\13\2\2\u01d0\u01d1\7T\2\2\u01d1\u01d2\7\7\2\2\u01d2\u01d8\3\2"+ + "\2\2\u01d3\u01d4\7\6\2\2\u01d4\u01d5\58\35\2\u01d5\u01d6\7\7\2\2\u01d6"+ + "\u01d8\3\2\2\2\u01d7\u01c0\3\2\2\2\u01d7\u01c1\3\2\2\2\u01d7\u01c3\3\2"+ + "\2\2\u01d7\u01c7\3\2\2\2\u01d7\u01cd\3\2\2\2\u01d7\u01d3\3\2\2\2\u01d8"+ + "\67\3\2\2\2\u01d9\u01da\b\35\1\2\u01da\u01db\7\"\2\2\u01db\u01dc\58\35"+ + "\2\u01dc\u01dd\7#\2\2\u01dd\u01e8\3\2\2\2\u01de\u01df\t\n\2\2\u01df\u01e8"+ + "\58\35\n\u01e0\u01e8\7T\2\2\u01e1\u01e8\7U\2\2\u01e2\u01e3\7\b\2\2\u01e3"+ + "\u01e4\7T\2\2\u01e4\u01e8\7\t\2\2\u01e5\u01e8\7K\2\2\u01e6\u01e8\7I\2"+ + "\2\u01e7\u01d9\3\2\2\2\u01e7\u01de\3\2\2\2\u01e7\u01e0\3\2\2\2\u01e7\u01e1"+ + "\3\2\2\2\u01e7\u01e2\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e6\3\2\2\2\u01e8"+ + "\u01f4\3\2\2\2\u01e9\u01ea\f\13\2\2\u01ea\u01eb\t\5\2\2\u01eb\u01f3\5"+ + "8\35\f\u01ec\u01ed\f\t\2\2\u01ed\u01ee\t\13\2\2\u01ee\u01f3\58\35\n\u01ef"+ + "\u01f0\f\b\2\2\u01f0\u01f1\t\7\2\2\u01f1\u01f3\58\35\t\u01f2\u01e9\3\2"+ + "\2\2\u01f2\u01ec\3\2\2\2\u01f2\u01ef\3\2\2\2\u01f3\u01f6\3\2\2\2\u01f4"+ + "\u01f2\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f59\3\2\2\2\u01f6\u01f4\3\2\2\2"+ + "\66DMRW^dkrx}\u0083\u008d\u00a1\u00a3\u00aa\u00b0\u00b7\u00c7\u00cc\u00d1"+ + "\u00de\u00e1\u00ea\u00f5\u00fa\u0102\u010b\u0110\u0114\u0119\u011f\u012b"+ + "\u0131\u0138\u013b\u013d\u0148\u015e\u0168\u0192\u0194\u019c\u01a2\u01a8"+ + "\u01ae\u01b1\u01b5\u01bd\u01d7\u01e7\u01f2\u01f4"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java index 683f428e4..bd297fce5 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java @@ -65,65 +65,53 @@ public interface KickCVisitor extends ParseTreeVisitor { */ T visitDeclKasm(KickCParser.DeclKasmContext ctx); /** - * Visit a parse tree produced by {@link KickCParser#kasmParams}. + * Visit a parse tree produced by {@link KickCParser#kasmDirectives}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParams(KickCParser.KasmParamsContext ctx); + T visitKasmDirectives(KickCParser.KasmDirectivesContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamResources} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveResource} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamResources(KickCParser.KasmParamResourcesContext ctx); + T visitKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamClobber} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveClobber} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamClobber(KickCParser.KasmParamClobberContext ctx); + T visitKasmDirectiveClobber(KickCParser.KasmDirectiveClobberContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamTransfer} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveTransfer} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamTransfer(KickCParser.KasmParamTransferContext ctx); + T visitKasmDirectiveTransfer(KickCParser.KasmDirectiveTransferContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamBytes} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveBytes} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamBytes(KickCParser.KasmParamBytesContext ctx); + T visitKasmDirectiveBytes(KickCParser.KasmDirectiveBytesContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamCycles} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveCycles} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamCycles(KickCParser.KasmParamCyclesContext ctx); + T visitKasmDirectiveCycles(KickCParser.KasmDirectiveCyclesContext ctx); /** - * Visit a parse tree produced by the {@code kasmParamLocation} - * labeled alternative in {@link KickCParser#kasmParam}. + * Visit a parse tree produced by the {@code kasmDirectiveLocation} + * labeled alternative in {@link KickCParser#kasmDirective}. * @param ctx the parse tree * @return the visitor result */ - T visitKasmParamLocation(KickCParser.KasmParamLocationContext ctx); - /** - * Visit a parse tree produced by {@link KickCParser#kasmResourceList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitKasmResourceList(KickCParser.KasmResourceListContext ctx); - /** - * Visit a parse tree produced by {@link KickCParser#kasmParamList}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitKasmParamList(KickCParser.KasmParamListContext ctx); + T visitKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx); /** * Visit a parse tree produced by {@link KickCParser#parameterListDecl}. * @param ctx the parse tree diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index b33abaed1..cd7e1de8a 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -155,8 +155,8 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { String kickAsmCode = m.group(1).replaceAll("\r", ""); StatementKickAsm statementKickAsm = new StatementKickAsm(kickAsmCode, new StatementSource(ctx)); sequence.addStatement(statementKickAsm); - if(ctx.kasmParams() != null) { - List kasmDirectives = this.visitKasmParams(ctx.kasmParams()); + if(ctx.kasmDirectives() != null) { + List kasmDirectives = this.visitKasmDirectives(ctx.kasmDirectives()); for(KasmDirective kasmDirective : kasmDirectives) { if(kasmDirective instanceof KasmDirectiveLocation) { statementKickAsm.setLocation(((KasmDirectiveLocation) kasmDirective).getAddress()); @@ -170,10 +170,10 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { private interface KasmDirective {}; @Override - public List visitKasmParams(KickCParser.KasmParamsContext ctx) { + public List visitKasmDirectives(KickCParser.KasmDirectivesContext ctx) { ArrayList kasmDirectives = new ArrayList<>(); - List params = ctx.kasmParam(); - for(KickCParser.KasmParamContext param : params) { + List params = ctx.kasmDirective(); + for(KickCParser.KasmDirectiveContext param : params) { KasmDirective directive = (KasmDirective) visit(param); if(directive!=null) { kasmDirectives.add(directive); @@ -184,26 +184,26 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { /** KickAssembler directive specifying an absolute address for the generated code/data. */ public static class KasmDirectiveLocation implements KasmDirective { - /** will contain the address to generate the KickAssembler-code to. */ - private Long address; + private RValue address; - public KasmDirectiveLocation(Long address) { + public KasmDirectiveLocation(RValue address) { this.address = address; } - public Long getAddress() { + public RValue getAddress() { return address; } } + @Override - public KasmDirective visitKasmParamLocation(KickCParser.KasmParamLocationContext ctx) { + public Object visitKasmDirectiveLocation(KickCParser.KasmDirectiveLocationContext ctx) { ParseTree child = ctx.getChild(1); - if(ctx.NUMBER()!=null) { - Number location = NumberParser.parseLiteral(ctx.NUMBER().getText()); - return new KasmDirectiveLocation(location.longValue()); + if(ctx.expr()!=null) { + RValue expr = (RValue) visit(ctx.expr()); + return new KasmDirectiveLocation(expr); } else { // PLace inline return null; @@ -211,14 +211,13 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { } @Override - public Object visitKasmResourceList(KickCParser.KasmResourceListContext ctx) { - for(TerminalNode resource : ctx.STRING()) { - String resourceName = resource.getText(); - resourceName = resourceName.substring(1, resourceName.length() - 1); - File resourceFile = Compiler.loadFile(resourceName, program); - program.addAsmResourceFile(resourceFile.toPath()); - program.getLog().append("Added resource " + resourceFile.getPath().replace('\\', '/')); - } + public Object visitKasmDirectiveResource(KickCParser.KasmDirectiveResourceContext ctx) { + TerminalNode resource = ctx.STRING(); + String resourceName = resource.getText(); + resourceName = resourceName.substring(1, resourceName.length() - 1); + File resourceFile = Compiler.loadFile(resourceName, program); + program.addAsmResourceFile(resourceFile.toPath()); + program.getLog().append("Added resource " + resourceFile.getPath().replace('\\', '/')); return null; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3AssertConstants.java b/src/main/java/dk/camelot64/kickc/passes/Pass3AssertConstants.java new file mode 100644 index 000000000..b5121e372 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass3AssertConstants.java @@ -0,0 +1,38 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.statements.Statement; +import dk.camelot64.kickc.model.statements.StatementKickAsm; +import dk.camelot64.kickc.model.values.ConstantValue; +import dk.camelot64.kickc.model.values.RValue; + +/** + * Asserts that some RValues have been resolved to Constants. + * Checks: + * - KickAssembler locations + */ +public class Pass3AssertConstants extends Pass2SsaAssertion { + + public Pass3AssertConstants(Program program) { + super(program); + } + + @Override + public void check() throws AssertionFailed { + for(ControlFlowBlock block : getProgram().getGraph().getAllBlocks()) { + for(Statement statement : block.getStatements()) { + if(statement instanceof StatementKickAsm) { + RValue location = ((StatementKickAsm) statement).getLocation(); + if(location != null) { + if(!(location instanceof ConstantValue)) { + throw new CompileError("Error! KickAssembler location is not constant " + location.toString(), statement); + } + } + } + } + } + } + +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index bce6b5af9..063566c20 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -109,7 +109,7 @@ public class Pass4CodeGeneration { if(statement instanceof StatementKickAsm) { StatementKickAsm statementKasm = (StatementKickAsm) statement; if(statementKasm.getLocation() != null) { - asm.addLine(new AsmSetPc("Inline", AsmFormat.getAsmNumber(statementKasm.getLocation()))); + asm.addLine(new AsmSetPc("Inline", AsmFormat.getAsmConstant(program, (ConstantValue) statementKasm.getLocation(), 99, ScopeRef.ROOT))); asm.addInlinedKickAsm(statementKasm.getKickAsmCode()); } } diff --git a/src/test/java/dk/camelot64/kickc/test/kc/scrolllogo.kc b/src/test/java/dk/camelot64/kickc/test/kc/scrolllogo.kc index fdde98c13..1ca6af94d 100644 --- a/src/test/java/dk/camelot64/kickc/test/kc/scrolllogo.kc +++ b/src/test/java/dk/camelot64/kickc/test/kc/scrolllogo.kc @@ -4,7 +4,7 @@ import "memory.kc" byte* SCREEN = $400; byte* LOGO = $2000; -kickasm(resources "logo.png"; location $2000 ) {{ +kickasm(resource "logo.png", location LOGO ) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.asm b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.asm index 43666bb01..3af68767a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.asm @@ -711,7 +711,7 @@ fill: { } .align $100 xsin: .fill 2*XSIN_SIZE, 0 -.pc = $2000 "Inline" +.pc = LOGO "Inline" logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.cfg b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.cfg index 8d54279ef..8f38d15ca 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.cfg @@ -2,7 +2,7 @@ [0] phi() [ ] ( ) to:@24 @24: scope:[] from @begin - kickasm {{ logo: + kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log index 0eef1369f..da0d13a5a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log @@ -5,7 +5,7 @@ import "memory.kc" byte* SCREEN = $400; byte* LOGO = $2000; -kickasm(resources "logo.png"; location $2000 ) {{ +kickasm(resource "logo.png", location LOGO ) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) @@ -2298,7 +2298,7 @@ fill::@return: scope:[fill] from fill::@2 @24: scope:[] from @23 (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) LOGO ← ((byte*)) (word/signed word/dword/signed dword) 8192 - kickasm {{ logo: + kickasm(location (byte*) LOGO) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) @@ -3233,7 +3233,7 @@ fill::@return: scope:[fill] from fill::@1 (word) rem16u#31 ← phi( @16/(word) rem16u#32 ) (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) LOGO#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192 - kickasm {{ logo: + kickasm(location (byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) @@ -5588,7 +5588,7 @@ FINAL CONTROL FLOW GRAPH [0] phi() [ ] ( ) to:@24 @24: scope:[] from @begin - kickasm {{ logo: + kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) @@ -6680,7 +6680,7 @@ bbegin: jmp b24 //SEG3 @24 b24: -//SEG4 kickasm {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} +//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} //SEG5 [2] phi from @24 to @27 [phi:@24->@27] b27_from_b24: jmp b27 @@ -8235,7 +8235,7 @@ fill: { } .align $100 xsin: .fill 2*XSIN_SIZE, 0 -.pc = $2000 "Inline" +.pc = LOGO "Inline" logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) @@ -8731,7 +8731,7 @@ bbegin: jmp b24 //SEG3 @24 b24: -//SEG4 kickasm {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} +//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} //SEG5 [2] phi from @24 to @27 [phi:@24->@27] b27_from_b24: jmp b27 @@ -10024,7 +10024,7 @@ fill: { } .align $100 xsin: .fill 2*XSIN_SIZE, 0 -.pc = $2000 "Inline" +.pc = LOGO "Inline" logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) @@ -10663,7 +10663,7 @@ Score: 41393 .label xsin_idx = 2 //SEG2 @begin //SEG3 @24 -//SEG4 kickasm {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} +//SEG4 kickasm(location (const byte*) LOGO#0) {{ logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }} //SEG5 [2] phi from @24 to @27 [phi:@24->@27] //SEG6 @27 //SEG7 [3] call main [ ] ( ) @@ -11774,7 +11774,7 @@ fill: { } .align $100 xsin: .fill 2*XSIN_SIZE, 0 -.pc = $2000 "Inline" +.pc = LOGO "Inline" logo: .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++)