From 4e3641672901a1d05f2545f9105f0af92657e93b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 10 Aug 2024 16:41:27 +0200 Subject: [PATCH] ActionScript 3 parser and generator uses decimal. Instructions with numbecontext parameters have translate method - use standard GraphTarget items. --- .../lexers/actionscript3_script.flex | 31 +- .../instructions/localregs/DecLocalIns.java | 3 +- .../instructions/localregs/IncLocalIns.java | 3 +- .../other/decimalsupport/AddPIns.java | 12 + .../other/decimalsupport/ConvertMIns.java | 20 +- .../other/decimalsupport/ConvertMPIns.java | 20 +- .../other/decimalsupport/DecLocalPIns.java | 36 + .../other/decimalsupport/DecrementPIns.java | 10 + .../other/decimalsupport/DividePIns.java | 12 + .../other/decimalsupport/IncLocalPIns.java | 36 + .../other/decimalsupport/IncrementPIns.java | 10 + .../other/decimalsupport/ModuloPIns.java | 12 + .../other/decimalsupport/MultiplyPIns.java | 12 + .../other/decimalsupport/NegatePIns.java | 11 + .../other/decimalsupport/SubtractPIns.java | 12 + .../abc/avm2/model/DecimalValueAVM2Item.java | 1 - .../abc/avm2/model/FloatValueAVM2Item.java | 116 + .../abc/avm2/parser/pcode/ASM3Parser.java | 1 - .../parser/script/AVM2SourceGenerator.java | 8 + .../parser/script/ActionScript3Parser.java | 17 +- .../avm2/parser/script/ActionScriptLexer.java | 4297 ++++++++--------- .../abc/avm2/parser/script/SymbolGroup.java | 8 + .../abc/avm2/parser/script/SymbolType.java | 8 + .../testdata/decimal/bin/decimal.abc | Bin 837 -> 924 bytes .../testdata/decimal/bin/decimal.cpp | 23 +- .../testdata/decimal/src/mypkg/MyClass.as | 14 +- 26 files changed, 2442 insertions(+), 2291 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java diff --git a/libsrc/ffdec_lib/lexers/actionscript3_script.flex b/libsrc/ffdec_lib/lexers/actionscript3_script.flex index b3b2b3281..405f60fbb 100644 --- a/libsrc/ffdec_lib/lexers/actionscript3_script.flex +++ b/libsrc/ffdec_lib/lexers/actionscript3_script.flex @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Stack; import java.math.BigInteger; +import macromedia.asc.util.Decimal128; %% @@ -203,7 +204,7 @@ XmlSQuoteStringChar = [^\r\n\'] /* integer literals */ -DecIntegerLiteral = 0 | [1-9][0-9]* +DecIntegerLiteral = (0 | [1-9][0-9]*) [ui] HexIntegerLiteral = 0 [xX] 0* {HexDigit}+ HexDigit = [0-9a-fA-F] @@ -212,7 +213,7 @@ OctIntegerLiteral = 0+ [1-3]? {OctDigit}+ OctDigit = [0-7] /* floating point literals */ -DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [mdf]? FLit1 = [0-9]+ \. [0-9]* FLit2 = \. [0-9]+ @@ -373,15 +374,19 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* /* numeric literals */ {DecIntegerLiteral} { + String ival = yytext(); + if (ival.endsWith("i") || ival.endsWith("u")) { + ival = ival.substring(0, ival.length() - 1); + } try{ - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext())); + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(ival)); } catch(NumberFormatException nfe){ //its too long for an Integer var - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext())); + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(ival)); } } - {HexIntegerLiteral} { + {HexIntegerLiteral} { try { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16)); } catch (NumberFormatException nfe) { @@ -397,7 +402,21 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]* return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue()); } } - {DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext())); } + {DoubleLiteral} { + String dval = yytext(); + if (dval.endsWith("m")) { + dval = dval.substring(0, dval.length() - 1); + return new ParsedSymbol(SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval)); + } + if (dval.endsWith("f")) { + dval = dval.substring(0, dval.length() - 1); + return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval)); + } + if (dval.endsWith("d")) { + dval = dval.substring(0, dval.length() - 1); + } + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval)); + } /* comments */ {Comment} { yyline += count(yytext(),"\n"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java index d9850374d..6b9d8635f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/DecLocalIns.java @@ -58,6 +58,7 @@ public class DecLocalIns extends InstructionDefinition { return true; } + //same for declocal and declocalp (decimal) @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; @@ -77,8 +78,6 @@ public class DecLocalIns extends InstructionDefinition { } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new SubtractAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1))); - } else { - //localRegs.put(regIndex, new SubtractAVM2Item(ins, localData.lineStartInstruction, new IntegerValueAVM2Item(ins, localData.lineStartInstruction, new Long(0)), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, new Long(1)))); } if (!localData.localRegAssignmentIps.containsKey(regId)) { localData.localRegAssignmentIps.put(regId, 0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java index d29516dc6..2ec7aa8b4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/localregs/IncLocalIns.java @@ -58,6 +58,7 @@ public class IncLocalIns extends InstructionDefinition { return true; } + //same for inclocal and inclocalp (decimal) @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int regId = ins.operands[0]; @@ -77,8 +78,6 @@ public class IncLocalIns extends InstructionDefinition { } if (localData.localRegs.containsKey(regId)) { localData.localRegs.put(regId, new AddAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1))); - } else { - //localRegs.put(regIndex, new AddAVM2Item(ins, localData.lineStartInstruction, null, new IntegerValueAVM2Item(ins, localData.lineStartInstruction, new Long(1)))); } if (!localData.localRegAssignmentIps.containsKey(regId)) { localData.localRegAssignmentIps.put(regId, 0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/AddPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/AddPIns.java index d5a78a579..427590a84 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/AddPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/AddPIns.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -24,6 +25,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * add_p instruction - add two numbers with number context. @@ -47,4 +52,11 @@ public class AddPIns extends InstructionDefinition { super.verify(lda, constants, ins); } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v2 = stack.pop(); + GraphTargetItem v1 = stack.pop(); + stack.push(new AddAVM2Item(ins, localData.lineStartInstruction, v1, v2)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMIns.java index f9ff5c944..55cf54bb6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; @@ -24,13 +25,20 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceOrConvertTypeIns; +import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item; +import com.jpexs.decompiler.graph.DottedChain; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; +import java.util.List; /** * convert_m instruction - convert to decimal. * * @author JPEXS */ -public class ConvertMIns extends InstructionDefinition { +public class ConvertMIns extends InstructionDefinition implements CoerceOrConvertTypeIns { /** * Constructor @@ -57,4 +65,14 @@ public class ConvertMIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + stack.push(new ConvertAVM2Item(ins, localData.lineStartInstruction, stack.pop(), getTargetType(localData.getConstants(), ins))); + } + + @Override + public GraphTargetItem getTargetType(AVM2ConstantPool constants, AVM2Instruction ins) { + return new TypeItem(DottedChain.DECIMAL); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMPIns.java index 708e1e122..81fd13e2a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ConvertMPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,13 +26,20 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceOrConvertTypeIns; +import com.jpexs.decompiler.flash.abc.avm2.model.ConvertAVM2Item; +import com.jpexs.decompiler.graph.DottedChain; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; +import java.util.List; /** * convert_m_p instruction - convert to decimal with number context. * * @author JPEXS */ -public class ConvertMPIns extends InstructionDefinition { +public class ConvertMPIns extends InstructionDefinition implements CoerceOrConvertTypeIns { /** * Constructor @@ -58,4 +66,14 @@ public class ConvertMPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + stack.push(new ConvertAVM2Item(ins, localData.lineStartInstruction, stack.pop(), getTargetType(localData.getConstants(), ins))); + } + + @Override + public GraphTargetItem getTargetType(AVM2ConstantPool constants, AVM2Instruction ins) { + return new TypeItem(DottedChain.DECIMAL); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecLocalPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecLocalPIns.java index d5de85cf4..e797127b2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecLocalPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecLocalPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,14 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.DecLocalAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostDecrementAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.SubtractAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * declocal_p instruction - decrement local register with number context. @@ -58,4 +67,31 @@ public class DecLocalPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 0; } + + //same for declocal and declocalp (decimal) + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + int regId = ins.operands[0]; + boolean isPostDec = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostDecrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostDec = true; + } + } + } + if (!isPostDec) { + output.add(new DecLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } + if (localData.localRegs.containsKey(regId)) { + localData.localRegs.put(regId, new SubtractAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1))); + } + if (!localData.localRegAssignmentIps.containsKey(regId)) { + localData.localRegAssignmentIps.put(regId, 0); + } + localData.localRegAssignmentIps.put(regId, localData.localRegAssignmentIps.get(regId) + 1); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecrementPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecrementPIns.java index 3c3beb345..54d39c747 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecrementPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DecrementPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.DecrementAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * decrement_p instruction - decrement a number with number context. @@ -58,4 +63,9 @@ public class DecrementPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + stack.push(new DecrementAVM2Item(ins, localData.lineStartInstruction, stack.pop())); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DividePIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DividePIns.java index be08d0e5e..48c1844ae 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DividePIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/DividePIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.DivideAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * divide_p instruction - divide two numbers with number context. @@ -58,4 +63,11 @@ public class DividePIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v2 = stack.pop(); + GraphTargetItem v1 = stack.pop(); + stack.push(new DivideAVM2Item(ins, localData.lineStartInstruction, v1, v2)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncLocalPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncLocalPIns.java index 33530b0b0..6d4c98ff7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncLocalPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncLocalPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,14 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.IncLocalAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.PostIncrementAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * inclocal_p instruction - increment a local register with number context. @@ -58,4 +67,31 @@ public class IncLocalPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 0; } + + //same for inclocal and inclocalp (decimal) + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + int regId = ins.operands[0]; + boolean isPostInc = false; + if (!stack.isEmpty()) { + GraphTargetItem stackTop = stack.peek(); + if (stackTop instanceof LocalRegAVM2Item) { + if (regId == ((LocalRegAVM2Item) stackTop).regIndex) { + stack.pop(); + stack.push(new PostIncrementAVM2Item(ins, localData.lineStartInstruction, stackTop)); + isPostInc = true; + } + } + } + if (!isPostInc) { + output.add(new IncLocalAVM2Item(ins, localData.lineStartInstruction, regId)); + } + if (localData.localRegs.containsKey(regId)) { + localData.localRegs.put(regId, new AddAVM2Item(ins, localData.lineStartInstruction, localData.localRegs.get(regId), new IntegerValueAVM2Item(ins, localData.lineStartInstruction, 1))); + } + if (!localData.localRegAssignmentIps.containsKey(regId)) { + localData.localRegAssignmentIps.put(regId, 0); + } + localData.localRegAssignmentIps.put(regId, localData.localRegAssignmentIps.get(regId) + 1); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncrementPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncrementPIns.java index 9f0794b9d..e60d6caef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncrementPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/IncrementPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.IncrementAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * increment_p instruction - increment a number with number context. @@ -58,4 +63,9 @@ public class IncrementPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + stack.push(new IncrementAVM2Item(ins, localData.lineStartInstruction, stack.pop())); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ModuloPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ModuloPIns.java index 65659624f..6b1011eab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ModuloPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/ModuloPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.ModuloAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * modulo_p instruction - modulo with number context. @@ -58,4 +63,11 @@ public class ModuloPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v2 = stack.pop(); + GraphTargetItem v1 = stack.pop(); + stack.push(new ModuloAVM2Item(ins, localData.lineStartInstruction, v1, v2)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/MultiplyPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/MultiplyPIns.java index 210eeb580..68c2da653 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/MultiplyPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/MultiplyPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.MultiplyAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * multiply_p instruction - multiply two numbers with number context. @@ -58,4 +63,11 @@ public class MultiplyPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v2 = stack.pop(); + GraphTargetItem v1 = stack.pop(); + stack.push(new MultiplyAVM2Item(ins, localData.lineStartInstruction, v1, v2)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/NegatePIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/NegatePIns.java index a1cadce74..1447f408a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/NegatePIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/NegatePIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.NegAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * negate_p instruction - negate with number context. @@ -58,4 +63,10 @@ public class NegatePIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v = stack.pop(); + stack.push(new NegAVM2Item(ins, localData.lineStartInstruction, v)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/SubtractPIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/SubtractPIns.java index 44404efa9..e90e90afd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/SubtractPIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/decimalsupport/SubtractPIns.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.abc.avm2.instructions.other.decimalsupport; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.AVM2LocalData; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,10 @@ import com.jpexs.decompiler.flash.abc.avm2.exceptions.AVM2VerifyErrorException; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2InstructionFlag; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.operations.SubtractAVM2Item; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TranslateStack; +import java.util.List; /** * subtract_p instruction - subtract a number with number context. @@ -58,4 +63,11 @@ public class SubtractPIns extends InstructionDefinition { public int getStackPushCount(AVM2Instruction ins, ABC abc) { return 1; } + + @Override + public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { + GraphTargetItem v2 = stack.pop(); + GraphTargetItem v1 = stack.pop(); + stack.push(new SubtractAVM2Item(ins, localData.lineStartInstruction, v1, v2)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecimalValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecimalValueAVM2Item.java index 43fb96b58..f223aabbe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecimalValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecimalValueAVM2Item.java @@ -20,7 +20,6 @@ import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instructions; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; -import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java new file mode 100644 index 000000000..274b521b5 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2010-2024 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.abc.avm2.model; + +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instructions; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; +import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.CompilationException; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; +import com.jpexs.decompiler.graph.model.LocalData; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +/** + * Float value. + * + * @author JPEXS + */ +public class FloatValueAVM2Item extends NumberValueAVM2Item { + + /** + * Value + */ + public Float value; + + /** + * Constructor. + * + * @param instruction Instruction + * @param lineStartIns Line start instruction + * @param value Value + */ + public FloatValueAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Float value) { + super(instruction, lineStartIns); + this.value = value; + } + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { + return writer.append(EcmaScript.toString(value)).append("f"); + } + + @Override + public Object getResult() { + return value; + } + + @Override + public boolean isCompileTime(Set dependencies) { + return true; + } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + return toSourceMerge(localData, generator, + new AVM2Instruction(0, AVM2Instructions.PushFloat, new int[]{((AVM2SourceGenerator) generator).abcIndex.getSelectedAbc().constants.getFloatId(value, true)}) + ); + } + + @Override + public GraphTargetItem returnType() { + return TypeItem.NUMBER; + } + + @Override + public boolean hasReturnValue() { + return true; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 53 * hash + Objects.hashCode(this.value); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final FloatValueAVM2Item other = (FloatValueAVM2Item) obj; + if (!Objects.equals(this.value, other.value)) { + return false; + } + return true; + } + +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java index d1854f04b..e361126e0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/pcode/ASM3Parser.java @@ -23,7 +23,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.DeobfuscatePopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.instructions.UnknownInstruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushShortIns; import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import com.jpexs.decompiler.flash.abc.types.ABCException; import com.jpexs.decompiler.flash.abc.types.Float4; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index 24efcc657..1a6767f2e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -32,7 +32,9 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopScopeIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ApplyTypeAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.BooleanAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.DecimalValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.DoubleValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.FloatValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GetDescendantsAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; @@ -1549,6 +1551,12 @@ public class AVM2SourceGenerator implements SourceGenerator { if (val instanceof DoubleValueAVM2Item) { return new ValueKind(abcIndex.getSelectedAbc().constants.getDoubleId(((DoubleValueAVM2Item) val).value, true), ValueKind.CONSTANT_Double); } + if (val instanceof DecimalValueAVM2Item) { + return new ValueKind(abcIndex.getSelectedAbc().constants.getDecimalId(((DecimalValueAVM2Item) val).value, true), ValueKind.CONSTANT_DecimalOrFloat); + } + if (val instanceof FloatValueAVM2Item) { + return new ValueKind(abcIndex.getSelectedAbc().constants.getFloatId(((FloatValueAVM2Item) val).value, true), ValueKind.CONSTANT_DecimalOrFloat); + } if (val instanceof NanAVM2Item) { return new ValueKind(abcIndex.getSelectedAbc().constants.getDoubleId(Double.NaN, true), ValueKind.CONSTANT_Double); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index 52e4b3651..a525bcb11 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -23,10 +23,12 @@ import com.jpexs.decompiler.flash.abc.avm2.model.ApplyTypeAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.BooleanAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.CoerceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConstructSuperAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.DecimalValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.DefaultXMLNamespace; import com.jpexs.decompiler.flash.abc.avm2.model.EscapeXAttrAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.EscapeXElemAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.DoubleValueAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.FloatValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GetDescendantsAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.HasNextAVM2Item; @@ -129,6 +131,7 @@ import java.util.Map; import java.util.Stack; import java.util.logging.Level; import java.util.logging.Logger; +import macromedia.asc.util.Decimal128; /** * ActionScript 3 parser. @@ -2337,10 +2340,12 @@ public class ActionScript3Parser { s = lex(); if (s.isType(SymbolType.DOUBLE)) { ret = new DoubleValueAVM2Item(null, null, -(Double) s.value); - } else if (s.isType(SymbolType.INTEGER)) { ret = new IntegerValueAVM2Item(null, null, -(Integer) s.value); - + } else if (s.isType(SymbolType.DECIMAL)) { + ret = new DecimalValueAVM2Item(null, null, ((Decimal128) s.value).multiply(Decimal128.NEG1)); + } else if (s.isType(SymbolType.FLOAT)) { + ret = new FloatValueAVM2Item(null, null, -(Float) s.value); } else { lexer.pushback(s); GraphTargetItem num = expressionPrimary(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, true, variables); @@ -2446,6 +2451,14 @@ public class ActionScript3Parser { ret = new DoubleValueAVM2Item(null, null, (Double) s.value); allowMemberOrCall = true; // 5.2.toString(); break; + case DECIMAL: + ret = new DecimalValueAVM2Item(null, null, (Decimal128) s.value); + allowMemberOrCall = true; + break; + case FLOAT: + ret = new FloatValueAVM2Item(null, null, (Float) s.value); + allowMemberOrCall = true; + break; case DELETE: GraphTargetItem varDel = expressionPrimary(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, false, registerVars, inFunction, inMethod, true, variables); if (!isNameOrProp(varDel)) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index b8e29ad2c..e7d1bec0a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -1,5 +1,7 @@ +/* The following code was generated by JFlex 1.6.0 */ + /* - * Copyright (C) 2010-2024 JPEXS, All rights reserved. + * Copyright (C) 2010-2016 JPEXS, All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -15,961 +17,929 @@ * License along with this library. */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; - import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import java.io.StringReader; -import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Stack; +import java.math.BigInteger; +import macromedia.asc.util.Decimal128; + /** - * This class is a scanner generated by - * JFlex 1.6.0 from the specification file - * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.flex + * This class is a scanner generated by + * JFlex 1.6.0 + * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript3_script.flex */ public final class ActionScriptLexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLOPENTAG = 6; - public static final int XMLCLOSETAGFINISH = 8; - public static final int XMLOPENTAGATTRIB = 10; - public static final int XMLINSTR = 12; - public static final int XMLCDATA = 14; - public static final int XMLCOMMENT = 16; - public static final int XML = 18; - public static final int OIDENTIFIER = 20; - public static final int XMLCDATAALONE = 22; - public static final int XMLCOMMENTALONE = 24; + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLOPENTAG = 6; + public static final int XMLCLOSETAGFINISH = 8; + public static final int XMLOPENTAGATTRIB = 10; + public static final int XMLINSTR = 12; + public static final int XMLCDATA = 14; + public static final int XMLCOMMENT = 16; + public static final int XML = 18; + public static final int OIDENTIFIER = 20; + public static final int XMLCDATAALONE = 22; + public static final int XMLCOMMENTALONE = 24; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the - * beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 8, 8, 9, 9, 10, 10, 11, 11, 12, 12 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, + 8, 8, 9, 9, 10, 10, 11, 11, 12, 12 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\0\1\13\1\2\1\113\1\3\1\1\22\0\1\13\1\14\1\34" - + "\1\50\1\6\1\111\1\106\1\35\1\77\1\100\1\5\1\45\1\104" - + "\1\15\1\11\1\4\1\36\3\42\4\42\2\22\1\17\1\103\1\12" - + "\1\33\1\16\1\24\1\112\1\30\1\20\1\26\1\27\1\43\1\20" - + "\2\10\1\75\4\10\1\76\5\10\1\31\3\10\1\40\2\10\1\25" - + "\1\46\1\32\1\110\1\10\1\0\1\53\1\51\1\55\1\64\1\44" - + "\1\41\1\74\1\67\1\62\1\21\1\54\1\65\1\72\1\60\1\57" - + "\1\70\1\21\1\52\1\56\1\61\1\63\1\73\1\66\1\37\1\71" - + "\1\21\1\101\1\107\1\102\1\105\6\0\1\113\41\0\1\47\2\0" - + "\1\6\12\0\1\6\1\0\1\23\2\0\1\6\5\0\27\6\1\0" - + "\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0" - + "\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6\1\0\1\6" - + "\6\0\1\6\1\0\3\6\1\0\1\6\1\0\24\6\1\0\123\6" - + "\1\0\213\6\1\0\5\7\2\0\246\6\1\0\46\6\2\0\1\6" - + "\7\0\47\6\11\0\55\7\1\0\1\7\1\0\2\7\1\0\2\7" - + "\1\0\1\7\10\0\33\6\5\0\3\6\35\0\13\7\5\0\53\6" - + "\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7\2\0\6\7" - + "\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\20\0" - + "\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7" - + "\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7" - + "\1\6\3\7\1\6\5\7\22\0\31\6\3\7\104\0\23\6\61\0" - + "\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0" - + "\12\7\1\0\20\6\3\7\1\0\10\6\2\0\2\6\2\0\26\6" - + "\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6\7\7" - + "\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6\1\0" - + "\3\6\2\7\2\0\12\7\2\6\17\0\3\7\1\0\6\6\4\0" - + "\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6\1\0" - + "\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7\3\0" - + "\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7\13\0" - + "\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6\1\0" - + "\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7\1\0" - + "\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7\21\0\3\7" - + "\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6" - + "\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7" - + "\10\0\2\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\1\0" - + "\1\6\20\0\1\7\1\6\1\0\6\6\3\0\3\6\1\0\4\6" - + "\3\0\2\6\1\0\1\6\1\0\2\6\3\0\2\6\3\0\3\6" - + "\3\0\14\6\4\0\5\7\3\0\3\7\1\0\4\7\2\0\1\6" - + "\6\0\1\7\16\0\12\7\20\0\4\7\1\0\10\6\1\0\3\6" - + "\1\0\27\6\1\0\20\6\3\0\1\6\7\7\1\0\3\7\1\0" - + "\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7" - + "\21\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6" - + "\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7" - + "\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0" - + "\2\6\16\0\3\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0" - + "\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0" - + "\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6" - + "\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7" - + "\4\0\6\7\1\0\1\7\1\0\10\7\6\0\12\7\2\0\2\7" - + "\15\0\60\6\1\7\2\6\7\7\5\0\7\6\10\7\1\0\12\7" - + "\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0\1\6" - + "\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0\1\6" - + "\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7\1\6" - + "\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0\4\6" - + "\40\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0\1\7" - + "\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7\1\0" - + "\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6\24\7" - + "\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7\2\6" - + "\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6\1\0" - + "\1\6\5\0\1\6\2\0\53\6\1\0\u014d\6\1\0\4\6\2\0" - + "\7\6\1\0\1\6\1\0\4\6\2\0\51\6\1\0\4\6\2\0" - + "\41\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0" - + "\17\6\1\0\71\6\1\0\4\6\2\0\103\6\2\0\3\7\40\0" - + "\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0" - + "\113\6\3\0\3\7\10\6\7\0\15\6\1\0\4\6\3\7\13\0" - + "\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0\3\6\1\0" - + "\2\7\14\0\64\6\40\7\3\0\1\6\4\0\1\6\1\7\2\0" - + "\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0\51\6\1\7" - + "\1\6\5\0\106\6\12\0\37\6\1\0\14\7\4\0\14\7\12\0" - + "\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7\7\6\2\7" - + "\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7\1\0\35\7" - + "\2\0\13\7\6\0\12\7\15\0\1\6\10\0\16\7\102\0\5\7" - + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6" - + "\15\7\2\6\12\7\54\6\16\7\14\0\44\6\24\7\10\0\12\7" - + "\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7\4\6\1\7" - + "\4\6\3\7\2\6\1\0\2\7\6\0\300\6\66\7\6\0\4\7" - + "\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6\1\0" - + "\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6\1\0" - + "\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6\2\0" - + "\6\6\4\0\15\6\5\0\3\6\1\0\7\6\3\0\14\0\2\0" - + "\32\0\1\113\1\113\25\0\2\7\23\0\1\7\33\0\1\0\1\6" - + "\15\0\1\6\20\0\15\6\63\0\15\7\4\0\1\7\3\0\14\7" - + "\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6" - + "\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6" - + "\2\0\4\6\5\0\5\6\4\0\1\6\21\0\43\7\2\6\4\7" - + "\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7" - + "\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\0" - + "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\2\6\1\7\31\0" - + "\17\7\1\0\5\6\2\0\3\7\2\6\4\0\126\6\2\0\2\7" - + "\2\0\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6" - + "\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cd\6\63\0\u048d\6" - + "\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6" - + "\1\7\4\0\12\7\1\0\37\6\1\0\1\7\106\6\14\7\45\0" - + "\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0\2\6\105\0" - + "\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7\30\0\64\6" - + "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0" - + "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6" - + "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\6\0\5\6\1\7" - + "\12\6\12\7\5\6\1\0\51\6\16\7\11\0\3\6\1\7\10\6" - + "\2\7\2\0\12\7\6\0\27\6\3\0\1\6\3\7\62\6\1\7" - + "\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6\30\0" - + "\3\6\2\0\13\6\5\7\2\0\3\6\2\7\12\0\6\6\2\0" - + "\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0\53\6\1\0" - + "\4\6\4\0\2\6\132\0\43\6\10\7\1\0\2\7\2\0\12\7" - + "\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0\u1800\0\u0900\0\u016e\6" - + "\2\0\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6" - + "\1\0\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6" - + "\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\10\0\40\0" - + "\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0\3\7\40\0" - + "\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0\1\7\1\0" - + "\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0" - + "\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6\1\0\2\6" - + "\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7\210\0\1\7" - + "\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6\20\0\21\6" - + "\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6\2\0\44\6" - + "\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7\126\0\50\6" - + "\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6\230\0\6\6" - + "\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6\2\0\27\6" - + "\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6\106\0\70\6" - + "\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0\4\7\4\6" - + "\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7\40\0\35\6" - + "\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0\66\6\12\0" - + "\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0\3\7\65\6" - + "\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0\31\6\7\0" - + "\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0\43\6\1\7" - + "\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0\12\7\1\6" - + "\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7\5\0\12\7" - + "\7\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6" - + "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7" - + "\2\0\3\7\11\0\1\7\5\0\5\6\2\7\2\0\7\7\3\0" - + "\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0\12\7\246\0" - + "\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0\1\6\13\0" - + "\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6\12\7\25\0" - + "\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0\u042f\6\u33d1\0" - + "\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0\5\7\13\0" - + "\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6\5\0\23\6" - + "\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6\u4060\0\2\6" - + "\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6\3\0\2\7" - + "\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7\36\0\4\7" - + "\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6\2\0\1\6" - + "\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6\1\0\7\6" - + "\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6\1\0\34\6" - + "\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6\1\0\u0154\6" - + "\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6" - + "\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6" - + "\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7\u0529\0\4\6" - + "\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6\1\0\12\6" - + "\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6\4\0\1\6" - + "\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6\1\0\1\6" - + "\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6" - + "\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6\1\0\4\6" - + "\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6\5\0\3\6" - + "\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6\13\0\336\6" - + "\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0" - + "\360\7\uffff\0\uffff\0\ufe12\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\13\1\2\1\113\1\3\1\1\22\0\1\13\1\14\1\34"+ + "\1\53\1\6\1\111\1\106\1\35\1\77\1\100\1\5\1\50\1\104"+ + "\1\15\1\11\1\4\1\36\3\43\4\43\2\22\1\17\1\103\1\12"+ + "\1\33\1\16\1\24\1\112\1\30\1\20\1\26\1\27\1\46\1\20"+ + "\2\10\1\75\4\10\1\76\5\10\1\31\3\10\1\41\2\10\1\25"+ + "\1\51\1\32\1\110\1\10\1\0\1\56\1\54\1\42\1\65\1\47"+ + "\1\45\1\74\1\70\1\64\1\21\1\57\1\66\1\44\1\62\1\61"+ + "\1\71\1\21\1\55\1\60\1\63\1\37\1\73\1\67\1\40\1\72"+ + "\1\21\1\101\1\107\1\102\1\105\6\0\1\113\41\0\1\52\2\0"+ + "\1\6\12\0\1\6\1\0\1\23\2\0\1\6\5\0\27\6\1\0"+ + "\37\6\1\0\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0"+ + "\1\6\21\0\160\7\5\6\1\0\2\6\2\0\4\6\1\0\1\6"+ + "\6\0\1\6\1\0\3\6\1\0\1\6\1\0\24\6\1\0\123\6"+ + "\1\0\213\6\1\0\5\7\2\0\246\6\1\0\46\6\2\0\1\6"+ + "\7\0\47\6\11\0\55\7\1\0\1\7\1\0\2\7\1\0\2\7"+ + "\1\0\1\7\10\0\33\6\5\0\3\6\35\0\13\7\5\0\53\6"+ + "\37\7\4\0\2\6\1\7\143\6\1\0\1\6\7\7\2\0\6\7"+ + "\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6\20\0"+ + "\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6\16\0\12\7"+ + "\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7\1\6\11\7"+ + "\1\6\3\7\1\6\5\7\22\0\31\6\3\7\104\0\23\6\61\0"+ + "\40\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0"+ + "\12\7\1\0\20\6\3\7\1\0\10\6\2\0\2\6\2\0\26\6"+ + "\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6\7\7"+ + "\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6\1\0"+ + "\3\6\2\7\2\0\12\7\2\6\17\0\3\7\1\0\6\6\4\0"+ + "\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\2\6\1\0"+ + "\2\6\2\0\1\7\1\0\5\7\4\0\2\7\2\0\3\7\3\0"+ + "\1\7\7\0\4\6\1\0\1\6\7\0\14\7\3\6\1\7\13\0"+ + "\3\7\1\0\11\6\1\0\3\6\1\0\26\6\1\0\7\6\1\0"+ + "\2\6\1\0\5\6\2\0\1\7\1\6\10\7\1\0\3\7\1\0"+ + "\3\7\2\0\1\6\17\0\2\6\2\7\2\0\12\7\21\0\3\7"+ + "\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6"+ + "\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7\2\0\3\7"+ + "\10\0\2\7\4\0\2\6\1\0\3\6\2\7\2\0\12\7\1\0"+ + "\1\6\20\0\1\7\1\6\1\0\6\6\3\0\3\6\1\0\4\6"+ + "\3\0\2\6\1\0\1\6\1\0\2\6\3\0\2\6\3\0\3\6"+ + "\3\0\14\6\4\0\5\7\3\0\3\7\1\0\4\7\2\0\1\6"+ + "\6\0\1\7\16\0\12\7\20\0\4\7\1\0\10\6\1\0\3\6"+ + "\1\0\27\6\1\0\20\6\3\0\1\6\7\7\1\0\3\7\1\0"+ + "\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7"+ + "\21\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6"+ + "\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7"+ + "\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0"+ + "\2\6\16\0\3\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0"+ + "\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0"+ + "\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6"+ + "\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7"+ + "\4\0\6\7\1\0\1\7\1\0\10\7\6\0\12\7\2\0\2\7"+ + "\15\0\60\6\1\7\2\6\7\7\5\0\7\6\10\7\1\0\12\7"+ + "\47\0\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0\1\6"+ + "\6\0\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0\1\6"+ + "\2\0\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7\1\6"+ + "\2\0\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0\4\6"+ + "\40\0\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0\1\7"+ + "\1\0\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7\1\0"+ + "\2\7\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6\24\7"+ + "\1\6\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7\2\6"+ + "\7\7\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6\1\0"+ + "\1\6\5\0\1\6\2\0\53\6\1\0\u014d\6\1\0\4\6\2\0"+ + "\7\6\1\0\1\6\1\0\4\6\2\0\51\6\1\0\4\6\2\0"+ + "\41\6\1\0\4\6\2\0\7\6\1\0\1\6\1\0\4\6\2\0"+ + "\17\6\1\0\71\6\1\0\4\6\2\0\103\6\2\0\3\7\40\0"+ + "\20\6\20\0\125\6\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0"+ + "\113\6\3\0\3\7\10\6\7\0\15\6\1\0\4\6\3\7\13\0"+ + "\22\6\3\7\13\0\22\6\2\7\14\0\15\6\1\0\3\6\1\0"+ + "\2\7\14\0\64\6\40\7\3\0\1\6\4\0\1\6\1\7\2\0"+ + "\12\7\41\0\3\7\2\0\12\7\6\0\130\6\10\0\51\6\1\7"+ + "\1\6\5\0\106\6\12\0\37\6\1\0\14\7\4\0\14\7\12\0"+ + "\12\7\36\6\2\0\5\6\13\0\54\6\4\0\21\7\7\6\2\7"+ + "\6\0\12\7\46\0\27\6\5\7\4\0\65\6\12\7\1\0\35\7"+ + "\2\0\13\7\6\0\12\7\15\0\1\6\10\0\16\7\102\0\5\7"+ + "\57\6\21\7\7\6\4\0\12\7\21\0\11\7\14\0\3\7\36\6"+ + "\15\7\2\6\12\7\54\6\16\7\14\0\44\6\24\7\10\0\12\7"+ + "\3\0\3\6\12\7\44\6\122\0\3\7\1\0\25\7\4\6\1\7"+ + "\4\6\3\7\2\6\1\0\2\7\6\0\300\6\66\7\6\0\4\7"+ + "\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0\10\6\1\0"+ + "\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0\65\6\1\0"+ + "\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0\4\6\2\0"+ + "\6\6\4\0\15\6\5\0\3\6\1\0\7\6\3\0\14\0\2\0"+ + "\32\0\1\113\1\113\25\0\2\7\23\0\1\7\33\0\1\0\1\6"+ + "\15\0\1\6\20\0\15\6\63\0\15\7\4\0\1\7\3\0\14\7"+ + "\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6"+ + "\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6"+ + "\2\0\4\6\5\0\5\6\4\0\1\6\21\0\43\7\2\6\4\7"+ + "\7\0\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7"+ + "\2\6\14\0\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\0"+ + "\1\6\17\0\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ + "\1\0\40\7\57\0\1\6\u01c0\0\21\0\4\0\2\6\1\7\31\0"+ + "\17\7\1\0\5\6\2\0\3\7\2\6\4\0\126\6\2\0\2\7"+ + "\2\0\3\6\1\0\132\6\1\0\4\6\5\0\51\6\3\0\136\6"+ + "\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0\u51cd\6\63\0\u048d\6"+ + "\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6"+ + "\1\7\4\0\12\7\1\0\37\6\1\0\1\7\106\6\14\7\45\0"+ + "\11\6\2\0\147\6\2\0\4\6\1\0\36\6\2\0\2\6\105\0"+ + "\13\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7\30\0\64\6"+ + "\14\0\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0"+ + "\1\6\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6"+ + "\3\0\4\7\57\6\16\7\16\0\1\6\12\7\6\0\5\6\1\7"+ + "\12\6\12\7\5\6\1\0\51\6\16\7\11\0\3\6\1\7\10\6"+ + "\2\7\2\0\12\7\6\0\27\6\3\0\1\6\3\7\62\6\1\7"+ + "\1\6\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6\30\0"+ + "\3\6\2\0\13\6\5\7\2\0\3\6\2\7\12\0\6\6\2\0"+ + "\6\6\2\0\6\6\11\0\7\6\1\0\7\6\1\0\53\6\1\0"+ + "\4\6\4\0\2\6\132\0\43\6\10\7\1\0\2\7\2\0\12\7"+ + "\6\0\u2ba4\6\14\0\27\6\4\0\61\6\4\0\u1800\0\u0900\0\u016e\6"+ + "\2\0\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6"+ + "\1\0\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6"+ + "\1\0\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\10\0\40\0"+ + "\14\6\4\0\20\7\20\0\16\7\5\0\2\7\30\0\3\7\40\0"+ + "\5\6\1\0\207\6\23\0\12\7\7\0\32\6\4\0\1\7\1\0"+ + "\32\6\13\0\131\6\3\0\6\6\2\0\6\6\2\0\6\6\2\0"+ + "\3\6\41\0\2\0\14\6\1\0\32\6\1\0\23\6\1\0\2\6"+ + "\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\7\210\0\1\7"+ + "\202\0\35\6\3\0\61\6\17\0\1\7\37\0\40\6\20\0\21\6"+ + "\1\7\10\6\1\7\5\0\46\6\5\7\5\0\36\6\2\0\44\6"+ + "\4\0\10\6\1\0\5\7\52\0\236\6\2\0\12\7\126\0\50\6"+ + "\10\0\64\6\234\0\u0137\6\11\0\26\6\12\0\10\6\230\0\6\6"+ + "\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6\2\0\27\6"+ + "\12\0\27\6\11\0\37\6\141\0\26\6\12\0\32\6\106\0\70\6"+ + "\6\0\2\6\100\0\1\6\3\7\1\0\2\7\5\0\4\7\4\6"+ + "\1\0\3\6\1\0\33\6\4\0\3\7\4\0\1\7\40\0\35\6"+ + "\3\0\35\6\43\0\10\6\1\0\34\6\2\7\31\0\66\6\12\0"+ + "\26\6\12\0\23\6\15\0\22\6\156\0\111\6\u03b7\0\3\7\65\6"+ + "\17\7\37\0\12\7\17\0\4\7\55\6\13\7\25\0\31\6\7\0"+ + "\12\7\6\0\3\7\44\6\16\7\1\0\12\7\20\0\43\6\1\7"+ + "\2\0\1\6\11\0\3\7\60\6\16\7\4\6\13\0\12\7\1\6"+ + "\45\0\22\6\1\0\31\6\14\7\170\0\57\6\14\7\5\0\12\7"+ + "\7\0\3\7\1\0\10\6\2\0\2\6\2\0\26\6\1\0\7\6"+ + "\1\0\2\6\1\0\5\6\2\0\1\7\1\6\7\7\2\0\2\7"+ + "\2\0\3\7\11\0\1\7\5\0\5\6\2\7\2\0\7\7\3\0"+ + "\5\7\u010b\0\60\6\24\7\2\6\1\0\1\6\10\0\12\7\246\0"+ + "\57\6\7\7\2\0\11\7\77\0\60\6\21\7\3\0\1\6\13\0"+ + "\12\7\46\0\53\6\15\7\10\0\12\7\u01d6\0\100\6\12\7\25\0"+ + "\1\6\u01c0\0\71\6\u0507\0\u0399\6\147\0\157\7\u0b91\0\u042f\6\u33d1\0"+ + "\u0239\6\7\0\37\6\1\0\12\7\146\0\36\6\2\0\5\7\13\0"+ + "\60\6\7\7\11\0\4\6\14\0\12\7\11\0\25\6\5\0\23\6"+ + "\u0370\0\105\6\13\0\1\6\56\7\20\0\4\7\15\6\u4060\0\2\6"+ + "\u0bfe\0\153\6\5\0\15\6\3\0\11\6\7\0\12\6\3\0\2\7"+ + "\u14c6\0\5\7\3\0\6\7\10\0\10\7\2\0\7\7\36\0\4\7"+ + "\224\0\3\7\u01bb\0\125\6\1\0\107\6\1\0\2\6\2\0\1\6"+ + "\2\0\2\6\2\0\4\6\1\0\14\6\1\0\1\6\1\0\7\6"+ + "\1\0\101\6\1\0\4\6\2\0\10\6\1\0\7\6\1\0\34\6"+ + "\1\0\4\6\1\0\5\6\1\0\1\6\3\0\7\6\1\0\u0154\6"+ + "\2\0\31\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6"+ + "\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6"+ + "\1\0\10\6\2\0\62\7\u1000\0\305\6\13\0\7\7\u0529\0\4\6"+ + "\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6\1\0\12\6"+ + "\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6\4\0\1\6"+ + "\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6\1\0\1\6"+ + "\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6"+ + "\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6\1\0\4\6"+ + "\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6\5\0\3\6"+ + "\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6\13\0\336\6"+ + "\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u06ed\0"+ + "\360\7\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 - = "\15\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" - + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17" - + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25" - + "\1\1\21\6\1\26\1\27\1\30\1\31\1\32\1\33" - + "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\2\43" - + "\1\44\1\1\1\42\2\45\1\46\2\47\1\42\2\1" - + "\1\50\1\51\1\42\1\52\1\1\1\53\3\42\2\54" - + "\2\42\1\55\1\56\1\1\1\57\2\42\1\0\1\60" - + "\1\0\1\61\1\0\1\62\1\63\1\64\1\65\1\66" - + "\1\67\1\70\1\0\1\71\1\72\1\73\1\74\1\75" - + "\1\76\1\77\1\100\1\0\1\101\1\65\1\102\1\0" - + "\7\6\1\103\1\104\1\0\2\105\2\6\1\106\16\6" - + "\1\107\1\110\1\111\4\6\1\112\13\6\1\113\1\114" - + "\1\115\1\116\1\117\1\120\1\121\1\122\1\123\1\121" - + "\1\124\1\125\1\126\1\127\1\130\1\131\1\121\1\132" - + "\1\0\1\133\1\0\1\134\1\135\3\0\1\136\2\0" - + "\1\137\2\140\1\141\1\142\1\143\1\144\1\145\1\146" - + "\1\147\2\140\2\0\1\150\2\60\2\0\1\150\2\0" - + "\1\150\1\151\1\152\2\0\1\153\1\154\1\155\1\0" - + "\1\65\1\156\1\157\1\6\1\160\5\6\1\161\6\6" - + "\1\162\4\6\1\163\4\6\1\164\6\6\1\165\12\6" - + "\1\166\1\6\1\167\1\6\1\170\1\171\1\172\2\0" - + "\1\173\1\174\1\0\1\175\2\0\1\176\4\0\1\177" - + "\1\200\2\0\1\60\1\150\1\201\1\0\1\202\4\6" - + "\1\203\1\204\2\6\1\205\12\6\1\206\1\207\1\6" - + "\1\210\11\6\1\211\5\6\1\212\1\6\1\213\2\0" - + "\1\214\1\215\1\0\1\216\1\0\1\217\1\0\1\220" - + "\1\221\2\6\1\222\1\6\1\223\1\224\1\6\1\225" - + "\1\6\1\226\4\6\1\227\11\6\1\230\5\6\2\0" - + "\3\6\1\231\1\6\1\232\1\233\1\6\1\234\1\6" - + "\1\235\3\6\1\236\3\6\1\237\4\6\1\240\1\6" - + "\2\0\1\241\1\6\1\242\10\6\1\243\1\244\1\6" - + "\1\245\1\246\1\6\2\0\1\247\1\250\1\251\3\6" - + "\1\252\3\6\1\253\1\0\1\254\1\255\1\6\1\256" - + "\1\6\1\257\1\260\1\261\1\262\1\263"; + private static final String ZZ_ACTION_PACKED_0 = + "\15\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\15\4\6\1\24\1\25"+ + "\1\1\17\6\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\2\43"+ + "\1\44\1\1\1\42\2\45\1\46\2\47\1\42\2\1"+ + "\1\50\1\51\1\42\1\52\1\1\1\53\3\42\2\54"+ + "\2\42\1\55\1\56\1\1\1\57\2\42\1\0\1\60"+ + "\1\0\1\61\1\0\1\62\1\63\1\64\1\15\1\65"+ + "\1\66\1\67\1\0\1\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\76\1\77\1\100\1\15\1\0\1\101\1\15"+ + "\1\102\1\0\14\6\1\103\1\104\3\0\2\6\1\105"+ + "\14\6\1\106\1\107\1\110\1\6\1\111\13\6\1\112"+ + "\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\122"+ + "\2\120\1\123\1\124\1\125\1\126\1\127\1\130\1\131"+ + "\1\0\1\132\1\0\1\133\1\134\3\0\1\135\2\0"+ + "\1\136\3\137\1\140\1\141\1\142\1\143\1\144\1\145"+ + "\1\146\1\137\2\0\1\147\2\60\2\0\1\147\2\0"+ + "\1\147\1\150\1\151\2\0\1\152\1\153\1\154\1\0"+ + "\1\15\1\155\1\156\1\157\7\6\1\160\4\6\1\161"+ + "\1\162\3\6\1\163\4\6\1\164\3\6\1\165\17\6"+ + "\1\166\1\6\1\167\1\6\1\170\1\171\1\172\2\0"+ + "\1\173\1\174\1\0\1\175\2\0\1\176\4\0\1\177"+ + "\1\200\2\0\1\60\1\147\1\201\1\0\1\202\1\6"+ + "\1\203\10\6\1\204\1\205\6\6\1\206\2\6\1\207"+ + "\1\6\1\210\10\6\1\211\5\6\1\212\1\6\1\0"+ + "\1\213\1\0\1\214\1\215\2\0\1\216\2\0\1\6"+ + "\1\217\1\220\1\6\1\221\1\6\1\222\1\223\1\6"+ + "\1\224\1\6\1\225\5\6\1\226\10\6\1\227\5\6"+ + "\1\0\1\230\1\0\5\6\1\231\1\232\1\233\2\6"+ + "\1\234\1\235\1\236\5\6\1\237\1\6\1\240\4\6"+ + "\2\0\3\6\1\241\1\242\6\6\1\243\1\244\1\6"+ + "\1\245\1\246\1\6\2\0\1\6\1\247\1\250\1\251"+ + "\4\6\1\252\1\6\1\253\1\0\1\254\1\255\1\256"+ + "\2\6\1\257\1\260\1\261\1\262\1\263"; - private static int[] zzUnpackAction() { - int[] result = new int[461]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int [] zzUnpackAction() { + int [] result = new int[465]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214"+ + "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u03dc\0\u0428\0\u03dc"+ + "\0\u0474\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688"+ + "\0\u06d4\0\u0720\0\u076c\0\u03dc\0\u03dc\0\u03dc\0\u07b8\0\u03dc"+ + "\0\u03dc\0\u0804\0\u0850\0\u089c\0\u08e8\0\u0934\0\u0980\0\u09cc"+ + "\0\u0a18\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0\0\u0c2c"+ + "\0\u0c78\0\u0cc4\0\u0d10\0\u0d5c\0\u0da8\0\u0df4\0\u0e40\0\u0e8c"+ + "\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u0ed8"+ + "\0\u0f24\0\u0f70\0\u0fbc\0\u03dc\0\u1008\0\u1054\0\u03dc\0\u03dc"+ + "\0\u10a0\0\u10ec\0\u1138\0\u03dc\0\u03dc\0\u1184\0\u03dc\0\u11d0"+ + "\0\u121c\0\u1268\0\u03dc\0\u03dc\0\u12b4\0\u03dc\0\u1300\0\u03dc"+ + "\0\u03dc\0\u134c\0\u1398\0\u13e4\0\u03dc\0\u1430\0\u147c\0\u03dc"+ + "\0\u03dc\0\u14c8\0\u03dc\0\u1514\0\u1560\0\u15ac\0\u15f8\0\u1644"+ + "\0\u15ac\0\u1690\0\u03dc\0\u16dc\0\u03dc\0\u1728\0\u03dc\0\u1774"+ + "\0\u17c0\0\u180c\0\u03dc\0\u03dc\0\u1858\0\u03dc\0\u03dc\0\u18a4"+ + "\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u18f0\0\u193c\0\u1988\0\u19d4"+ + "\0\u1a20\0\u1a6c\0\u1ab8\0\u1b04\0\u1b50\0\u1b9c\0\u1be8\0\u1c34"+ + "\0\u1c80\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u03dc\0\u03dc\0\u1dfc"+ + "\0\u1e48\0\u1e94\0\u1ee0\0\u1f2c\0\u0558\0\u1f78\0\u1fc4\0\u2010"+ + "\0\u205c\0\u20a8\0\u20f4\0\u2140\0\u218c\0\u21d8\0\u2224\0\u2270"+ + "\0\u22bc\0\u0558\0\u0558\0\u2308\0\u2354\0\u0558\0\u23a0\0\u23ec"+ + "\0\u2438\0\u2484\0\u24d0\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c"+ + "\0\u2698\0\u03dc\0\u26e4\0\u03dc\0\u2730\0\u03dc\0\u03dc\0\u03dc"+ + "\0\u03dc\0\u03dc\0\u277c\0\u27c8\0\u03dc\0\u03dc\0\u03dc\0\u03dc"+ + "\0\u03dc\0\u03dc\0\u03dc\0\u1268\0\u03dc\0\u1300\0\u03dc\0\u03dc"+ + "\0\u2814\0\u2860\0\u28ac\0\u28f8\0\u2944\0\u2990\0\u03dc\0\u03dc"+ + "\0\u29dc\0\u2a28\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc"+ + "\0\u03dc\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u03dc\0\u2bf0"+ + "\0\u2c3c\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u03dc\0\u03dc\0\u2db8"+ + "\0\u2e04\0\u03dc\0\u2e50\0\u03dc\0\u2e9c\0\u2ee8\0\u03dc\0\u1a20"+ + "\0\u0558\0\u2f34\0\u2f80\0\u2fcc\0\u3018\0\u3064\0\u30b0\0\u30fc"+ + "\0\u0558\0\u3148\0\u3194\0\u31e0\0\u322c\0\u3278\0\u03dc\0\u32c4"+ + "\0\u3310\0\u335c\0\u0558\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u0558"+ + "\0\u34d8\0\u3524\0\u3570\0\u0558\0\u35bc\0\u3608\0\u3654\0\u36a0"+ + "\0\u36ec\0\u3738\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900"+ + "\0\u394c\0\u3998\0\u39e4\0\u0558\0\u3a30\0\u0558\0\u3a7c\0\u0558"+ + "\0\u03dc\0\u03dc\0\u3ac8\0\u3b14\0\u03dc\0\u03dc\0\u3b60\0\u03dc"+ + "\0\u3bac\0\u3bf8\0\u3c44\0\u3c90\0\u3cdc\0\u3d28\0\u3d74\0\u03dc"+ + "\0\u03dc\0\u3dc0\0\u3e0c\0\u2b58\0\u3e58\0\u03dc\0\u3ea4\0\u03dc"+ + "\0\u3ef0\0\u0558\0\u3f3c\0\u3f88\0\u3fd4\0\u4020\0\u406c\0\u40b8"+ + "\0\u4104\0\u4150\0\u0558\0\u0558\0\u419c\0\u41e8\0\u4234\0\u4280"+ + "\0\u42cc\0\u4318\0\u0558\0\u4364\0\u43b0\0\u0558\0\u43fc\0\u0558"+ + "\0\u4448\0\u4494\0\u44e0\0\u452c\0\u4578\0\u45c4\0\u4610\0\u465c"+ + "\0\u0558\0\u46a8\0\u46f4\0\u4740\0\u478c\0\u47d8\0\u0558\0\u4824"+ + "\0\u27c8\0\u03dc\0\u4870\0\u03dc\0\u03dc\0\u48bc\0\u2a28\0\u03dc"+ + "\0\u4908\0\u4954\0\u49a0\0\u0558\0\u0558\0\u49ec\0\u0558\0\u4a38"+ + "\0\u0558\0\u4a84\0\u4ad0\0\u0558\0\u4b1c\0\u0558\0\u4b68\0\u4bb4"+ + "\0\u4c00\0\u4c4c\0\u4c98\0\u0558\0\u4ce4\0\u4d30\0\u4d7c\0\u4dc8"+ + "\0\u4e14\0\u4e60\0\u4eac\0\u4ef8\0\u0558\0\u4f44\0\u4f90\0\u4fdc"+ + "\0\u5028\0\u5074\0\u50c0\0\u03dc\0\u510c\0\u5158\0\u51a4\0\u51f0"+ + "\0\u523c\0\u5288\0\u0558\0\u0558\0\u0558\0\u52d4\0\u5320\0\u0558"+ + "\0\u0558\0\u0558\0\u536c\0\u53b8\0\u5404\0\u5450\0\u549c\0\u0558"+ + "\0\u54e8\0\u0558\0\u5534\0\u5580\0\u55cc\0\u5618\0\u5664\0\u56b0"+ + "\0\u56fc\0\u5748\0\u5794\0\u0558\0\u0558\0\u57e0\0\u582c\0\u5878"+ + "\0\u58c4\0\u5910\0\u595c\0\u0558\0\u0558\0\u59a8\0\u0558\0\u0558"+ + "\0\u59f4\0\u5a40\0\u5a8c\0\u5ad8\0\u0558\0\u0558\0\u0558\0\u5b24"+ + "\0\u5b70\0\u5bbc\0\u5c08\0\u0558\0\u5c54\0\u0558\0\u5ca0\0\u03dc"+ + "\0\u0558\0\u0558\0\u5cec\0\u5d38\0\u0558\0\u0558\0\u03dc\0\u0558"+ + "\0\u0558"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[465]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_ROWMAP_PACKED_0 - = "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214" - + "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u03dc\0\u0428\0\u03dc" - + "\0\u0474\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688" - + "\0\u06d4\0\u0720\0\u076c\0\u03dc\0\u03dc\0\u03dc\0\u07b8\0\u03dc" - + "\0\u03dc\0\u0804\0\u0850\0\u089c\0\u08e8\0\u0934\0\u0980\0\u09cc" - + "\0\u0a18\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0\0\u0c2c" - + "\0\u0c78\0\u0cc4\0\u0d10\0\u0d5c\0\u0da8\0\u0df4\0\u0e40\0\u0e8c" - + "\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u0ed8" - + "\0\u0f24\0\u0f70\0\u0fbc\0\u03dc\0\u1008\0\u1054\0\u03dc\0\u03dc" - + "\0\u10a0\0\u10ec\0\u1138\0\u03dc\0\u03dc\0\u1184\0\u03dc\0\u11d0" - + "\0\u121c\0\u1268\0\u03dc\0\u03dc\0\u12b4\0\u03dc\0\u1300\0\u03dc" - + "\0\u03dc\0\u134c\0\u1398\0\u13e4\0\u03dc\0\u1430\0\u147c\0\u03dc" - + "\0\u03dc\0\u14c8\0\u03dc\0\u1514\0\u1560\0\u15ac\0\u15f8\0\u1644" - + "\0\u15ac\0\u1690\0\u03dc\0\u16dc\0\u03dc\0\u1728\0\u03dc\0\u1774" - + "\0\u17c0\0\u180c\0\u03dc\0\u03dc\0\u1858\0\u03dc\0\u03dc\0\u18a4" - + "\0\u03dc\0\u03dc\0\u18f0\0\u193c\0\u1988\0\u19d4\0\u1a20\0\u1a6c" - + "\0\u1ab8\0\u1b04\0\u1b50\0\u1b9c\0\u1be8\0\u1c34\0\u03dc\0\u03dc" - + "\0\u1c80\0\u1ccc\0\u03dc\0\u1d18\0\u1d64\0\u0558\0\u1db0\0\u1dfc" - + "\0\u1e48\0\u1e94\0\u1ee0\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c" - + "\0\u20a8\0\u20f4\0\u2140\0\u218c\0\u0558\0\u0558\0\u21d8\0\u2224" - + "\0\u2270\0\u22bc\0\u2308\0\u0558\0\u2354\0\u23a0\0\u23ec\0\u2438" - + "\0\u2484\0\u24d0\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u03dc" - + "\0\u2698\0\u03dc\0\u26e4\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc" - + "\0\u2730\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u277c" - + "\0\u03dc\0\u1268\0\u03dc\0\u1300\0\u03dc\0\u03dc\0\u27c8\0\u2814" - + "\0\u2860\0\u28ac\0\u28f8\0\u2944\0\u03dc\0\u03dc\0\u2990\0\u03dc" - + "\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u03dc\0\u29dc\0\u2a28" - + "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u03dc\0\u2ba4\0\u2bf0\0\u2c3c" - + "\0\u2c88\0\u2cd4\0\u2d20\0\u03dc\0\u03dc\0\u2d6c\0\u2db8\0\u03dc" - + "\0\u2e04\0\u03dc\0\u2e50\0\u2e50\0\u03dc\0\u1a20\0\u2e9c\0\u0558" - + "\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u3018\0\u3064\0\u30b0\0\u30fc" - + "\0\u3148\0\u3194\0\u31e0\0\u322c\0\u0558\0\u3278\0\u32c4\0\u3310" - + "\0\u335c\0\u0558\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u0558\0\u34d8" - + "\0\u3524\0\u3570\0\u35bc\0\u3608\0\u3654\0\u0558\0\u36a0\0\u36ec" - + "\0\u3738\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c" - + "\0\u0558\0\u3998\0\u0558\0\u39e4\0\u0558\0\u03dc\0\u03dc\0\u3a30" - + "\0\u3a7c\0\u03dc\0\u03dc\0\u3ac8\0\u03dc\0\u3b14\0\u3b60\0\u3bac" - + "\0\u3bf8\0\u3c44\0\u3c90\0\u3cdc\0\u03dc\0\u03dc\0\u3d28\0\u3d74" - + "\0\u2b0c\0\u3dc0\0\u03dc\0\u3e0c\0\u03dc\0\u3e58\0\u3ea4\0\u3ef0" - + "\0\u3f3c\0\u0558\0\u0558\0\u3f88\0\u3fd4\0\u0558\0\u4020\0\u406c" - + "\0\u40b8\0\u4104\0\u4150\0\u419c\0\u41e8\0\u4234\0\u4280\0\u42cc" - + "\0\u0558\0\u0558\0\u4318\0\u0558\0\u4364\0\u43b0\0\u43fc\0\u4448" - + "\0\u4494\0\u44e0\0\u452c\0\u4578\0\u45c4\0\u0558\0\u4610\0\u465c" - + "\0\u46a8\0\u46f4\0\u4740\0\u0558\0\u478c\0\u03dc\0\u2730\0\u47d8" - + "\0\u03dc\0\u03dc\0\u4824\0\u03dc\0\u2990\0\u03dc\0\u4870\0\u0558" - + "\0\u48bc\0\u4908\0\u4954\0\u0558\0\u49a0\0\u0558\0\u0558\0\u49ec" - + "\0\u0558\0\u4a38\0\u0558\0\u4a84\0\u4ad0\0\u4b1c\0\u4b68\0\u0558" - + "\0\u4bb4\0\u4c00\0\u4c4c\0\u4c98\0\u4ce4\0\u4d30\0\u4d7c\0\u4dc8" - + "\0\u4e14\0\u0558\0\u4e60\0\u4eac\0\u4ef8\0\u4f44\0\u4f90\0\u4fdc" - + "\0\u5028\0\u5074\0\u50c0\0\u510c\0\u0558\0\u5158\0\u0558\0\u0558" - + "\0\u51a4\0\u0558\0\u51f0\0\u0558\0\u523c\0\u5288\0\u52d4\0\u0558" - + "\0\u5320\0\u536c\0\u53b8\0\u0558\0\u5404\0\u5450\0\u549c\0\u54e8" - + "\0\u0558\0\u5534\0\u5580\0\u55cc\0\u0558\0\u5618\0\u0558\0\u5664" - + "\0\u56b0\0\u56fc\0\u5748\0\u5794\0\u57e0\0\u582c\0\u5878\0\u0558" - + "\0\u0558\0\u58c4\0\u0558\0\u0558\0\u5910\0\u595c\0\u59a8\0\u0558" - + "\0\u0558\0\u0558\0\u59f4\0\u5a40\0\u5a8c\0\u0558\0\u5ad8\0\u5b24" - + "\0\u5b70\0\u0558\0\u5bbc\0\u03dc\0\u0558\0\u5c08\0\u0558\0\u5c54" - + "\0\u0558\0\u0558\0\u03dc\0\u0558\0\u0558"; + private static final String ZZ_TRANS_PACKED_0 = + "\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\16"+ + "\1\24\1\25\1\26\1\21\1\27\1\30\1\31\1\32"+ + "\2\24\1\33\1\16\1\34\1\35\4\24\1\36\1\37"+ + "\1\40\1\41\1\42\1\43\2\24\1\44\1\33\1\24"+ + "\1\45\1\24\1\46\1\47\1\16\1\50\1\51\1\52"+ + "\1\53\1\54\1\24\1\55\1\56\1\57\1\60\1\61"+ + "\1\62\1\24\1\63\1\24\1\64\1\24\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ + "\1\77\1\100\1\101\1\102\1\103\1\104\1\16\1\105"+ + "\1\106\1\107\31\105\1\110\14\105\1\111\42\105\1\112"+ + "\1\113\1\114\32\112\1\115\13\112\1\111\42\112\1\16"+ + "\1\116\1\117\1\120\1\121\3\16\1\122\2\16\1\120"+ + "\2\16\1\123\3\122\4\16\4\122\5\16\4\122\1\16"+ + "\4\122\4\16\23\122\2\16\1\124\13\16\1\116\1\117"+ + "\10\16\1\125\2\16\1\126\131\16\1\127\44\16\1\130"+ + "\12\16\1\131\1\116\1\117\21\131\1\132\70\131\1\116"+ + "\1\117\27\131\1\133\62\131\1\134\1\135\12\131\1\136"+ + "\77\131\1\116\1\117\7\131\1\137\66\131\1\140\12\131"+ + "\1\141\1\113\1\114\46\141\1\142\1\143\41\141\1\131"+ + "\1\116\1\117\27\131\1\144\62\131\1\134\1\135\12\131"+ + "\1\145\76\131\116\0\1\20\114\0\1\21\7\0\1\21"+ + "\100\0\1\146\2\0\1\146\1\147\1\150\25\146\1\151"+ + "\15\146\1\152\42\146\33\0\1\153\66\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\23\24\26\0"+ + "\1\154\1\155\7\0\1\156\13\0\1\156\4\0\1\156"+ + "\33\0\1\157\24\0\1\160\1\0\1\161\1\0\1\162"+ + "\2\0\3\160\4\0\4\160\1\0\1\163\3\0\4\160"+ + "\1\0\4\160\4\0\23\160\2\0\1\164\45\0\1\165"+ + "\75\0\1\166\15\0\1\167\76\0\1\170\14\0\1\171"+ + "\77\0\1\172\105\0\1\156\10\0\1\33\13\0\1\33"+ + "\1\173\3\0\1\33\2\174\2\175\14\0\1\173\1\174"+ + "\61\0\1\176\71\0\1\156\10\0\1\177\13\0\1\200"+ + "\1\173\2\201\1\0\1\200\2\174\2\175\14\0\1\173"+ + "\1\174\34\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\4\24\1\202\1\24\1\203\14\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\12\24\4\0"+ + "\2\24\1\204\2\24\1\205\4\24\1\206\10\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\1\24\1\207"+ + "\10\24\4\0\2\24\1\210\2\24\1\211\2\24\1\212"+ + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\2\24\1\213\7\24\4\0\2\24\1\214\7\24\1\215"+ + "\10\24\50\0\1\216\14\0\1\217\115\0\1\220\63\0"+ + "\1\221\13\0\1\222\4\0\1\221\56\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\1\24\1\223"+ + "\21\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\11\24\1\224\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\4\24\1\225\16\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\1\24"+ + "\1\226\7\24\1\227\4\0\7\24\1\230\3\24\1\231"+ + "\7\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\17\24\1\232\3\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\1\24\1\233\7\24\1\234"+ + "\4\0\2\24\1\235\20\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\1\24\1\236\12\24"+ + "\1\237\1\24\1\240\4\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\6\24\1\241\1\242\2\24\4\0"+ + "\4\24\1\243\1\24\1\244\14\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\245\4\0\5\24"+ + "\1\246\10\24\1\247\4\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\10\24\1\250\3\24"+ + "\1\251\6\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\1\24\1\252\10\24\4\0\1\24\1\253\1\254"+ + "\20\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\2\24\1\255\2\24\1\256\15\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\11\24\1\257"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\6\24\1\260\14\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\2\24"+ + "\1\261\20\24\50\0\1\262\52\0\1\263\40\0\1\264"+ + "\53\0\1\265\37\0\1\266\113\0\1\267\60\0\1\105"+ + "\2\0\31\105\1\0\14\105\1\0\42\105\2\0\1\107"+ + "\111\0\1\270\3\0\30\270\1\271\1\272\1\270\1\273"+ + "\1\274\4\270\1\275\3\270\1\276\2\270\1\277\1\300"+ + "\4\270\1\301\1\302\27\270\1\0\1\112\2\0\32\112"+ + "\1\0\13\112\1\0\42\112\2\0\1\114\113\0\1\117"+ + "\114\0\1\120\7\0\1\120\116\0\1\303\105\0\2\304"+ + "\3\0\1\304\1\0\5\304\2\0\4\304\1\0\1\305"+ + "\2\0\12\304\4\0\23\304\30\0\1\125\100\0\1\306"+ + "\2\0\31\306\1\307\57\306\16\0\1\310\127\0\1\311"+ + "\63\0\1\135\126\0\1\312\102\0\1\313\3\0\1\314"+ + "\3\0\1\315\2\0\3\314\2\0\1\316\1\0\4\314"+ + "\5\0\4\314\1\0\4\314\4\0\23\314\2\0\1\317"+ + "\12\0\1\320\3\0\33\320\1\321\1\322\4\320\1\323"+ + "\3\320\1\324\1\325\1\320\1\326\1\327\4\320\1\330"+ + "\1\331\15\320\1\332\11\320\33\0\1\333\76\0\1\334"+ + "\76\0\1\146\2\0\1\146\1\335\44\146\1\152\42\146"+ + "\1\147\1\336\1\337\111\147\1\340\2\341\1\340\1\342"+ + "\1\343\43\340\1\344\42\340\1\146\2\0\1\146\1\345"+ + "\44\146\1\152\42\146\11\0\1\346\124\0\1\156\13\0"+ + "\1\156\4\0\1\156\2\174\2\175\15\0\1\174\36\0"+ + "\2\160\3\0\1\160\1\0\5\160\2\0\4\160\4\0"+ + "\12\160\4\0\23\160\50\0\1\347\75\0\1\350\7\0"+ + "\1\351\121\0\1\352\76\0\1\353\14\0\1\354\75\0"+ + "\1\355\4\0\1\356\13\0\1\356\4\0\1\356\4\0"+ + "\1\355\76\0\1\357\71\0\1\156\10\0\1\177\13\0"+ + "\1\177\4\0\1\177\2\174\2\175\15\0\1\174\37\0"+ + "\1\156\10\0\1\177\13\0\1\200\4\0\1\200\2\174"+ + "\2\175\15\0\1\174\46\0\1\360\1\0\1\360\3\0"+ + "\3\360\5\0\1\360\3\0\2\360\1\0\3\360\4\0"+ + "\1\360\1\0\1\360\6\0\1\360\34\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\361\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\11\24\1\362\11\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\4\24\1\363\2\24"+ + "\1\364\13\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\6\24\1\365\14\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\2\24"+ + "\1\366\20\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\6\24\1\367\14\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\12\24"+ + "\1\370\10\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\1\24\1\371\21\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\6\24"+ + "\1\372\14\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\7\24\1\373\13\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\4\24\1\374\5\24"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\4\24\1\375\16\24\23\0\1\376"+ + "\1\0\1\376\7\0\2\376\4\0\4\376\5\0\4\376"+ + "\1\0\4\376\4\0\23\376\37\0\1\221\13\0\1\221"+ + "\1\377\3\0\1\221\20\0\1\377\66\0\1\377\24\0"+ + "\1\377\35\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\11\24\1\u0100\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u0101\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\15\24\1\u0102\5\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u0103\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\2\24\1\u0104\20\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\10\24\1\u0105\12\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u0106\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\12\24\1\u0107\10\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\12\24\4\0"+ + "\13\24\1\u0108\7\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\6\24\1\u0109\3\24\4\0\7\24\1\u010a"+ + "\13\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\1\24\1\u010b\10\24\4\0\16\24\1\u010c\4\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\12\24\4\0"+ + "\1\24\1\u010d\6\24\1\u010e\12\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\15\24\1\u010f"+ + "\5\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\15\24\1\u0110\5\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\4\24\1\u0111"+ + "\2\24\1\u0112\13\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\7\24\1\u0113\2\24\4\0\12\24\1\u0114"+ + "\10\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\6\24\1\u0115\14\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\7\24\1\u0116"+ + "\13\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\10\24\1\u0117\12\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\1\u0118\22\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\5\24\1\u0119\2\24\1\u011a\12\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\4\24\1\u011b\5\24"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\1\24\1\u011c\21\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\10\24"+ + "\1\u011d\12\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\7\24\1\u011e\13\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\7\24\1\u011f\2\24"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\22\24\1\u0120\50\0\1\u0121\113\0"+ + "\1\u0122\100\0\1\u0123\1\0\1\u0123\3\0\3\u0123\5\0"+ + "\1\u0123\3\0\2\u0123\1\0\3\u0123\4\0\1\u0123\1\0"+ + "\1\u0123\6\0\1\u0123\46\0\1\u0124\1\0\1\u0124\3\0"+ + "\3\u0124\5\0\1\u0124\3\0\2\u0124\1\0\3\u0124\4\0"+ + "\1\u0124\1\0\1\u0124\6\0\1\u0124\44\0\1\u0125\113\0"+ + "\1\u0126\105\0\1\u0127\6\0\3\u0127\4\0\4\u0127\5\0"+ + "\4\u0127\1\0\4\u0127\4\0\23\u0127\2\0\1\u0128\22\0"+ + "\2\314\3\0\1\314\1\0\5\314\2\0\4\314\4\0"+ + "\12\314\4\0\23\314\32\0\1\u0129\7\0\1\u012a\76\0"+ + "\1\u012b\6\0\3\u012b\4\0\4\u012b\5\0\4\u012b\1\0"+ + "\4\u012b\4\0\23\u012b\35\0\1\u012c\1\0\1\u012c\3\0"+ + "\3\u012c\5\0\1\u012c\3\0\2\u012c\1\0\3\u012c\4\0"+ + "\1\u012c\1\0\1\u012c\6\0\1\u012c\46\0\1\u012d\1\0"+ + "\1\u012d\3\0\3\u012d\5\0\1\u012d\3\0\2\u012d\1\0"+ + "\3\u012d\4\0\1\u012d\1\0\1\u012d\6\0\1\u012d\50\0"+ + "\1\u012e\13\0\1\u012f\4\0\1\u012e\66\0\1\u0130\113\0"+ + "\1\u0131\116\0\1\335\15\0\2\335\1\0\1\335\1\0"+ + "\2\335\1\0\1\335\4\0\21\335\21\0\1\337\111\0"+ + "\1\340\2\341\1\340\1\342\1\u0132\43\340\1\344\42\340"+ + "\5\341\1\u0133\113\341\1\u0133\13\341\1\342\15\341\2\342"+ + "\1\341\1\342\1\341\2\342\1\341\1\342\4\341\21\342"+ + "\17\341\1\146\2\0\1\146\1\u0134\1\343\43\146\1\152"+ + "\42\146\1\340\2\341\1\340\1\u0135\1\u0132\43\340\1\344"+ + "\42\340\1\146\2\0\1\146\1\335\14\146\1\345\15\146"+ + "\2\345\1\146\1\345\1\146\2\345\1\146\1\345\1\146"+ + "\1\152\2\146\21\345\17\146\15\0\1\u0136\124\0\1\u0137"+ + "\120\0\1\u0138\102\0\1\356\13\0\1\356\4\0\1\356"+ + "\72\0\1\356\13\0\1\356\4\0\1\356\2\174\17\0"+ + "\1\174\34\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\11\24\1\u0139\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\11\24\1\u013a\4\0\23\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\4\24\1\u013b"+ + "\5\24\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\4\24\1\u013c\2\24\1\u013d"+ + "\13\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\4\24\1\u013e\16\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\4\24\1\u013f\5\24\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\4\24\1\u0140\16\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\2\24\1\u0141"+ + "\20\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\11\24\1\u0142\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\14\24\1\u0143\6\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u0144\4\0\23\24\23\0\3\376\7\0\3\376\3\0"+ + "\4\376\4\0\12\376\4\0\23\376\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\2\24\1\u0145"+ + "\20\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\1\24\1\u0146\10\24\4\0\23\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\u0147\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\7\24\1\u0148\13\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u0149\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\1\24\1\u014a\21\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\12\24\1\u014b\10\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u014c\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\10\24\1\u014d\12\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\11\24\1\u014e"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\5\24\1\u014f\15\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\4\24"+ + "\1\u0150\16\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\11\24\1\u0151\4\0\23\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\5\24\1\u0152"+ + "\4\24\1\u0153\10\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\7\24\1\u0154\13\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\11\24\1\u0155"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\2\24\1\u0156\20\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\11\24\1\u0157\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\2\24\1\u0158\20\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\14\24\1\u0159"+ + "\6\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\12\24\1\u015a\10\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\12\24\1\u015b"+ + "\10\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\7\24\1\u015c\13\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\17\24\1\u015d"+ + "\3\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\3\24\1\u015e\17\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\11\24\1\u015f"+ + "\11\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\10\24\1\u0160\12\24\35\0\1\u0161\1\0"+ + "\1\u0161\3\0\3\u0161\5\0\1\u0161\3\0\2\u0161\1\0"+ + "\3\u0161\4\0\1\u0161\1\0\1\u0161\6\0\1\u0161\46\0"+ + "\1\u0162\1\0\1\u0162\3\0\3\u0162\5\0\1\u0162\3\0"+ + "\2\u0162\1\0\3\u0162\4\0\1\u0162\1\0\1\u0162\6\0"+ + "\1\u0162\27\0\2\u0163\5\0\2\u0127\1\0\1\u0163\1\0"+ + "\1\u0127\1\u0164\5\u0127\2\0\4\u0127\4\0\12\u0127\4\0"+ + "\23\u0127\32\0\1\u0165\124\0\1\u0166\75\0\2\u012b\3\0"+ + "\1\u012b\1\0\5\u012b\2\0\4\u012b\4\0\12\u012b\4\0"+ + "\23\u012b\35\0\1\u0167\1\0\1\u0167\3\0\3\u0167\5\0"+ + "\1\u0167\3\0\2\u0167\1\0\3\u0167\4\0\1\u0167\1\0"+ + "\1\u0167\6\0\1\u0167\46\0\1\u0168\1\0\1\u0168\3\0"+ + "\3\u0168\5\0\1\u0168\3\0\2\u0168\1\0\3\u0168\4\0"+ + "\1\u0168\1\0\1\u0168\6\0\1\u0168\50\0\1\u012e\13\0"+ + "\1\u012e\1\u0169\3\0\1\u012e\20\0\1\u0169\66\0\1\u0169"+ + "\24\0\1\u0169\27\0\1\340\2\341\1\340\1\u0134\1\u0132"+ + "\43\340\1\344\42\340\4\341\1\337\1\u0133\106\341\1\340"+ + "\2\341\1\340\1\342\1\u0132\13\340\1\u0135\15\340\2\u0135"+ + "\1\340\1\u0135\1\340\2\u0135\1\340\1\u0135\1\340\1\344"+ + "\2\340\21\u0135\17\340\27\0\1\u016a\72\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\7\24\1\u016b\2\24\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\14\24\1\u016c\6\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\7\24\1\u016d"+ + "\13\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\10\24\1\u016e\12\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\4\24\1\u016f"+ + "\16\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\7\24\1\u0170\13\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\u0171\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\12\24\1\u0172\10\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\6\24\1\u0173\14\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\3\24\1\u0174\17\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\1\24\1\u0175\21\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\1\24\1\u0176\21\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\10\24\1\u0177\12\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\4\24"+ + "\1\u0178\5\24\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\1\24\1\u0179\21\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\4\24\1\u017a\16\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\17\24\1\u017b\3\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\13\24\1\u017c\7\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\5\24\1\u017d\15\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\1\24\1\u017e\21\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\11\24\1\u017f\4\0\23\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\12\24\4\0"+ + "\2\24\1\u0180\20\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\1\24\1\u0181\21\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\1\24\1\u0182"+ + "\10\24\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\7\24\1\u0183\13\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\6\24\1\u0184"+ + "\3\24\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\11\24\1\u0185\4\0\23\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\10\24"+ + "\1\u0186\12\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\11\24\1\u0187\4\0\23\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\2\24\1\u0188"+ + "\20\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\2\24\1\u0189\20\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\6\24\1\u018a"+ + "\14\24\16\0\2\u0163\10\0\1\u0163\2\0\1\u0164\124\0"+ + "\1\u018b\166\0\1\u018c\41\0\1\u018d\71\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\10\24\1\u018e"+ + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\6\24\1\u018f\14\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\10\24\1\u0190"+ + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\12\24\1\u0191\10\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\11\24\1\u0192"+ + "\11\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\6\24\1\u0193\14\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\4\24\1\u0194\5\24\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\14\24\1\u0195\6\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\10\24\1\u0196"+ + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\15\24\1\u0197\5\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\u0198\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24"+ + "\1\u0199\2\24\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u019a\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\6\24"+ + "\1\u019b\3\24\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\6\24\1\u019c\14\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24"+ + "\1\u019d\2\24\4\0\6\24\1\u019e\14\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\12\24"+ + "\1\u019f\10\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\11\24\1\u01a0\4\0\23\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\10\24\1\u01a1"+ + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\4\24\1\u01a2\5\24\4\0\23\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\4\24\1\u01a3\5\24\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\7\24\1\u01a4\13\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\20\24\1\u01a5"+ + "\2\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\10\24\1\u01a6\12\24\45\0\1\u01a7\114\0"+ + "\1\u01a8\70\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\6\24\1\u01a9\14\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\1\24\1\u01aa\10\24\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\5\24\1\u01ab\15\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\16\24\1\u01ac"+ + "\4\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\4\24\1\u01ad\16\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\12\24\4\0\11\24\1\u01ae"+ + "\11\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\2\24\1\u01af\20\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\u01b0\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\4\24"+ + "\1\u01b1\5\24\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\2\24\1\u01b2\20\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\2\24\1\u01b3\20\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u01b4\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\4\24"+ + "\1\u01b5\5\24\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\7\24\1\u01b6\13\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u01b7\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\11\24\1\u01b8\4\0\23\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\12\24\4\0\7\24"+ + "\1\u01b9\13\24\46\0\1\u01ba\112\0\1\u01bb\71\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\11\24\1\u01bc\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\11\24\1\u01bd\4\0\23\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\6\24\1\u01be\14\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u01bf\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\4\24\1\u01c0\5\24\4\0\23\24\23\0"+ + "\3\24\7\0\3\24\3\0\4\24\4\0\12\24\4\0"+ + "\6\24\1\u01c1\14\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\11\24\1\u01c2\4\0\23\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\4\24\1\u01c3\5\24"+ + "\4\0\23\24\23\0\3\24\7\0\3\24\3\0\4\24"+ + "\4\0\12\24\4\0\12\24\1\u01c4\10\24\23\0\3\24"+ + "\7\0\3\24\3\0\4\24\4\0\11\24\1\u01c5\4\0"+ + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\16\24\1\u01c6\4\24\45\0\1\u01c7\110\0"+ + "\1\u01c8\74\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\11\24\1\u01c9\11\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\11\24\1\u01ca\4\0\23\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\12\24"+ + "\4\0\7\24\1\u01cb\13\24\23\0\3\24\7\0\3\24"+ + "\3\0\4\24\4\0\12\24\4\0\5\24\1\u01cc\15\24"+ + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\11\24"+ + "\1\u01cd\4\0\23\24\23\0\3\24\7\0\3\24\3\0"+ + "\4\24\4\0\12\24\4\0\11\24\1\u01ce\11\24\42\0"+ + "\1\u01cf\74\0\3\24\7\0\3\24\3\0\4\24\4\0"+ + "\12\24\4\0\4\24\1\u01d0\16\24\23\0\3\24\7\0"+ + "\3\24\3\0\4\24\4\0\7\24\1\u01d1\2\24\4\0"+ + "\23\24\15\0"; - private static int[] zzUnpackRowMap() { - int[] result = new int[461]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[23940]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\15\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"+ + "\27\1\7\11\4\1\1\11\2\1\2\11\3\1\2\11"+ + "\1\1\1\11\3\1\2\11\1\1\1\11\1\1\2\11"+ + "\3\1\1\11\2\1\2\11\1\1\1\11\2\1\1\0"+ + "\1\1\1\0\1\1\1\0\1\11\1\1\1\11\1\1"+ + "\1\11\2\1\1\0\2\11\1\1\2\11\1\1\4\11"+ + "\1\0\3\1\1\0\14\1\2\11\3\0\37\1\1\11"+ + "\1\1\1\11\1\1\5\11\2\1\7\11\1\0\1\11"+ + "\1\0\2\11\3\0\1\1\2\0\2\11\2\1\7\11"+ + "\1\1\2\0\2\1\1\11\2\0\1\1\2\0\1\1"+ + "\2\11\2\0\1\11\1\1\1\11\1\0\1\1\1\11"+ + "\17\1\1\11\41\1\2\11\2\0\2\11\1\0\1\11"+ + "\2\0\1\1\4\0\2\11\2\0\2\1\1\11\1\0"+ + "\1\11\50\1\1\0\1\11\1\0\2\11\2\0\1\11"+ + "\2\0\40\1\1\0\1\11\1\0\31\1\2\0\21\1"+ + "\2\0\13\1\1\0\1\11\6\1\1\11\2\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[465]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** the input device */ + private java.io.Reader zzReader; - private static final String ZZ_TRANS_PACKED_0 - = "\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\16" - + "\1\24\1\25\1\26\1\21\1\27\1\30\1\31\1\32" - + "\2\24\1\33\1\16\1\34\1\35\4\24\1\36\1\37" - + "\1\40\1\41\1\42\2\24\1\43\1\33\1\24\1\44" - + "\1\45\1\16\1\46\1\47\1\50\1\51\1\52\1\24" - + "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62" - + "\1\24\1\63\1\24\1\64\2\24\1\65\1\66\1\67" - + "\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\77" - + "\1\100\1\101\1\102\1\103\1\104\1\16\1\105\1\106" - + "\1\107\31\105\1\110\11\105\1\111\45\105\1\112\1\113" - + "\1\114\32\112\1\115\10\112\1\111\45\112\1\16\1\116" - + "\1\117\1\120\1\121\3\16\1\122\2\16\1\120\2\16" - + "\1\123\3\122\4\16\4\122\5\16\3\122\1\16\2\122" - + "\4\16\26\122\2\16\1\124\13\16\1\116\1\117\10\16" - + "\1\125\2\16\1\126\131\16\1\127\44\16\1\130\12\16" - + "\1\131\1\116\1\117\21\131\1\132\70\131\1\116\1\117" - + "\27\131\1\133\62\131\1\134\1\135\12\131\1\136\77\131" - + "\1\116\1\117\7\131\1\137\66\131\1\140\12\131\1\141" - + "\1\113\1\114\43\141\1\142\1\143\44\141\1\131\1\116" - + "\1\117\27\131\1\144\62\131\1\134\1\135\12\131\1\145" - + "\76\131\116\0\1\20\114\0\1\21\7\0\1\21\100\0" - + "\1\146\2\0\1\146\1\147\1\150\25\146\1\151\12\146" - + "\1\152\45\146\33\0\1\153\66\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\26\24\26\0\1\154" - + "\1\155\7\0\1\156\13\0\1\156\3\0\1\156\34\0" - + "\1\157\24\0\1\160\1\0\1\161\1\0\1\162\2\0" - + "\3\160\4\0\4\160\1\0\1\163\3\0\3\160\1\0" - + "\2\160\4\0\26\160\2\0\1\164\45\0\1\165\75\0" - + "\1\166\15\0\1\167\76\0\1\170\14\0\1\171\77\0" - + "\1\172\105\0\1\156\10\0\1\33\13\0\1\33\3\0" - + "\1\33\2\173\102\0\1\174\71\0\1\156\10\0\1\175" - + "\13\0\1\176\2\177\1\0\1\176\2\173\55\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\2\24" - + "\1\200\3\24\1\201\2\24\1\202\1\203\13\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\1\24\1\204" - + "\5\24\4\0\2\24\1\205\11\24\1\206\11\24\50\0" - + "\1\207\11\0\1\210\115\0\1\211\66\0\1\212\13\0" - + "\1\213\3\0\1\212\57\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\1\24\1\214\24\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\6\24\1\215" - + "\4\0\26\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\5\24\1\216\20\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\2\24" - + "\1\217\3\24\1\220\5\24\1\221\11\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\222\4\0" - + "\10\24\1\223\1\24\1\224\2\24\1\225\10\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\22\24\1\226\3\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\227\4\0\2\24\1\230\7\24" - + "\1\231\13\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\1\24\1\232\14\24\1\233\1\24" - + "\1\234\5\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\3\24\1\235\3\24\4\0\5\24\1\236\1\24" - + "\1\237\11\24\1\240\4\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\5\24\1\241\1\24" - + "\1\242\16\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\6\24\1\243\4\0\6\24\1\244\11\24\1\245" - + "\5\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\11\24\1\246\4\24\1\247\7\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\1\24\1\250\1\251\7\24\1\252\13\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\2\24" - + "\1\253\3\24\1\254\17\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\6\24\1\255\4\0\26\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\7\24\1\256\16\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\2\24\1\257\23\24\50\0" - + "\1\260\52\0\1\261\40\0\1\262\53\0\1\263\37\0" - + "\1\264\113\0\1\265\60\0\1\105\2\0\31\105\1\0" - + "\11\105\1\0\45\105\2\0\1\107\111\0\1\266\3\0" - + "\30\266\1\267\1\270\1\266\1\271\1\266\1\272\4\266" - + "\1\273\2\266\1\274\1\275\5\266\1\276\1\277\1\266" - + "\1\300\27\266\1\0\1\112\2\0\32\112\1\0\10\112" - + "\1\0\45\112\2\0\1\114\113\0\1\117\114\0\1\120" - + "\7\0\1\120\116\0\1\301\105\0\2\302\3\0\1\302" - + "\1\0\5\302\2\0\4\302\1\0\1\303\2\0\7\302" - + "\4\0\26\302\30\0\1\125\100\0\1\304\2\0\31\304" - + "\1\305\57\304\16\0\1\306\127\0\1\307\63\0\1\135" - + "\126\0\1\310\102\0\1\311\3\0\1\312\3\0\1\313" - + "\2\0\3\312\2\0\1\314\1\0\4\312\5\0\3\312" - + "\1\0\2\312\4\0\26\312\2\0\1\315\12\0\1\316" - + "\3\0\33\316\1\317\1\316\1\320\4\316\1\321\1\322" - + "\1\316\1\323\1\324\5\316\1\325\1\326\1\316\1\327" - + "\15\316\1\330\11\316\33\0\1\331\76\0\1\332\76\0" - + "\1\146\2\0\1\146\1\333\41\146\1\152\45\146\1\147" - + "\1\334\1\335\111\147\1\336\2\337\1\336\1\340\1\341" - + "\40\336\1\342\45\336\1\146\2\0\1\146\1\343\41\146" - + "\1\152\45\146\11\0\1\344\124\0\1\156\13\0\1\156" - + "\3\0\1\156\2\173\57\0\2\160\3\0\1\160\1\0" - + "\5\160\2\0\4\160\4\0\7\160\4\0\26\160\50\0" - + "\1\345\75\0\1\346\7\0\1\347\121\0\1\350\76\0" - + "\1\351\14\0\1\352\75\0\1\353\4\0\1\354\13\0" - + "\1\354\3\0\1\354\2\0\1\353\101\0\1\355\71\0" - + "\1\156\10\0\1\175\13\0\1\175\3\0\1\175\2\173" - + "\60\0\1\156\10\0\1\175\13\0\1\176\3\0\1\176" - + "\2\173\67\0\1\356\1\0\1\356\3\0\3\356\5\0" - + "\1\356\2\0\4\356\4\0\1\356\1\0\1\356\1\0" - + "\1\356\6\0\1\356\35\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\14\24\1\357\11\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\1\24\1\360\24\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\7\24\1\361\16\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\7\24\1\362\16\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\10\24\1\363\15\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\4\24\1\364\21\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\5\24\1\365\20\24\23\0" - + "\1\366\1\0\1\366\7\0\2\366\4\0\4\366\5\0" - + "\3\366\1\0\2\366\4\0\26\366\37\0\1\212\13\0" - + "\1\212\3\0\1\212\57\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\367\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\10\24" - + "\1\370\15\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\5\24\1\371\2\24\1\372\15\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\7\24\1\373\16\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\2\24\1\374\23\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\10\24\1\375\15\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\2\24\1\376\23\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\17\24\1\377\6\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\11\24\1\u0100\14\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\6\24" - + "\1\u0101\4\0\26\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\15\24\1\u0102\10\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\10\24\1\u0103\10\24\1\u0104\4\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\14\24\1\u0105" - + "\11\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\12\24\1\u0106\5\24\1\u0107\5\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\1\24\1\u0108\7\24\1\u0109\14\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\17\24\1\u010a" - + "\6\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\5\24\1\u010b\2\24\1\u010c\15\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\17\24\1\u010d\6\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\u010e\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\13\24" - + "\1\u010f\12\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\3\24\1\u0110\3\24\4\0\14\24\1\u0111\11\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\7\24\1\u0112\16\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\10\24\1\u0113\15\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\11\24\1\u0114\14\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\6\24\1\u0115\2\24" - + "\1\u0116\14\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\4\24\1\u0117\21\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\1\u0118" - + "\25\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\1\24\1\u0119\24\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\11\24\1\u011a" - + "\14\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\10\24\1\u011b\15\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\3\24\1\u011c\3\24\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\25\24\1\u011d\50\0\1\u011e\113\0\1\u011f" - + "\100\0\1\u0120\1\0\1\u0120\3\0\3\u0120\5\0\1\u0120" - + "\2\0\4\u0120\4\0\1\u0120\1\0\1\u0120\1\0\1\u0120" - + "\6\0\1\u0120\47\0\1\u0121\1\0\1\u0121\3\0\3\u0121" - + "\5\0\1\u0121\2\0\4\u0121\4\0\1\u0121\1\0\1\u0121" - + "\1\0\1\u0121\6\0\1\u0121\45\0\1\u0122\113\0\1\u0123" - + "\105\0\1\u0124\6\0\3\u0124\4\0\4\u0124\5\0\3\u0124" - + "\1\0\2\u0124\4\0\26\u0124\2\0\1\u0125\22\0\2\312" - + "\3\0\1\312\1\0\5\312\2\0\4\312\4\0\7\312" - + "\4\0\26\312\32\0\1\u0126\7\0\1\u0127\76\0\1\u0128" - + "\6\0\3\u0128\4\0\4\u0128\5\0\3\u0128\1\0\2\u0128" - + "\4\0\26\u0128\35\0\1\u0129\1\0\1\u0129\3\0\3\u0129" - + "\5\0\1\u0129\2\0\4\u0129\4\0\1\u0129\1\0\1\u0129" - + "\1\0\1\u0129\6\0\1\u0129\47\0\1\u012a\1\0\1\u012a" - + "\3\0\3\u012a\5\0\1\u012a\2\0\4\u012a\4\0\1\u012a" - + "\1\0\1\u012a\1\0\1\u012a\6\0\1\u012a\51\0\1\u012b" - + "\13\0\1\u012c\3\0\1\u012b\67\0\1\u012d\113\0\1\u012e" - + "\116\0\1\333\15\0\1\333\1\0\1\333\2\0\1\333" - + "\4\0\24\333\21\0\1\335\111\0\1\336\2\337\1\336" - + "\1\340\1\u012f\40\336\1\342\45\336\5\337\1\u0130\113\337" - + "\1\u0130\13\337\1\340\15\337\1\340\1\337\1\340\2\337" - + "\1\340\4\337\24\340\17\337\1\146\2\0\1\146\1\u0131" - + "\1\341\40\146\1\152\45\146\1\336\2\337\1\336\1\u0132" - + "\1\u012f\40\336\1\342\45\336\1\146\2\0\1\146\1\333" - + "\14\146\1\343\15\146\1\343\1\146\1\343\2\146\1\343" - + "\1\146\1\152\2\146\24\343\17\146\15\0\1\u0133\124\0" - + "\1\u0134\120\0\1\u0135\102\0\1\354\13\0\1\354\3\0" - + "\1\354\57\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\5\24\1\u0136\20\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\2\24\1\u0137" - + "\23\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\4\24\1\u0138\21\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\6\24\1\u0139\4\0\26\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\16\24\1\u013a\7\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\6\24\1\u013b\4\0\26\24\23\0" - + "\3\366\7\0\3\366\3\0\4\366\4\0\7\366\4\0" - + "\26\366\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\2\24\1\u013c\23\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\12\24\1\u013d" - + "\13\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\6\24\1\u013e\4\0\26\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\4\24\1\u013f\21\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\5\24\1\u0140\2\24\1\u0141\15\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\5\24" - + "\1\u0142\20\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\10\24\1\u0143\15\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u0144\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\10\24\1\u0145\15\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\1\24\1\u0146" - + "\24\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\11\24\1\u0147\14\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\6\24\1\u0148\4\0\26\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\14\24\1\u0149\11\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\6\24\1\u014a\4\0\26\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\6\24\1\u014b\17\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\5\24\1\u014c\20\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\6\24\1\u014d" - + "\4\0\26\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\10\24\1\u014e\15\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u014f\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\6\24\1\u0150\5\24\1\u0151\11\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\6\24\1\u0152" - + "\4\0\26\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\2\24\1\u0153\23\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u0154\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\2\24\1\u0155\23\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\16\24\1\u0156" - + "\7\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\14\24\1\u0157\11\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\10\24\1\u0158" - + "\15\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\22\24\1\u0159\3\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\3\24\1\u015a" - + "\22\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\14\24\1\u015b\11\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\13\24\1\u015c" - + "\12\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\11\24\1\u015d\14\24\35\0\1\u015e\1\0" - + "\1\u015e\3\0\3\u015e\5\0\1\u015e\2\0\4\u015e\4\0" - + "\1\u015e\1\0\1\u015e\1\0\1\u015e\6\0\1\u015e\47\0" - + "\1\u015f\1\0\1\u015f\3\0\3\u015f\5\0\1\u015f\2\0" - + "\4\u015f\4\0\1\u015f\1\0\1\u015f\1\0\1\u015f\6\0" - + "\1\u015f\30\0\2\u0160\5\0\2\u0124\1\0\1\u0160\1\0" - + "\1\u0124\1\u0161\5\u0124\2\0\4\u0124\4\0\7\u0124\4\0" - + "\26\u0124\32\0\1\u0162\124\0\1\u0163\75\0\2\u0128\3\0" - + "\1\u0128\1\0\5\u0128\2\0\4\u0128\4\0\7\u0128\4\0" - + "\26\u0128\35\0\1\u0164\1\0\1\u0164\3\0\3\u0164\5\0" - + "\1\u0164\2\0\4\u0164\4\0\1\u0164\1\0\1\u0164\1\0" - + "\1\u0164\6\0\1\u0164\47\0\1\u0165\1\0\1\u0165\3\0" - + "\3\u0165\5\0\1\u0165\2\0\4\u0165\4\0\1\u0165\1\0" - + "\1\u0165\1\0\1\u0165\6\0\1\u0165\51\0\1\u012b\13\0" - + "\1\u012b\3\0\1\u012b\37\0\1\u0166\113\0\1\u0166\11\0" - + "\1\336\2\337\1\336\1\u0131\1\u012f\40\336\1\342\45\336" - + "\4\337\1\335\1\u0130\106\337\1\336\2\337\1\336\1\340" - + "\1\u012f\13\336\1\u0132\15\336\1\u0132\1\336\1\u0132\2\336" - + "\1\u0132\1\336\1\342\2\336\24\u0132\17\336\27\0\1\u0167" - + "\72\0\3\24\7\0\3\24\3\0\4\24\4\0\6\24" - + "\1\u0168\4\0\26\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\14\24\1\u0169\11\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\10\24\1\u016a\15\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\7\24\1\u016b\16\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\3\24\1\u016c\22\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\1\24\1\u016d\24\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\16\24\1\u016e\7\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\10\24\1\u016f\15\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\11\24\1\u0170\14\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\5\24\1\u0171\20\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\11\24\1\u0172\14\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\1\24\1\u0173\24\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\4\24\1\u0174\21\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\1\24\1\u0175\24\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\22\24\1\u0176\3\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\5\24\1\u0177\20\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\15\24\1\u0178\10\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\6\24\1\u0179\17\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\2\24\1\u017a\23\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\1\24\1\u017b\24\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\1\24\1\u017c\24\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\u017d\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\3\24\1\u017e\3\24" - + "\4\0\26\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\12\24\1\u017f\13\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\10\24" - + "\1\u0180\15\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\21\24\1\u0181\4\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u0182\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\6\24\1\u0183\4\0\26\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\2\24\1\u0184\23\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\2\24\1\u0185\23\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\11\24\1\u0186\14\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\7\24\1\u0187\16\24\16\0\2\u0160\10\0\1\u0160" - + "\2\0\1\u0161\124\0\1\u0188\114\0\1\u0189\71\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\14\24" - + "\1\u018a\11\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\11\24\1\u018b\14\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\13\24" - + "\1\u018c\12\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\7\24\1\u018d\16\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\7\24" - + "\1\u018e\16\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\4\24\1\u018f\21\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\16\24" - + "\1\u0190\7\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\11\24\1\u0191\14\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u0192\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\17\24\1\u0193\6\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\3\24\1\u0194\3\24\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\7\24\1\u0195\16\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\3\24\1\u0196\3\24\4\0" - + "\7\24\1\u0197\16\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\10\24\1\u0198\15\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\21\24\1\u0199\4\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\7\24\4\0\11\24\1\u019a\14\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\14\24\1\u019b\11\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\u019c\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\11\24" - + "\1\u019d\14\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\4\24\1\u019e\21\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\10\24" - + "\1\u019f\15\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\23\24\1\u01a0\2\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\4\24" - + "\1\u01a1\21\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\11\24\1\u01a2\14\24\45\0\1\u01a3" - + "\114\0\1\u01a4\70\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\20\24\1\u01a5\5\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\6\24" - + "\1\u01a6\17\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\5\24\1\u01a7\20\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\12\24" - + "\1\u01a8\13\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\13\24\1\u01a9\12\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\2\24" - + "\1\u01aa\23\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\4\24\1\u01ab\21\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\2\24" - + "\1\u01ac\23\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\2\24\1\u01ad\23\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u01ae\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\7\24\1\u01af\16\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\10\24\1\u01b0" - + "\15\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\4\24\1\u01b1\21\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\10\24\1\u01b2" - + "\15\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\6\24\1\u01b3\4\0\26\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\6\24\1\u01b4\4\0\26\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\10\24\1\u01b5\15\24\46\0\1\u01b6\112\0\1\u01b7\71\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\7\24\4\0" - + "\7\24\1\u01b8\16\24\23\0\3\24\7\0\3\24\3\0" - + "\4\24\4\0\6\24\1\u01b9\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\6\24\1\u01ba\4\0" - + "\26\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\7\24\4\0\4\24\1\u01bb\21\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\6\24\1\u01bc\4\0\26\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\4\24\1\u01bd\21\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\14\24\1\u01be\11\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\7\24\1\u01bf\16\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\6\24\1\u01c0\4\0\26\24\23\0" - + "\3\24\7\0\3\24\3\0\4\24\4\0\6\24\1\u01c1" - + "\4\0\26\24\23\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\7\24\4\0\20\24\1\u01c2\5\24\45\0\1\u01c3" - + "\110\0\1\u01c4\74\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\6\24\1\u01c5\4\0\26\24\23\0\3\24\7\0" - + "\3\24\3\0\4\24\4\0\7\24\4\0\6\24\1\u01c6" - + "\17\24\23\0\3\24\7\0\3\24\3\0\4\24\4\0" - + "\6\24\1\u01c7\4\0\26\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\10\24\1\u01c8\15\24" - + "\23\0\3\24\7\0\3\24\3\0\4\24\4\0\7\24" - + "\4\0\13\24\1\u01c9\12\24\23\0\3\24\7\0\3\24" - + "\3\0\4\24\4\0\7\24\4\0\13\24\1\u01ca\12\24" - + "\42\0\1\u01cb\74\0\3\24\7\0\3\24\3\0\4\24" - + "\4\0\3\24\1\u01cc\3\24\4\0\26\24\23\0\3\24" - + "\7\0\3\24\3\0\4\24\4\0\7\24\4\0\5\24" - + "\1\u01cd\20\24\15\0"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[23712]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /** the textposition at the last accepting state */ + private int zzMarkedPos; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** the current text position in the buffer */ + private int zzCurrentPos; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\15\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11" - + "\27\1\7\11\4\1\1\11\2\1\2\11\3\1\2\11" - + "\1\1\1\11\3\1\2\11\1\1\1\11\1\1\2\11" - + "\3\1\1\11\2\1\2\11\1\1\1\11\2\1\1\0" - + "\1\1\1\0\1\1\1\0\1\11\1\1\1\11\1\1" - + "\1\11\2\1\1\0\2\11\1\1\2\11\1\1\2\11" - + "\1\0\3\1\1\0\7\1\2\11\1\0\1\1\1\11" - + "\44\1\1\11\1\1\1\11\1\1\5\11\1\1\6\11" - + "\1\1\1\11\1\0\1\11\1\0\2\11\3\0\1\1" - + "\2\0\2\11\1\1\7\11\2\1\2\0\2\1\1\11" - + "\2\0\1\1\2\0\1\1\2\11\2\0\1\11\1\1" - + "\1\11\1\0\1\1\1\11\60\1\2\11\2\0\2\11" - + "\1\0\1\11\2\0\1\1\4\0\2\11\2\0\2\1" - + "\1\11\1\0\1\11\50\1\1\11\2\0\2\11\1\0" - + "\1\11\1\0\1\11\1\0\40\1\2\0\31\1\2\0" - + "\21\1\2\0\13\1\1\0\1\11\6\1\1\11\2\1"; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - private static int[] zzUnpackAttribute() { - int[] result = new int[461]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** the number of characters up to the start of the matched text */ + private int yychar; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - /** - * the input device - */ - private java.io.Reader zzReader; + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - /** - * the current state of the DFA - */ - private int zzState; + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - /** - * the current lexical state - */ - private int zzLexicalState = YYINITIAL; + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. + * When a lead/high surrogate has been read from the input stream + * into the final zzBuffer position, this will have a value of 1; + * otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; - /** - * this buffer contains the current text to be matched and is the source of - * the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + /* user code: */ - /** - * the textposition at the last accepting state - */ - private int zzMarkedPos; - - /** - * the current text position in the buffer - */ - private int zzCurrentPos; - - /** - * startRead marks the beginning of the yytext() string in the buffer - */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from - * input - */ - private int zzEndRead; - - /** - * number of newlines encountered up to the start of the matched text - */ - private int yyline; - - /** - * the number of characters up to the start of the matched text - */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** - * zzAtEOF == true <=> the scanner is at the EOF - */ - private boolean zzAtEOF; - - /** - * denotes if the user-EOF-code has already been executed - */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. When a - * lead/high surrogate has been read from the input stream into the final - * zzBuffer position, this will have a value of 1; otherwise, it will have a - * value of 0. - */ - private int zzFinalHighSurrogate = 0; - - /* user code: */ private String sourceCode; private int repeatNum = 1; private boolean enableWhiteSpace = false; - public ActionScriptLexer(String sourceCode) { + public ActionScriptLexer(String sourceCode){ this(new StringReader(sourceCode)); this.sourceCode = sourceCode; } - public void yypushbackstr(String s, int state) { + public void yypushbackstr(String s, int state) + { int numLines = count(s, "\n"); int newYyline = yyline - numLines; sourceCode = s + sourceCode.substring(yychar + yylength()); @@ -978,16 +948,19 @@ public final class ActionScriptLexer { yyline = newYyline; } - public void setEnableWhiteSpace(boolean enable) { + public void setEnableWhiteSpace(boolean enable) + { this.enableWhiteSpace = enable; } - public void begin(int state) { + public void begin(int state) + { string.setLength(0); yybegin(state); } - public void yypushbackstr(String s) { + public void yypushbackstr(String s) + { yypushbackstr(s, YYINITIAL); } @@ -1005,24 +978,24 @@ public final class ActionScriptLexer { return yyline + 1; } - private List listeners = new ArrayList<>(); + private List listeners=new ArrayList<>(); - public void addListener(LexListener listener) { + public void addListener(LexListener listener){ listeners.add(listener); } - public void removeListener(LexListener listener) { + public void removeListener(LexListener listener){ listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ l.onPushBack(s); } } @@ -1034,10 +1007,9 @@ public final class ActionScriptLexer { } ParsedSymbol last; - - public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException { + public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{ ParsedSymbol ret = null; - if (!pushedBack.isEmpty()) { + if (!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); } else { ret = last = yylex(); @@ -1050,1387 +1022,1184 @@ public final class ActionScriptLexer { return (str.length() - str.replace(target, "").length()) / target.length(); } - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x110000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 3136) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x110000]; - int i = 0; - /* index in packed string */ - int j = 0; - /* index in unpacked array */ - while (i < 3136) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } + + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } + + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; } - return map; + } + return false; } - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * @throws java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { + // totalRead = 0: End of stream + return true; + } - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; - } + if (zzReader != null) + zzReader.close(); + } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - } - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { - /* possibly more input available */ - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; - } - } - return false; - } - // totalRead = 0: End of stream - return true; + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; - /* indicate end of file */ - zzEndRead = zzStartRead; - /* invalidate buffer */ + throw new Error(message); + } - if (zzReader != null) { - zzReader.close(); - } - } - /** - * Resets the scanner to read from a new input stream. Does not close the - * old reader. - *

- * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). Lexical - * state is set to ZZ_INITIAL. - *

- * Internal scan buffer is resized down to its initial length, if it has - * grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + zzMarkedPos -= number; + } - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { + int zzInput; + int zzAction; - /** - * Returns the character at position pos from the matched text. - *

- * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. A value from 0 to - * yylength()-1. - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Reports an error that occured while scanning. - *

- * In a wellformed scanner (no or only correct usage of yypushback(int) and - * a match-all fallback rule) this method will only be called with things - * that "Can't Possibly Happen". If this method is called, something is - * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). - *

- * Usual syntax/scanner level error handling should be done in error - * fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - throw new Error(message); - } + yychar+= zzMarkedPosL-zzStartRead; - /** - * Pushes the specified amount of characters back into the input stream. - *

- * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. This number must - * not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) { - zzScanError(ZZ_PUSHBACK_2BIG); - } + zzAction = -1; - zzMarkedPos -= number; - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - /** - * Resumes scanning until the next regular expression is matched, the end of - * input is encountered or an I/O-Error occurs. - * - * @return the next token - * @throws java.io.IOException if any I/O-Error occurs - */ - public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { - int zzInput; - int zzAction; + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar += zzMarkedPosL - zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - - zzForAction: - { - while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) { - break zzForAction; - } - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) { - break zzForAction; - } - } - - } + else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - // store back cached position - zzMarkedPos = zzMarkedPosL; + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - } - case 180: - break; - case 2: { - yyline++; - if (enableWhiteSpace) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); - } - } - case 181: - break; - case 3: { - if (enableWhiteSpace) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); - } - } - case 182: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 183: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 184: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 185: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 186: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 187: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 188: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 189: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 190: - break; - case 12: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 191: - break; - case 13: { - try { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext())); - } catch (NumberFormatException nfe) { - //its too long for an Integer var - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext())); - } - } - case 192: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 193: - break; - case 15: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 194: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 195: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 196: - break; - case 18: { - string.setLength(0); - yybegin(STRING); - } - case 197: - break; - case 19: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 198: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 199: - break; - case 21: { - string.setLength(0); - yybegin(OIDENTIFIER); - } - case 200: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 201: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 202: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 203: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 204: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 205: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 206: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 207: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 208: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 209: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 210: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 211: - break; - case 33: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 212: - break; - case 34: { - string.append(yytext()); - } - case 213: - break; - case 35: { - yybegin(YYINITIAL); - yyline++; - } - case 214: - break; - case 36: { - yybegin(YYINITIAL); - // length also includes the trailing quote - String tos = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, tos); - } - case 215: - break; - case 37: { - yybegin(YYINITIAL); - yyline++; - } - case 216: - break; - case 38: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 217: - break; - case 39: { - string.append(yytext()); - yyline++; - } - case 218: - break; - case 40: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 219: - break; - case 41: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 220: - break; - case 42: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 221: - break; - case 43: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 222: - break; - case 44: { - string.append(yytext()); - yyline++; - } - case 223: - break; - case 45: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 224: - break; - case 46: { - for (int r = 0; r < repeatNum; r++) { - string.append(yytext()); - } - repeatNum = 1; - } - case 225: - break; - case 47: { - yybegin(YYINITIAL); - repeatNum = 1; - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); - } - case 226: - break; - case 48: { - yyline += count(yytext(), "\n"); - } - case 227: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 228: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 229: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); - } - case 230: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); - } - case 231: - break; - case 53: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext())); - } - case 232: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); - } - case 233: - break; - case 55: { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 234: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 235: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 236: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 237: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 238: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 239: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 240: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 241: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 242: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 243: - break; - case 65: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 244: - break; - case 66: { - try { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8)); - } catch (NumberFormatException nfe) { - //its too long for an Integer var - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue()); - } - } - case 245: - break; - case 67: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 246: - break; - case 68: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 247: - break; - case 69: { - return new ParsedSymbol(SymbolGroup.NAMESPACESUFFIX, SymbolType.NAMESPACESUFFIX, Integer.parseInt(yytext().substring(1))); - } - case 248: - break; - case 70: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 249: - break; - case 71: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 250: - break; - case 72: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 251: - break; - case 73: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 252: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 253: - break; - case 75: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 254: - break; - case 76: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 255: - break; - case 77: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 256: - break; - case 78: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 257: - break; - case 79: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 258: - break; - case 80: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 259: - break; - case 81: { - /* ignore illegal character escape */ - } - case 260: - break; - case 82: { - string.append('\"'); - } - case 261: - break; - case 83: { - string.append('\''); - } - case 262: - break; - case 84: { - string.append('\f'); - } - case 263: - break; - case 85: { - string.append('\\'); - } - case 264: - break; - case 86: { - string.append('\b'); - } - case 265: - break; - case 87: { - string.append('\r'); - } - case 266: - break; - case 88: { - string.append('\n'); - } - case 267: - break; - case 89: { - string.append('\t'); - } - case 268: - break; - case 90: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 269: - break; - case 91: { - yybegin(XMLOPENTAGATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 270: - break; - case 92: { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 271: - break; - case 93: { - yybegin(XML); - string.append(yytext()); - String tos = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR, tos); - } - case 272: - break; - case 94: { - yybegin(XMLOPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 273: - break; - case 95: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 274: - break; - case 96: { - throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 275: - break; - case 97: { - for (int r = 0; r < repeatNum; r++) { - string.append('\f'); - } - repeatNum = 1; - } - case 276: - break; - case 98: { - for (int r = 0; r < repeatNum; r++) { - string.append('\\'); - } - repeatNum = 1; - } - case 277: - break; - case 99: { - for (int r = 0; r < repeatNum; r++) { - string.append('\u00A7'); - } - repeatNum = 1; - } - case 278: - break; - case 100: { - for (int r = 0; r < repeatNum; r++) { - string.append('\b'); - } - repeatNum = 1; - } - case 279: - break; - case 101: { - for (int r = 0; r < repeatNum; r++) { - string.append('\r'); - } - repeatNum = 1; - } - case 280: - break; - case 102: { - for (int r = 0; r < repeatNum; r++) { - string.append('\n'); - } - repeatNum = 1; - } - case 281: - break; - case 103: { - for (int r = 0; r < repeatNum; r++) { - string.append('\t'); - } - repeatNum = 1; - } - case 282: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.REGEXP, SymbolType.REGEXP, yytext()); - } - case 283: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 284: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 285: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 286: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 287: - break; - case 109: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 288: - break; - case 110: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 289: - break; - case 111: { - try { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16)); - } catch (NumberFormatException nfe) { - //its too long for an Integer var - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue()); - } - } - case 290: - break; - case 112: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 291: - break; - case 113: { - return new ParsedSymbol(SymbolGroup.PREPROCESSOR, SymbolType.PREPROCESSOR, yytext().substring(2)); - } - case 292: - break; - case 114: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.SET, yytext()); - } - case 293: - break; - case 115: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 294: - break; - case 116: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 295: - break; - case 117: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 296: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 297: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.GET, yytext()); - } - case 298: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 299: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_AND, yytext()); - } - case 300: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_OR, yytext()); - } - case 301: - break; - case 123: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 302: - break; - case 124: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 303: - break; - case 125: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 304: - break; - case 126: { - yybegin(XMLINSTR); - if (string.length() > 0) { - String tos = string.toString(); - string.setLength(0); - string.append(yytext()); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, tos); - } - string.append(yytext()); - } - case 305: - break; - case 127: { - string.append(yytext()); - yybegin(YYINITIAL); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 306: - break; - case 128: { - string.append(yytext()); - yybegin(YYINITIAL); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 307: - break; - case 129: { - string.setLength(0); - string.append(yytext()); - yybegin(XMLCOMMENTALONE); - } - case 308: - break; - case 130: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 309: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); - } - case 310: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 311: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 312: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 313: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 314: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 315: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 316: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 317: - break; - case 139: { - char val = (char) Integer.parseInt(yytext().substring(2), 16); - string.append(val); - } - case 318: - break; - case 140: { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 319: - break; - case 141: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCOMMENT); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 320: - break; - case 142: { - char val = (char) Integer.parseInt(yytext().substring(2), 16); - for (int r = 0; r < repeatNum; r++) { - string.append(val); - } - repeatNum = 1; - } - case 321: - break; - case 143: { - repeatNum = Integer.parseInt(yytext().substring(2, yytext().length() - 1)); - } - case 322: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 323: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.FINAL, yytext()); - } - case 324: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 325: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 326: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 327: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 328: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 329: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 330: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 331: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 332: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.STATIC, yytext()); - } - case 333: - break; - case 155: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 334: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NATIVE, yytext()); - } - case 335: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 336: - break; - case 158: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 337: - break; - case 159: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 338: - break; - case 160: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 339: - break; - case 161: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 340: - break; - case 162: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 341: - break; - case 163: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 342: - break; - case 164: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.DYNAMIC, yytext()); - } - case 343: - break; - case 165: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 344: - break; - case 166: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 345: - break; - case 167: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 346: - break; - case 168: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 347: - break; - case 169: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.OVERRIDE, yytext()); - } - case 348: - break; - case 170: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 349: - break; - case 171: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 350: - break; - case 172: { - string.setLength(0); - string.append(yytext()); - yybegin(XMLCDATAALONE); - } - case 351: - break; - case 173: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE, yytext()); - } - case 352: - break; - case 174: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 353: - break; - case 175: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 354: - break; - case 176: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 355: - break; - case 177: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCDATA); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 356: - break; - case 178: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 357: - break; - case 179: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 358: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 180: break; + case 2: + { yyline++; + if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); } + } + case 181: break; + case 3: + { if (enableWhiteSpace) { return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_WHITESPACE, yytext()); } + } + case 182: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 183: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 184: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 185: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 186: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 187: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 188: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 189: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 190: break; + case 12: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 191: break; + case 13: + { String dval = yytext(); + if (dval.endsWith("m")) { + dval = dval.substring(0, dval.length() - 1); + return new ParsedSymbol(SymbolGroup.DECIMAL, SymbolType.DECIMAL, new Decimal128(dval)); + } + if (dval.endsWith("f")) { + dval = dval.substring(0, dval.length() - 1); + return new ParsedSymbol(SymbolGroup.FLOAT, SymbolType.FLOAT, Float.parseFloat(dval)); + } + if (dval.endsWith("d")) { + dval = dval.substring(0, dval.length() - 1); + } + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(dval)); + } + case 192: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 193: break; + case 15: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 194: break; + case 16: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 195: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 196: break; + case 18: + { string.setLength(0); + yybegin(STRING); + } + case 197: break; + case 19: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 198: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 199: break; + case 21: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 200: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 201: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 202: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 203: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 204: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 205: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 206: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 207: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 208: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 209: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 210: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 211: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 212: break; + case 34: + { string.append(yytext()); + } + case 213: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 214: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + String tos = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, tos); + } + case 215: break; + case 37: + { yybegin(YYINITIAL); yyline++; + } + case 216: break; + case 38: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 217: break; + case 39: + { string.append(yytext()); yyline++; + } + case 218: break; + case 40: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 219: break; + case 41: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 220: break; + case 42: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 221: break; + case 43: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 222: break; + case 44: + { string.append(yytext()); yyline++; + } + case 223: break; + case 45: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 224: break; + case 46: + { for(int r=0;r 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 268: break; + case 90: + { yybegin(XMLOPENTAGATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 269: break; + case 91: + { yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 270: break; + case 92: + { yybegin(XML); + string.append(yytext()); + String tos = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR, tos); + } + case 271: break; + case 93: + { yybegin(XMLOPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 272: break; + case 94: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 273: break; + case 95: + { throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 274: break; + case 96: + { for(int r=0;r 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 304: break; + case 126: + { yybegin(XMLINSTR); + if (string.length() > 0){ + String tos = string.toString(); + string.setLength(0); + string.append(yytext()); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, tos); + } + string.append(yytext()); + } + case 305: break; + case 127: + { string.append(yytext()); + yybegin(YYINITIAL); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); + } + case 306: break; + case 128: + { string.append(yytext()); + yybegin(YYINITIAL); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); + } + case 307: break; + case 129: + { string.setLength(0); string.append(yytext() ); yybegin(XMLCOMMENTALONE); + } + case 308: break; + case 130: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 309: break; + case 131: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 310: break; + case 132: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.EACH, yytext()); + } + case 311: break; + case 133: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 312: break; + case 134: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); + } + case 313: break; + case 135: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 314: break; + case 136: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 315: break; + case 137: + { return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 316: break; + case 138: + { return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 317: break; + case 139: + { char val = (char) Integer.parseInt(yytext().substring(2), 16); + string.append(val); + } + case 318: break; + case 140: + { pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext())); + if (string.length() > 0){ + pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 319: break; + case 141: + { String ret = string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); + if (!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); + } + case 320: break; + case 142: + { char val = (char) Integer.parseInt(yytext().substring(2), 16); + for(int r=0;rnbt4y0;L_!7Pty delta 45 vcmbQkew1y3xFC}n4+8@OBNQ_nVAyDJi;0JknT3_(f`Kt(1Ix9^sm$g8vQG%Z diff --git a/libsrc/ffdec_lib/testdata/decimal/bin/decimal.cpp b/libsrc/ffdec_lib/testdata/decimal/bin/decimal.cpp index 86b7d4563..416fb62ad 100644 --- a/libsrc/ffdec_lib/testdata/decimal/bin/decimal.cpp +++ b/libsrc/ffdec_lib/testdata/decimal/bin/decimal.cpp @@ -1,11 +1,12 @@ -const int decimal_abc_length = 837; +const int decimal_abc_length = 924; const int decimal_abc_method_count = 0; const int decimal_abc_class_count = 6; const int decimal_abc_script_count = 2; -const unsigned char decimal_abc_data[837] = { +const unsigned char decimal_abc_data[924] = { 0x11, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x02, 0x26, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, -0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x16, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, +0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x03, 0x26, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, +0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x22, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x06, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x03, 0x69, 0x6e, 0x74, 0x07, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x12, 0x5f, 0x5f, 0x41, 0x53, 0x33, 0x5f, 0x5f, 0x2e, 0x76, 0x65, 0x63, 0x3a, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x0b, 0x5f, 0x5f, 0x41, 0x53, 0x33, 0x5f, 0x5f, 0x2e, @@ -51,8 +52,12 @@ const unsigned char decimal_abc_data[837] = { 0x66, 0x01, 0x30, 0x5d, 0x01, 0x66, 0x01, 0x58, 0x04, 0x1d, 0x68, 0x05, 0x5d, 0x0b, 0x24, 0x00, 0x24, 0x00, 0xa3, 0x68, 0x0c, 0x5d, 0x0d, 0x24, 0x01, 0x24, 0x00, 0xa3, 0x68, 0x0e, 0x5d, 0x0f, 0x21, 0x68, 0x10, 0x47, 0x00, 0x00, 0x0b, 0x01, 0x01, 0x03, 0x04, 0x03, 0xd0, 0x30, 0x47, 0x00, -0x00, 0x0c, 0x01, 0x03, 0x04, 0x05, 0x08, 0xd0, 0x30, 0x33, 0x01, 0x80, 0x04, 0xd6, 0x47, 0x00, -0x00, 0x0d, 0x01, 0x02, 0x04, 0x05, 0x03, 0xd0, 0x30, 0x47, 0x00, 0x00, 0x0e, 0x01, 0x01, 0x04, -0x05, 0x06, 0xd0, 0x30, 0xd0, 0x49, 0x00, 0x47, 0x00, 0x00, 0x0f, 0x02, 0x01, 0x01, 0x03, 0x13, -0xd0, 0x30, 0x65, 0x00, 0x5d, 0x01, 0x66, 0x01, 0x30, 0x5d, 0x01, 0x66, 0x01, 0x58, 0x05, 0x1d, -0x68, 0x17, 0x47, 0x00, 0x00 }; +0x00, 0x0c, 0x02, 0x05, 0x04, 0x05, 0x4f, 0xd0, 0x30, 0x21, 0x82, 0x63, 0x04, 0x33, 0x01, 0x80, +0x04, 0xd6, 0x33, 0x02, 0x73, 0xd7, 0xd2, 0xd3, 0xb5, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0xd2, 0xd3, +0xb6, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0xd2, 0xd3, 0xb8, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0xd2, 0xd3, +0xb9, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0xd2, 0xd3, 0xb7, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0x62, 0x04, +0x9c, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0x62, 0x04, 0x9e, 0xb1, 0x0a, 0x82, 0x63, 0x04, 0xd2, 0x8f, +0xb1, 0x0a, 0x82, 0x63, 0x04, 0x47, 0x00, 0x00, 0x0d, 0x01, 0x02, 0x04, 0x05, 0x03, 0xd0, 0x30, +0x47, 0x00, 0x00, 0x0e, 0x01, 0x01, 0x04, 0x05, 0x06, 0xd0, 0x30, 0xd0, 0x49, 0x00, 0x47, 0x00, +0x00, 0x0f, 0x02, 0x01, 0x01, 0x03, 0x13, 0xd0, 0x30, 0x65, 0x00, 0x5d, 0x01, 0x66, 0x01, 0x30, +0x5d, 0x01, 0x66, 0x01, 0x58, 0x05, 0x1d, 0x68, 0x17, 0x47, 0x00, 0x00 }; diff --git a/libsrc/ffdec_lib/testdata/decimal/src/mypkg/MyClass.as b/libsrc/ffdec_lib/testdata/decimal/src/mypkg/MyClass.as index db016e898..f70a9e695 100644 --- a/libsrc/ffdec_lib/testdata/decimal/src/mypkg/MyClass.as +++ b/libsrc/ffdec_lib/testdata/decimal/src/mypkg/MyClass.as @@ -9,9 +9,19 @@ package mypkg { //Presision values: HALF_EVEN, DOWN, FLOOR, UP, CEILING, HALF_UP, HALF_DOWN - //use precision 10, rounding FLOOR; + use decimal, precision 20, rounding FLOOR; - var a:decimal = 10000000010000000002000000000300000000040000000005m; + var a:decimal = 10000000010000000002000000000300000000040000000005m; + var b:int = 10; + var c:*; + c = a + b; + c = a - b; + c = a / b; + c = a % b; + c = a * b; + ++c; + --c; + c = -a; } private function testd(arg_d:decimal) {