diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index e50a0d9d5..d61287d25 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -61,7 +61,6 @@ import com.jpexs.decompiler.flash.tags.DefineButtonTag; import com.jpexs.decompiler.flash.tags.DefineSoundTag; import com.jpexs.decompiler.flash.tags.DefineSpriteTag; import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import com.jpexs.decompiler.flash.tags.DoInitActionTag; import com.jpexs.decompiler.flash.tags.ExportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; diff --git a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java index c88803ad3..5c41b537d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -585,7 +585,7 @@ public class SWFInputStream extends InputStream { if (ins.isBranch() || ins.isJump()) { - if (ins instanceof ActionIf && !stack.isEmpty() && (stack.peek().isCompileTime()&&(!stack.peek().hasSideEffect()))) { + if (ins instanceof ActionIf && !stack.isEmpty() && (stack.peek().isCompileTime() && (!stack.peek().hasSideEffect()))) { ActionIf aif = (ActionIf) ins; if (aif.ignoreUsed && (!aif.jumpUsed)) { ins.setIgnored(true); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/ABC.java b/trunk/src/com/jpexs/decompiler/flash/abc/ABC.java index c742a789a..4a600cced 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -28,7 +28,6 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.abc.usages.*; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.io.*; import java.util.ArrayList; import java.util.HashMap; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 7cb031653..b1a9573ab 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2414,7 +2414,8 @@ public class AVM2Code implements Serializable { private static int removeTraps(boolean secondPass, boolean useVisited, List localData, Stack stack, List output, AVM2GraphSource code, int ip, int lastIp, List visited, HashMap decisions) { boolean debugMode = false; int ret = 0; - iploop:while ((ip > -1) && ip < code.size()) { + iploop: + while ((ip > -1) && ip < code.size()) { if (useVisited && visited.contains(ip)) { break; } @@ -2430,59 +2431,59 @@ public class AVM2Code implements Serializable { if (debugMode) { System.out.println((useVisited ? "useV " : "") + "Visit " + ip + ": " + ins + " stack:" + Highlighting.stripHilights(stack.toString())); } - AVM2Instruction ains=(AVM2Instruction)ins; + AVM2Instruction ains = (AVM2Instruction) ins; if (ains.definition instanceof DupIns) { - do { - AVM2Instruction insAfter = (AVM2Instruction)code.get(ip + 1); - if (insAfter.definition instanceof ConvertBIns) { //SWF compiled with debug contain convert_b - ip++; - insAfter = (AVM2Instruction)code.get(ip + 1); - } + do { + AVM2Instruction insAfter = (AVM2Instruction) code.get(ip + 1); + if (insAfter.definition instanceof ConvertBIns) { //SWF compiled with debug contain convert_b + ip++; + insAfter = (AVM2Instruction) code.get(ip + 1); + } - if (insAfter.definition instanceof SetLocalTypeIns) { - //chained assignments - int reg = (((SetLocalTypeIns) insAfter.definition).getRegisterId(insAfter)); - for (int t = ip + 1; t < code.size(); t++) { - if (((AVM2Instruction)code.get(t)).definition instanceof KillIns) { - if (((AVM2Instruction)code.get(t)).operands[0] == reg) { - break; - } + if (insAfter.definition instanceof SetLocalTypeIns) { + //chained assignments + int reg = (((SetLocalTypeIns) insAfter.definition).getRegisterId(insAfter)); + for (int t = ip + 1; t < code.size(); t++) { + if (((AVM2Instruction) code.get(t)).definition instanceof KillIns) { + if (((AVM2Instruction) code.get(t)).operands[0] == reg) { + break; } - if (((AVM2Instruction)code.get(t)).definition instanceof GetLocalTypeIns) { - if (((GetLocalTypeIns) ((AVM2Instruction)code.get(t)).definition).getRegisterId((AVM2Instruction)code.get(t)) == reg) { - if (((AVM2Instruction)code.get(t + 1)).definition instanceof KillIns) { - if (((AVM2Instruction)code.get(t + 1)).operands[0] == reg) { - code.getCode().initToSource(); - ConvertOutput assignment = code.getCode().toSourceOutput(false, (Boolean)localData.get(0), (Integer)localData.get(1), (HashMap)localData.get(2), stack, (Stack)localData.get(3), (ABC)localData.get(7), (ConstantPool)localData.get(4), (MethodInfo[])localData.get(5), (MethodBody)localData.get(6), ip + 2, t - 1, (HashMap)localData.get(8), (List)localData.get(9), null); - stack.push(assignment.output.remove(assignment.output.size() - 1)); - ip = t + 2; - continue iploop; - } + } + if (((AVM2Instruction) code.get(t)).definition instanceof GetLocalTypeIns) { + if (((GetLocalTypeIns) ((AVM2Instruction) code.get(t)).definition).getRegisterId((AVM2Instruction) code.get(t)) == reg) { + if (((AVM2Instruction) code.get(t + 1)).definition instanceof KillIns) { + if (((AVM2Instruction) code.get(t + 1)).operands[0] == reg) { + code.getCode().initToSource(); + ConvertOutput assignment = code.getCode().toSourceOutput(false, (Boolean) localData.get(0), (Integer) localData.get(1), (HashMap) localData.get(2), stack, (Stack) localData.get(3), (ABC) localData.get(7), (ConstantPool) localData.get(4), (MethodInfo[]) localData.get(5), (MethodBody) localData.get(6), ip + 2, t - 1, (HashMap) localData.get(8), (List) localData.get(9), null); + stack.push(assignment.output.remove(assignment.output.size() - 1)); + ip = t + 2; + continue iploop; } } } } - if (!code.getCode().isKilled(reg, 0, code.size()-1)) { - for (int i = ip; i >= 0; i--) { - if (((AVM2Instruction)code.get(i)).definition instanceof DupIns) { - GraphTargetItem v = stack.pop(); - stack.push(new LocalRegTreeItem((AVM2Instruction)ins, reg, v)); - stack.push(v); - } else { - break; - } - } - } else { - break; - } - ip++; - continue iploop; - //} - - } else { - break; } - } while (((AVM2Instruction)ins).definition instanceof DupIns); + if (!code.getCode().isKilled(reg, 0, code.size() - 1)) { + for (int i = ip; i >= 0; i--) { + if (((AVM2Instruction) code.get(i)).definition instanceof DupIns) { + GraphTargetItem v = stack.pop(); + stack.push(new LocalRegTreeItem((AVM2Instruction) ins, reg, v)); + stack.push(v); + } else { + break; + } + } + } else { + break; + } + ip++; + continue iploop; + //} + + } else { + break; + } + } while (((AVM2Instruction) ins).definition instanceof DupIns); } if ((ins instanceof AVM2Instruction) && (((AVM2Instruction) ins).definition instanceof NewFunctionIns)) { stack.push(new BooleanTreeItem(null, true)); @@ -2493,11 +2494,11 @@ public class AVM2Code implements Serializable { break; } - + if (ins.isBranch() || ins.isJump()) { List branches = ins.getBranches(code); if ((ins instanceof AVM2Instruction) && ((AVM2Instruction) ins).definition instanceof IfTypeIns - && (!(((AVM2Instruction) ins).definition instanceof JumpIns)) && (!stack.isEmpty()) && (stack.peek().isCompileTime())&&(!stack.peek().hasSideEffect())) { + && (!(((AVM2Instruction) ins).definition instanceof JumpIns)) && (!stack.isEmpty()) && (stack.peek().isCompileTime()) && (!stack.peek().hasSideEffect())) { boolean condition = stack.peek().toBoolean(); if (debugMode) { if (condition) { diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index 53d046035..5fa2c2952 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -73,8 +73,6 @@ public class AVM2Graph extends Graph { public AVM2Code getCode() { return code; } - - public AVM2Graph(AVM2Code code, ABC abc, MethodBody body, boolean isStatic, int classIndex, HashMap localRegs, Stack scopeStack, HashMap localRegNames, List fullyQualifiedNames) { super(new AVM2GraphSource(code, isStatic, classIndex, localRegs, scopeStack, abc, body, localRegNames, fullyQualifiedNames), body.getExceptionEntries()); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java index 6343ad75f..48c4007c3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2GraphSource.java @@ -31,8 +31,6 @@ public class AVM2GraphSource extends GraphSource { public AVM2Code getCode() { return code; } - - public AVM2GraphSource(AVM2Code code, boolean isStatic, int classIndex, HashMap localRegs, Stack scopeStack, ABC abc, MethodBody body, HashMap localRegNames, List fullyQualifiedNames) { this.code = code; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/jumps/JumpIns.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/jumps/JumpIns.java index 0bcc7379c..6e6bb986f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/jumps/JumpIns.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/instructions/jumps/JumpIns.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.IfTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; -import com.jpexs.decompiler.flash.abc.avm2.treemodel.BooleanTreeItem; import com.jpexs.decompiler.flash.abc.types.MethodInfo; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.util.HashMap; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostDecrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostDecrementTreeItem.java index 8bba3c9bb..9f308ddd5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostDecrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostDecrementTreeItem.java @@ -37,7 +37,7 @@ public class PostDecrementTreeItem extends TreeItem implements AssignmentTreeIte public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { return object.toString(Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("--"); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostIncrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostIncrementTreeItem.java index 57684611b..4c7c6312d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostIncrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/PostIncrementTreeItem.java @@ -37,7 +37,7 @@ public class PostIncrementTreeItem extends TreeItem implements AssignmentTreeIte public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { return object.toString(Helper.toList(constants, localRegNames, fullyQualifiedNames)) + hilight("++"); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetGlobalSlotTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetGlobalSlotTreeItem.java index 4cb267617..99e5ae945 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetGlobalSlotTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetGlobalSlotTreeItem.java @@ -37,7 +37,7 @@ public class SetGlobalSlotTreeItem extends TreeItem { public String toString(ConstantPool constants, HashMap localRegNames, List fullyQualifiedNames) { return hilight("setglobalslot(" + slotId + ",") + value.toString(constants, localRegNames, fullyQualifiedNames) + hilight(")"); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetLocalTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetLocalTreeItem.java index 61a71b2a1..366cdbc35 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetLocalTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetLocalTreeItem.java @@ -53,6 +53,4 @@ public class SetLocalTreeItem extends TreeItem implements SetTypeTreeItem, Assig public boolean hasSideEffect() { return true; } - - } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetPropertyTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetPropertyTreeItem.java index dabe8ff2b..23f6f3ad1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetPropertyTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetPropertyTreeItem.java @@ -50,7 +50,7 @@ public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem, As public GraphTargetItem getValue() { return value; } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSlotTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSlotTreeItem.java index 815b57f8b..5ee51cc28 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSlotTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSlotTreeItem.java @@ -72,7 +72,7 @@ public class SetSlotTreeItem extends TreeItem implements SetTypeTreeItem, Assign public GraphTargetItem getValue() { return value; } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSuperTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSuperTreeItem.java index 50ebc4a6c..7e0a75ec4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSuperTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/SetSuperTreeItem.java @@ -44,7 +44,7 @@ public class SetSuperTreeItem extends TreeItem { } return calee + hilight("super.") + propertyName.toString(constants, localRegNames, fullyQualifiedNames) + hilight("=") + value.toString(constants, localRegNames, fullyQualifiedNames); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreDecrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreDecrementTreeItem.java index 604944d82..26afedb32 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreDecrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreDecrementTreeItem.java @@ -26,7 +26,7 @@ public class PreDecrementTreeItem extends UnaryOpItem implements AssignmentTreeI public PreDecrementTreeItem(AVM2Instruction instruction, GraphTargetItem object) { super(instruction, PRECEDENCE_UNARY, object, "--"); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreIncrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreIncrementTreeItem.java index 34d1fd911..a362e2735 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreIncrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/treemodel/operations/PreIncrementTreeItem.java @@ -25,7 +25,7 @@ public class PreIncrementTreeItem extends UnaryOpItem { public PreIncrementTreeItem(AVM2Instruction instruction, GraphTargetItem object) { super(instruction, PRECEDENCE_UNARY, object, "++"); } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCComboBoxModel.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCComboBoxModel.java index 5fc717115..6f133c4a4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCComboBoxModel.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCComboBoxModel.java @@ -17,7 +17,6 @@ package com.jpexs.decompiler.flash.abc.gui; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.Collections; import java.util.List; import javax.swing.ComboBoxModel; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCPanel.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCPanel.java index 863481c95..88448dc11 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ABCPanel.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.gui.tablemodels.*; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Font; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java index c9d43956a..f6dc50d07 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitClass; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/DecompiledEditorPane.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/DecompiledEditorPane.java index c25a19e4b..ec73220f0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/DecompiledEditorPane.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/DecompiledEditorPane.java @@ -22,7 +22,6 @@ import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.helpers.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsList.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsList.java index 3f3dfb5da..f0bcfe1a9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsList.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsList.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.gui; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JList; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListItem.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListItem.java index 26cf51eaa..49f90660c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListItem.java @@ -5,7 +5,6 @@ import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.ArrayList; import java.util.List; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListModel.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListModel.java index 012529a65..b54357b2c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListModel.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/TraitsListModel.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.gui; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageFrame.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageFrame.java index dddef2527..bd0a6367b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageFrame.java @@ -23,7 +23,6 @@ import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; import com.jpexs.decompiler.flash.abc.usages.TraitMultinameUsage; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageListModel.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageListModel.java index d4ec060eb..cbb280de6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageListModel.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/UsageListModel.java @@ -19,7 +19,6 @@ package com.jpexs.decompiler.flash.abc.gui; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.usages.MultinameUsage; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.List; import javax.swing.DefaultListModel; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java index 5bcba6255..160087cf7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/ScriptInfo.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitClass; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 677bd62cf..fc2c172b1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.helpers.Helper; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.io.Serializable; import java.util.List; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index d2adc3338..93f24a02c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -35,7 +35,6 @@ import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; import com.jpexs.decompiler.flash.helpers.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; @@ -194,7 +193,7 @@ public class TraitClass extends Trait { } private void parseImportsUsagesFromMethodInfo(List abcTags, ABC abc, int method_index, List imports, List uses, String ignorePackage, List fullyQualifiedNames, List visitedMethods) { - if ((method_index<0) || (method_index >= abc.method_info.length)) { + if ((method_index < 0) || (method_index >= abc.method_info.length)) { return; } visitedMethods.add(method_index); diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index 658be7410..af68dbffa 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.DoABCDefineTag; import java.util.List; import java.util.Stack; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index 407027a88..d8a709f68 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -21,7 +21,6 @@ import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import java.util.List; import java.util.Stack; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index 9201f6667..6cd9105df 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -19,7 +19,6 @@ package com.jpexs.decompiler.flash.abc.types.traits; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.helpers.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import java.io.Serializable; import java.util.List; diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java b/trunk/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java index 88b32568e..5a9fd9553 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/usages/InsideClassMultinameUsage.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import java.util.List; /** diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java b/trunk/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java index c81e371d6..01d39e41a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/usages/MultinameUsage.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.usages; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import java.util.List; /** diff --git a/trunk/src/com/jpexs/decompiler/flash/action/Action.java b/trunk/src/com/jpexs/decompiler/flash/action/Action.java index 402984c4f..cd240af97 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/Action.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/Action.java @@ -810,19 +810,20 @@ public class Action implements GraphSourceItem { ActionWith awith = (ActionWith) action; List withCommands = ActionGraph.translateViaGraph(registerNames, variables, functions,new ArrayList() , version); //TODO:parse with actions output.add(new WithTreeItem(action, stack.pop(), withCommands)); - } else */ if (action instanceof ActionStoreRegister) { - if ((ip + 1 <= end) && (actions.get(ip + 1) instanceof ActionPop)) { - action.translate(localData, stack, output); - stack.pop(); - ip++; - } else { - try { - action.translate(localData, stack, output); - } catch (Exception ex) { - //ignore - } - } - } /*else if (action instanceof ActionStrictEquals) { + } else */ if (false) { + } /*if (action instanceof ActionStoreRegister) { + if ((ip + 1 <= end) && (actions.get(ip + 1) instanceof ActionPop)) { + action.translate(localData, stack, output); + stack.pop(); + ip++; + } else { + try { + action.translate(localData, stack, output); + } catch (Exception ex) { + //ignore + } + } + } */ /*else if (action instanceof ActionStrictEquals) { if ((ip + 1 < actions.size()) && (actions.get(ip + 1) instanceof ActionIf)) { List caseValues = new ArrayList(); List> caseCommands = new ArrayList>(); @@ -910,7 +911,7 @@ public class Action implements GraphSourceItem { } public static List checkClass(List output) { - if(true){ + if (true) { //return output; } List ret = new ArrayList(); @@ -937,7 +938,21 @@ public class Action implements GraphSourceItem { className = getWithoutGlobal((GetMemberTreeItem) nti.value); if (parts.size() >= 1) { if (parts.get(0) instanceof StoreRegisterTreeItem) { - int classReg = ((StoreRegisterTreeItem) parts.get(0)).register.number; + StoreRegisterTreeItem str1 = (StoreRegisterTreeItem) parts.get(0); + int classReg = str1.register.number; + int instanceReg = -1; + if ((str1.value instanceof GetMemberTreeItem) && ((GetMemberTreeItem) str1.value).object instanceof SetTypeTreeItem) { + int tmp = classReg; + SetTypeTreeItem stt = (SetTypeTreeItem) ((GetMemberTreeItem) str1.value).object; + classReg = stt.getTempRegister(); + instanceReg = tmp; + parts.remove(0); + parts.add(0, new StoreRegisterTreeItem(null, new RegisterNumber(classReg), stt.getValue())); + parts.add(1, (GraphTargetItem) stt); + ((GetMemberTreeItem) str1.value).object = new DirectValueTreeItem(null, 0, new RegisterNumber(classReg), null); + parts.add(2, new StoreRegisterTreeItem(null, new RegisterNumber(instanceReg), str1.value)); + } + if ((parts.size() >= 2) && (parts.get(1) instanceof SetMemberTreeItem)) { GraphTargetItem ti1 = ((SetMemberTreeItem) parts.get(1)).value; GraphTargetItem ti2 = ((StoreRegisterTreeItem) parts.get(0)).value; @@ -966,7 +981,7 @@ public class Action implements GraphSourceItem { return output2; } if (parts.get(pos) instanceof StoreRegisterTreeItem) { - int instanceReg = -1; + if (((StoreRegisterTreeItem) parts.get(pos)).value instanceof GetMemberTreeItem) { GraphTargetItem obj = ((GetMemberTreeItem) ((StoreRegisterTreeItem) parts.get(pos)).value).object; if (obj instanceof DirectValueTreeItem) { @@ -1021,6 +1036,13 @@ public class Action implements GraphSourceItem { ok = false; break; } + if (parts.get(pos) instanceof PopTreeItem) { + pos++; + } + if (parts.size() <= pos) { + ok = false; + break; + } if (parts.get(pos) instanceof ImplementsOpTreeItem) { ImplementsOpTreeItem io = (ImplementsOpTreeItem) parts.get(pos); implementsOp = io.superclasses; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java index a610094e4..32da21dcf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/FlasmLexer.java @@ -1,1006 +1,1030 @@ /* The following code was generated by JFlex 1.4.3 on 12.4.13 19:32 */ -/* Flash assembler language lexer specification */ - -package com.jpexs.decompiler.flash.action.parser.pcode; - -import com.jpexs.decompiler.flash.action.parser.ParseException; -import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; -import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; -import com.jpexs.decompiler.flash.action.swf4.Undefined; -import com.jpexs.decompiler.flash.action.swf4.Null; - +/* Flash assembler language lexer specification */ +package com.jpexs.decompiler.flash.action.parser.pcode; + +import com.jpexs.decompiler.flash.action.parser.ParseException; +import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; +import com.jpexs.decompiler.flash.action.swf4.Null; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.action.swf4.Undefined; /** - * This class is a scanner generated by - * JFlex 1.4.3 - * on 12.4.13 19:32 from the specification file + * This class is a scanner generated by + * JFlex 1.4.3 on 12.4.13 19:32 from the + * specification file * D:/Dokumenty/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/action/parser/pcode/flasm.flex */ public final class FlasmLexer { - /** 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; + /** + * lexical states + */ + public static final int STRING = 2; + public static final int YYINITIAL = 0; + public static final int PARAMETERS = 4; + /** + * 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 + }; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\6\1\4\1\2\1\0\1\4\1\1\16\6\4\0\1\4\1\0" + + "\1\45\1\0\1\5\2\0\1\47\3\0\1\37\1\0\1\30\1\35" + + "\1\0\1\33\3\50\4\40\2\11\1\12\1\3\5\0\4\7\1\36" + + "\3\7\1\31\4\7\1\34\14\7\1\0\1\41\2\0\1\10\1\0" + + "\1\22\1\46\1\43\1\26\1\20\1\21\1\42\1\7\1\27\2\7" + + "\1\23\1\7\1\25\1\44\2\7\1\16\1\24\1\15\1\17\3\7" + + "\1\32\1\7\1\13\1\0\1\14\1\0\41\6\2\0\4\5\4\0" + + "\1\5\2\0\1\6\7\0\1\5\4\0\1\5\5\0\27\5\1\0" + + "\37\5\1\0\u01ca\5\4\0\14\5\16\0\5\5\7\0\1\5\1\0" + + "\1\5\21\0\160\6\5\5\1\0\2\5\2\0\4\5\10\0\1\5" + + "\1\0\3\5\1\0\1\5\1\0\24\5\1\0\123\5\1\0\213\5" + + "\1\0\5\6\2\0\236\5\11\0\46\5\2\0\1\5\7\0\47\5" + + "\11\0\55\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0\1\6" + + "\10\0\33\5\5\0\3\5\15\0\4\6\7\0\1\5\4\0\13\6" + + "\5\0\53\5\37\6\4\0\2\5\1\6\143\5\1\0\1\5\10\6" + + "\1\0\6\6\2\5\2\6\1\0\4\6\2\5\12\6\3\5\2\0" + + "\1\5\17\0\1\6\1\5\1\6\36\5\33\6\2\0\131\5\13\6" + + "\1\5\16\0\12\6\41\5\11\6\2\5\4\0\1\5\5\0\26\5" + + "\4\6\1\5\11\6\1\5\3\6\1\5\5\6\22\0\31\5\3\6" + + "\244\0\4\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5\2\6" + + "\2\0\12\6\1\0\7\5\1\0\7\5\1\0\3\6\1\0\10\5" + + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5" + + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0" + + "\1\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0" + + "\1\5\5\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0" + + "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0" + + "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0" + + "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0" + + "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0" + + "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0" + + "\2\5\2\6\2\0\12\6\1\0\1\5\17\0\3\6\1\0\10\5" + + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5" + + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\10\0\2\6" + + "\4\0\2\5\1\0\3\5\2\6\2\0\12\6\1\0\1\5\20\0" + + "\1\6\1\5\1\0\6\5\3\0\3\5\1\0\4\5\3\0\2\5" + + "\1\0\1\5\1\0\2\5\3\0\2\5\3\0\3\5\3\0\14\5" + + "\4\0\5\6\3\0\3\6\1\0\4\6\2\0\1\5\6\0\1\6" + + "\16\0\12\6\11\0\1\5\7\0\3\6\1\0\10\5\1\0\3\5" + + "\1\0\27\5\1\0\12\5\1\0\5\5\3\0\1\5\7\6\1\0" + + "\3\6\1\0\4\6\7\0\2\6\1\0\2\5\6\0\2\5\2\6" + + "\2\0\12\6\22\0\2\6\1\0\10\5\1\0\3\5\1\0\27\5" + + "\1\0\12\5\1\0\5\5\2\0\1\6\1\5\7\6\1\0\3\6" + + "\1\0\4\6\7\0\2\6\7\0\1\5\1\0\2\5\2\6\2\0" + + "\12\6\1\0\2\5\17\0\2\6\1\0\10\5\1\0\3\5\1\0" + + "\51\5\2\0\1\5\7\6\1\0\3\6\1\0\4\6\1\5\10\0" + + "\1\6\10\0\2\5\2\6\2\0\12\6\12\0\6\5\2\0\2\6" + + "\1\0\22\5\3\0\30\5\1\0\11\5\1\0\1\5\2\0\7\5" + + "\3\0\1\6\4\0\6\6\1\0\1\6\1\0\10\6\22\0\2\6" + + "\15\0\60\5\1\6\2\5\7\6\4\0\10\5\10\6\1\0\12\6" + + "\47\0\2\5\1\0\1\5\2\0\2\5\1\0\1\5\2\0\1\5" + + "\6\0\4\5\1\0\7\5\1\0\3\5\1\0\1\5\1\0\1\5" + + "\2\0\2\5\1\0\4\5\1\6\2\5\6\6\1\0\2\6\1\5" + + "\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6\2\0\2\5" + + "\42\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6\1\0\1\6" + + "\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0\24\6\1\0" + + "\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0\53\5\24\6" + + "\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5\3\6\2\5" + + "\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0\46\5\12\0" + + "\53\5\1\0\1\5\3\0\u0149\5\1\0\4\5\2\0\7\5\1\0" + + "\1\5\1\0\4\5\2\0\51\5\1\0\4\5\2\0\41\5\1\0" + + "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\17\5\1\0" + + "\71\5\1\0\4\5\2\0\103\5\2\0\3\6\40\0\20\5\20\0" + + "\125\5\14\0\u026c\5\2\0\21\5\1\0\32\5\5\0\113\5\3\0" + + "\3\5\17\0\15\5\1\0\4\5\3\6\13\0\22\5\3\6\13\0" + + "\22\5\2\6\14\0\15\5\1\0\3\5\1\0\2\6\14\0\64\5" + + "\40\6\3\0\1\5\3\0\2\5\1\6\2\0\12\6\41\0\3\6" + + "\2\0\12\6\6\0\130\5\10\0\51\5\1\6\1\5\5\0\106\5" + + "\12\0\35\5\3\0\14\6\4\0\14\6\12\0\12\6\36\5\2\0" + + "\5\5\13\0\54\5\4\0\21\6\7\5\2\6\6\0\12\6\46\0" + + "\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0\13\6\6\0" + + "\12\6\15\0\1\5\130\0\5\6\57\5\21\6\7\5\4\0\12\6" + + "\21\0\11\6\14\0\3\6\36\5\12\6\3\0\2\5\12\6\6\0" + + "\46\5\16\6\14\0\44\5\24\6\10\0\12\6\3\0\3\5\12\6" + + "\44\5\122\0\3\6\1\0\25\6\4\5\1\6\4\5\1\6\15\0" + + "\300\5\47\6\25\0\4\6\u0116\5\2\0\6\5\2\0\46\5\2\0" + + "\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5\1\0" + + "\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5\1\0" + + "\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5\1\0" + + "\7\5\16\0\5\6\32\0\5\6\20\0\2\5\23\0\1\5\13\0" + + "\5\6\5\0\6\6\1\0\1\5\15\0\1\5\20\0\15\5\3\0" + + "\32\5\26\0\15\6\4\0\1\6\3\0\14\6\21\0\1\5\4\0" + + "\1\5\2\0\12\5\1\0\1\5\3\0\5\5\6\0\1\5\1\0" + + "\1\5\1\0\1\5\1\0\4\5\1\0\13\5\2\0\4\5\5\0" + + "\5\5\4\0\1\5\21\0\51\5\u0a77\0\57\5\1\0\57\5\1\0" + + "\205\5\6\0\4\5\3\6\16\0\46\5\12\0\66\5\11\0\1\5" + + "\17\0\1\6\27\5\11\0\7\5\1\0\7\5\1\0\7\5\1\0" + + "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0" + + "\40\6\57\0\1\5\u01d5\0\3\5\31\0\11\5\6\6\1\0\5\5" + + "\2\0\5\5\4\0\126\5\2\0\2\6\2\0\3\5\1\0\132\5" + + "\1\0\4\5\5\0\51\5\3\0\136\5\21\0\33\5\65\0\20\5" + + "\u0200\0\u19b6\5\112\0\u51cc\5\64\0\u048d\5\103\0\56\5\2\0\u010d\5" + + "\3\0\20\5\12\6\2\5\24\0\57\5\1\6\14\0\2\6\1\0" + + "\31\5\10\0\120\5\2\6\45\0\11\5\2\0\147\5\2\0\4\5" + + "\1\0\2\5\16\0\12\5\120\0\10\5\1\6\3\5\1\6\4\5" + + "\1\6\27\5\5\6\20\0\1\5\7\0\64\5\14\0\2\6\62\5" + + "\21\6\13\0\12\6\6\0\22\6\6\5\3\0\1\5\4\0\12\6" + + "\34\5\10\6\2\0\27\5\15\6\14\0\35\5\3\0\4\6\57\5" + + "\16\6\16\0\1\5\12\6\46\0\51\5\16\6\11\0\3\5\1\6" + + "\10\5\2\6\2\0\12\6\6\0\27\5\3\0\1\5\1\6\4\0" + + "\60\5\1\6\1\5\3\6\2\5\2\6\5\5\2\6\1\5\1\6" + + "\1\5\30\0\3\5\43\0\6\5\2\0\6\5\2\0\6\5\11\0" + + "\7\5\1\0\7\5\221\0\43\5\10\6\1\0\2\6\2\0\12\6" + + "\6\0\u2ba4\5\14\0\27\5\4\0\61\5\u2104\0\u012e\5\2\0\76\5" + + "\2\0\152\5\46\0\7\5\14\0\5\5\5\0\1\5\1\6\12\5" + + "\1\0\15\5\1\0\5\5\1\0\1\5\1\0\2\5\1\0\2\5" + + "\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0\66\5\50\0\15\5" + + "\3\0\20\6\20\0\7\6\14\0\2\5\30\0\3\5\31\0\1\5" + + "\6\0\5\5\1\0\207\5\2\0\1\6\4\0\1\5\13\0\12\6" + + "\7\0\32\5\4\0\1\5\1\0\32\5\13\0\131\5\3\0\6\5" + + "\2\0\6\5\2\0\6\5\2\0\3\5\3\0\2\5\3\0\2\5" + + "\22\0\3\6\4\0"; + /** + * 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(); + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\3\1\1\2\1\3\1\4\2\5\1\1\1\6" + + "\2\7\1\10\1\11\1\12\1\13\5\11\1\1\1\11" + + "\1\12\1\11\1\1\1\11\1\14\1\0\1\15\1\16" + + "\1\17\1\20\1\21\1\22\2\23\1\24\1\25\1\26" + + "\1\27\1\0\1\30\5\11\1\12\1\0\1\12\1\11" + + "\1\30\2\11\1\23\1\30\1\0\5\11\1\0\1\11" + + "\1\30\1\11\1\31\3\11\1\32\1\0\4\11\1\33" + + "\1\0\4\11\1\0\4\11\1\0\4\11\1\0\1\11" + + "\2\34\1\35\1\30\2\36"; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - public static final int STRING = 2; - public static final int YYINITIAL = 0; - public static final int PARAMETERS = 4; - - /** - * 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 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\6\1\4\1\2\1\0\1\4\1\1\16\6\4\0\1\4\1\0"+ - "\1\45\1\0\1\5\2\0\1\47\3\0\1\37\1\0\1\30\1\35"+ - "\1\0\1\33\3\50\4\40\2\11\1\12\1\3\5\0\4\7\1\36"+ - "\3\7\1\31\4\7\1\34\14\7\1\0\1\41\2\0\1\10\1\0"+ - "\1\22\1\46\1\43\1\26\1\20\1\21\1\42\1\7\1\27\2\7"+ - "\1\23\1\7\1\25\1\44\2\7\1\16\1\24\1\15\1\17\3\7"+ - "\1\32\1\7\1\13\1\0\1\14\1\0\41\6\2\0\4\5\4\0"+ - "\1\5\2\0\1\6\7\0\1\5\4\0\1\5\5\0\27\5\1\0"+ - "\37\5\1\0\u01ca\5\4\0\14\5\16\0\5\5\7\0\1\5\1\0"+ - "\1\5\21\0\160\6\5\5\1\0\2\5\2\0\4\5\10\0\1\5"+ - "\1\0\3\5\1\0\1\5\1\0\24\5\1\0\123\5\1\0\213\5"+ - "\1\0\5\6\2\0\236\5\11\0\46\5\2\0\1\5\7\0\47\5"+ - "\11\0\55\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0\1\6"+ - "\10\0\33\5\5\0\3\5\15\0\4\6\7\0\1\5\4\0\13\6"+ - "\5\0\53\5\37\6\4\0\2\5\1\6\143\5\1\0\1\5\10\6"+ - "\1\0\6\6\2\5\2\6\1\0\4\6\2\5\12\6\3\5\2\0"+ - "\1\5\17\0\1\6\1\5\1\6\36\5\33\6\2\0\131\5\13\6"+ - "\1\5\16\0\12\6\41\5\11\6\2\5\4\0\1\5\5\0\26\5"+ - "\4\6\1\5\11\6\1\5\3\6\1\5\5\6\22\0\31\5\3\6"+ - "\244\0\4\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5\2\6"+ - "\2\0\12\6\1\0\7\5\1\0\7\5\1\0\3\6\1\0\10\5"+ - "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5"+ - "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0"+ - "\1\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0"+ - "\1\5\5\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0"+ - "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0"+ - "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0"+ - "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0"+ - "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0"+ - "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0"+ - "\2\5\2\6\2\0\12\6\1\0\1\5\17\0\3\6\1\0\10\5"+ - "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5"+ - "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\10\0\2\6"+ - "\4\0\2\5\1\0\3\5\2\6\2\0\12\6\1\0\1\5\20\0"+ - "\1\6\1\5\1\0\6\5\3\0\3\5\1\0\4\5\3\0\2\5"+ - "\1\0\1\5\1\0\2\5\3\0\2\5\3\0\3\5\3\0\14\5"+ - "\4\0\5\6\3\0\3\6\1\0\4\6\2\0\1\5\6\0\1\6"+ - "\16\0\12\6\11\0\1\5\7\0\3\6\1\0\10\5\1\0\3\5"+ - "\1\0\27\5\1\0\12\5\1\0\5\5\3\0\1\5\7\6\1\0"+ - "\3\6\1\0\4\6\7\0\2\6\1\0\2\5\6\0\2\5\2\6"+ - "\2\0\12\6\22\0\2\6\1\0\10\5\1\0\3\5\1\0\27\5"+ - "\1\0\12\5\1\0\5\5\2\0\1\6\1\5\7\6\1\0\3\6"+ - "\1\0\4\6\7\0\2\6\7\0\1\5\1\0\2\5\2\6\2\0"+ - "\12\6\1\0\2\5\17\0\2\6\1\0\10\5\1\0\3\5\1\0"+ - "\51\5\2\0\1\5\7\6\1\0\3\6\1\0\4\6\1\5\10\0"+ - "\1\6\10\0\2\5\2\6\2\0\12\6\12\0\6\5\2\0\2\6"+ - "\1\0\22\5\3\0\30\5\1\0\11\5\1\0\1\5\2\0\7\5"+ - "\3\0\1\6\4\0\6\6\1\0\1\6\1\0\10\6\22\0\2\6"+ - "\15\0\60\5\1\6\2\5\7\6\4\0\10\5\10\6\1\0\12\6"+ - "\47\0\2\5\1\0\1\5\2\0\2\5\1\0\1\5\2\0\1\5"+ - "\6\0\4\5\1\0\7\5\1\0\3\5\1\0\1\5\1\0\1\5"+ - "\2\0\2\5\1\0\4\5\1\6\2\5\6\6\1\0\2\6\1\5"+ - "\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6\2\0\2\5"+ - "\42\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6\1\0\1\6"+ - "\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0\24\6\1\0"+ - "\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0\53\5\24\6"+ - "\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5\3\6\2\5"+ - "\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0\46\5\12\0"+ - "\53\5\1\0\1\5\3\0\u0149\5\1\0\4\5\2\0\7\5\1\0"+ - "\1\5\1\0\4\5\2\0\51\5\1\0\4\5\2\0\41\5\1\0"+ - "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\17\5\1\0"+ - "\71\5\1\0\4\5\2\0\103\5\2\0\3\6\40\0\20\5\20\0"+ - "\125\5\14\0\u026c\5\2\0\21\5\1\0\32\5\5\0\113\5\3\0"+ - "\3\5\17\0\15\5\1\0\4\5\3\6\13\0\22\5\3\6\13\0"+ - "\22\5\2\6\14\0\15\5\1\0\3\5\1\0\2\6\14\0\64\5"+ - "\40\6\3\0\1\5\3\0\2\5\1\6\2\0\12\6\41\0\3\6"+ - "\2\0\12\6\6\0\130\5\10\0\51\5\1\6\1\5\5\0\106\5"+ - "\12\0\35\5\3\0\14\6\4\0\14\6\12\0\12\6\36\5\2\0"+ - "\5\5\13\0\54\5\4\0\21\6\7\5\2\6\6\0\12\6\46\0"+ - "\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0\13\6\6\0"+ - "\12\6\15\0\1\5\130\0\5\6\57\5\21\6\7\5\4\0\12\6"+ - "\21\0\11\6\14\0\3\6\36\5\12\6\3\0\2\5\12\6\6\0"+ - "\46\5\16\6\14\0\44\5\24\6\10\0\12\6\3\0\3\5\12\6"+ - "\44\5\122\0\3\6\1\0\25\6\4\5\1\6\4\5\1\6\15\0"+ - "\300\5\47\6\25\0\4\6\u0116\5\2\0\6\5\2\0\46\5\2\0"+ - "\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5\1\0"+ - "\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5\1\0"+ - "\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5\1\0"+ - "\7\5\16\0\5\6\32\0\5\6\20\0\2\5\23\0\1\5\13\0"+ - "\5\6\5\0\6\6\1\0\1\5\15\0\1\5\20\0\15\5\3\0"+ - "\32\5\26\0\15\6\4\0\1\6\3\0\14\6\21\0\1\5\4\0"+ - "\1\5\2\0\12\5\1\0\1\5\3\0\5\5\6\0\1\5\1\0"+ - "\1\5\1\0\1\5\1\0\4\5\1\0\13\5\2\0\4\5\5\0"+ - "\5\5\4\0\1\5\21\0\51\5\u0a77\0\57\5\1\0\57\5\1\0"+ - "\205\5\6\0\4\5\3\6\16\0\46\5\12\0\66\5\11\0\1\5"+ - "\17\0\1\6\27\5\11\0\7\5\1\0\7\5\1\0\7\5\1\0"+ - "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0"+ - "\40\6\57\0\1\5\u01d5\0\3\5\31\0\11\5\6\6\1\0\5\5"+ - "\2\0\5\5\4\0\126\5\2\0\2\6\2\0\3\5\1\0\132\5"+ - "\1\0\4\5\5\0\51\5\3\0\136\5\21\0\33\5\65\0\20\5"+ - "\u0200\0\u19b6\5\112\0\u51cc\5\64\0\u048d\5\103\0\56\5\2\0\u010d\5"+ - "\3\0\20\5\12\6\2\5\24\0\57\5\1\6\14\0\2\6\1\0"+ - "\31\5\10\0\120\5\2\6\45\0\11\5\2\0\147\5\2\0\4\5"+ - "\1\0\2\5\16\0\12\5\120\0\10\5\1\6\3\5\1\6\4\5"+ - "\1\6\27\5\5\6\20\0\1\5\7\0\64\5\14\0\2\6\62\5"+ - "\21\6\13\0\12\6\6\0\22\6\6\5\3\0\1\5\4\0\12\6"+ - "\34\5\10\6\2\0\27\5\15\6\14\0\35\5\3\0\4\6\57\5"+ - "\16\6\16\0\1\5\12\6\46\0\51\5\16\6\11\0\3\5\1\6"+ - "\10\5\2\6\2\0\12\6\6\0\27\5\3\0\1\5\1\6\4\0"+ - "\60\5\1\6\1\5\3\6\2\5\2\6\5\5\2\6\1\5\1\6"+ - "\1\5\30\0\3\5\43\0\6\5\2\0\6\5\2\0\6\5\11\0"+ - "\7\5\1\0\7\5\221\0\43\5\10\6\1\0\2\6\2\0\12\6"+ - "\6\0\u2ba4\5\14\0\27\5\4\0\61\5\u2104\0\u012e\5\2\0\76\5"+ - "\2\0\152\5\46\0\7\5\14\0\5\5\5\0\1\5\1\6\12\5"+ - "\1\0\15\5\1\0\5\5\1\0\1\5\1\0\2\5\1\0\2\5"+ - "\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0\66\5\50\0\15\5"+ - "\3\0\20\6\20\0\7\6\14\0\2\5\30\0\3\5\31\0\1\5"+ - "\6\0\5\5\1\0\207\5\2\0\1\6\4\0\1\5\13\0\12\6"+ - "\7\0\32\5\4\0\1\5\1\0\32\5\13\0\131\5\3\0\6\5"+ - "\2\0\6\5\2\0\6\5\2\0\3\5\3\0\2\5\3\0\2\5"+ - "\22\0\3\6\4\0"; - - /** - * 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(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\3\1\1\2\1\3\1\4\2\5\1\1\1\6"+ - "\2\7\1\10\1\11\1\12\1\13\5\11\1\1\1\11"+ - "\1\12\1\11\1\1\1\11\1\14\1\0\1\15\1\16"+ - "\1\17\1\20\1\21\1\22\2\23\1\24\1\25\1\26"+ - "\1\27\1\0\1\30\5\11\1\12\1\0\1\12\1\11"+ - "\1\30\2\11\1\23\1\30\1\0\5\11\1\0\1\11"+ - "\1\30\1\11\1\31\3\11\1\32\1\0\4\11\1\33"+ - "\1\0\4\11\1\0\4\11\1\0\4\11\1\0\1\11"+ - "\2\34\1\35\1\30\2\36"; - - private static int [] zzUnpackAction() { - int [] result = new int[104]; - 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; - } - - - /** - * 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\51\0\122\0\173\0\244\0\315\0\366\0\173"+ - "\0\u011f\0\u0148\0\173\0\u0171\0\173\0\u019a\0\173\0\u01c3"+ - "\0\u01ec\0\u0215\0\173\0\u023e\0\u0267\0\u0290\0\u02b9\0\u02e2"+ - "\0\u030b\0\u0334\0\u035d\0\u0386\0\u03af\0\u03d8\0\173\0\315"+ - "\0\173\0\173\0\173\0\173\0\173\0\173\0\u0401\0\u042a"+ - "\0\173\0\173\0\173\0\173\0\u0453\0\u047c\0\u04a5\0\u04ce"+ - "\0\u04f7\0\u0520\0\u0549\0\u0572\0\u059b\0\173\0\u05c4\0\u035d"+ - "\0\u05ed\0\u0616\0\173\0\u063f\0\u063f\0\u0668\0\u0691\0\u06ba"+ - "\0\u06e3\0\u070c\0\u0735\0\u075e\0\u01ec\0\u0787\0\u01ec\0\u07b0"+ - "\0\u07d9\0\u0802\0\u01ec\0\u082b\0\u0854\0\u087d\0\u08a6\0\u08cf"+ - "\0\u01ec\0\u08f8\0\u0921\0\u094a\0\u0973\0\u099c\0\u09c5\0\u09ee"+ - "\0\u0a17\0\u0a40\0\u0a69\0\u0a92\0\u0abb\0\u0ae4\0\u0b0d\0\u0b36"+ - "\0\u0b5f\0\u0b88\0\u0bb1\0\u01ec\0\u01ec\0\173\0\u0bda\0\u01ec"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[104]; - 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; - } - - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\4\4\1\5\1\6\1\4\1\7\1\6\3\4\1\10"+ - "\13\7\1\4\2\7\1\4\1\7\1\4\1\7\3\4"+ - "\3\7\1\4\1\7\2\4\1\11\1\12\1\13\36\11"+ - "\1\14\3\11\1\15\3\11\1\4\1\16\1\17\1\20"+ - "\1\4\1\21\1\4\2\21\1\22\1\4\1\23\1\4"+ - "\1\24\1\25\1\26\1\21\1\27\3\21\1\30\2\21"+ - "\1\31\1\32\1\21\1\33\1\34\1\35\1\21\1\4"+ - "\1\22\1\4\1\21\1\36\1\21\1\37\1\21\1\4"+ - "\1\22\55\0\1\5\51\0\5\40\1\41\2\0\13\40"+ - "\1\0\4\40\1\0\1\40\1\0\1\40\1\0\3\40"+ - "\1\0\1\40\1\0\1\40\5\0\2\40\3\7\1\41"+ - "\2\0\13\7\1\0\4\7\1\0\1\7\1\0\1\7"+ - "\1\0\3\7\1\0\1\7\1\0\1\7\1\11\2\0"+ - "\36\11\1\0\3\11\1\0\3\11\2\0\1\13\46\0"+ - "\2\42\1\0\12\42\1\43\1\44\2\42\1\45\3\42"+ - "\1\46\5\42\1\47\4\42\1\50\1\51\3\42\1\52"+ - "\1\53\1\54\1\47\2\0\1\17\46\0\1\20\2\0"+ - "\46\20\5\0\5\21\3\0\13\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\11\0\1\22\6\0\1\55\12\0\1\22\1\0"+ - "\1\56\1\55\1\0\1\22\7\0\1\22\5\0\5\21"+ - "\3\0\1\21\1\57\11\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\5\0\5\21\3\0\3\21\1\60\7\21\1\0\4\21"+ - "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21"+ - "\1\0\1\21\5\0\5\21\3\0\10\21\1\61\2\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\5\21"+ - "\1\62\5\21\1\0\4\21\1\0\1\21\1\0\1\21"+ - "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21"+ - "\3\0\2\21\1\63\10\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\11\0\1\64\17\0\1\65\1\0\1\66\4\0\1\64"+ - "\7\0\1\64\5\0\5\21\3\0\10\21\1\67\2\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\11\0\1\70\6\0\1\55"+ - "\12\0\1\70\1\0\1\56\1\55\1\0\1\70\7\0"+ - "\1\70\5\0\5\21\3\0\5\21\1\71\5\21\1\0"+ - "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"+ - "\1\21\1\0\1\21\11\0\1\56\21\0\1\56\4\0"+ - "\1\56\7\0\1\56\5\0\5\21\3\0\13\21\1\0"+ - "\4\21\1\0\1\21\1\0\1\21\1\0\2\21\1\72"+ - "\1\0\1\21\1\0\1\21\33\0\1\50\4\0\1\50"+ - "\7\0\1\50\33\0\1\73\4\0\1\73\7\0\1\73"+ - "\11\0\1\74\16\0\1\75\2\0\1\74\3\0\1\75"+ - "\1\74\7\0\1\74\11\0\1\56\6\0\1\55\12\0"+ - "\1\56\2\0\1\55\1\0\1\56\7\0\1\56\5\0"+ - "\5\21\3\0\2\21\1\76\10\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\5\21\3\0\13\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\1\77\2\21\1\0\1\21"+ - "\1\0\1\21\5\0\5\21\3\0\11\21\1\100\1\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\6\21"+ - "\1\101\4\21\1\0\4\21\1\0\1\21\1\0\1\21"+ - "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21"+ - "\3\0\6\21\1\102\4\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\11\0\1\64\21\0\1\64\4\0\1\64\7\0\1\64"+ - "\25\0\1\103\30\0\5\21\3\0\4\21\1\104\6\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\13\21"+ - "\1\0\3\21\1\105\1\0\1\21\1\0\1\21\1\0"+ - "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0"+ - "\10\21\1\106\2\21\1\0\4\21\1\0\1\21\1\0"+ - "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\11\0"+ - "\1\74\21\0\1\74\4\0\1\74\7\0\1\74\5\0"+ - "\5\21\3\0\3\21\1\107\7\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\5\21\3\0\12\21\1\110\1\0\4\21"+ - "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21"+ - "\1\0\1\21\5\0\5\21\3\0\3\21\1\111\7\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\7\21"+ - "\1\112\3\21\1\0\4\21\1\0\1\21\1\0\1\21"+ - "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21"+ - "\3\0\6\21\1\113\4\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\21\0\1\114\34\0\5\21\3\0\12\21\1\115\1\0"+ - "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"+ - "\1\21\1\0\1\21\5\0\5\21\3\0\7\21\1\116"+ - "\3\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0"+ - "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0"+ - "\7\21\1\117\3\21\1\0\4\21\1\0\1\21\1\0"+ - "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0"+ - "\5\21\3\0\4\21\1\120\6\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\5\21\3\0\3\21\1\121\7\21\1\0"+ - "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"+ - "\1\21\1\0\1\21\27\0\1\122\26\0\5\21\3\0"+ - "\10\21\1\123\2\21\1\0\4\21\1\0\1\21\1\0"+ - "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0"+ - "\5\21\3\0\1\124\12\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\5\0\5\21\3\0\1\125\12\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\5\21\3\0\12\21\1\126\1\0\4\21"+ - "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21"+ - "\1\0\1\21\25\0\1\127\30\0\5\21\3\0\12\21"+ - "\1\130\1\0\4\21\1\0\1\21\1\0\1\21\1\0"+ - "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0"+ - "\5\21\1\131\5\21\1\0\4\21\1\0\1\21\1\0"+ - "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0"+ - "\5\21\3\0\3\21\1\132\7\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\5\21\3\0\10\21\1\133\2\21\1\0"+ - "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"+ - "\1\21\1\0\1\21\27\0\1\134\26\0\5\21\3\0"+ - "\1\135\12\21\1\0\4\21\1\0\1\21\1\0\1\21"+ - "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21"+ - "\3\0\10\21\1\136\2\21\1\0\4\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\5\0\5\21\3\0\1\21\1\137\11\21\1\0\4\21"+ - "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21"+ - "\1\0\1\21\5\0\5\21\3\0\3\21\1\140\7\21"+ - "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21"+ - "\1\0\1\21\1\0\1\21\15\0\1\141\40\0\5\21"+ - "\3\0\13\21\1\0\1\21\1\105\2\21\1\0\1\21"+ - "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"+ - "\5\0\5\21\3\0\1\142\12\21\1\0\4\21\1\0"+ - "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"+ - "\1\21\5\0\4\21\1\143\3\0\13\21\1\0\2\21"+ - "\1\144\1\21\1\0\1\21\1\0\1\143\1\0\3\21"+ - "\1\0\1\21\1\0\1\143\5\0\5\21\3\0\11\21"+ - "\1\145\1\21\1\0\4\21\1\0\1\21\1\0\1\21"+ - "\1\0\3\21\1\0\1\21\1\0\1\21\32\0\1\146"+ - "\23\0\4\21\1\147\3\0\13\21\1\0\2\21\1\150"+ - "\1\21\1\0\1\21\1\0\1\147\1\0\3\21\1\0"+ - "\1\21\1\0\1\147\5\0\4\21\1\143\3\0\13\21"+ - "\1\0\2\21\1\143\1\21\1\0\1\21\1\0\1\143"+ - "\1\0\3\21\1\0\1\21\1\0\1\143\5\0\4\21"+ - "\1\147\3\0\13\21\1\0\2\21\1\147\1\21\1\0"+ - "\1\21\1\0\1\147\1\0\3\21\1\0\1\21\1\0"+ - "\1\147"; - - private static int [] zzUnpackTrans() { - int [] result = new int[3075]; - 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; - } - - - /* 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 = - "\3\0\1\11\3\1\1\11\2\1\1\11\1\1\1\11"+ - "\1\1\1\11\3\1\1\11\13\1\1\11\1\0\6\11"+ - "\2\1\4\11\1\0\7\1\1\0\1\11\4\1\1\11"+ - "\1\1\1\0\5\1\1\0\10\1\1\0\5\1\1\0"+ - "\4\1\1\0\4\1\1\0\4\1\1\0\4\1\1\11"+ - "\2\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[104]; - 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 input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** 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; - - /** 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; - - /* user code: */ - - StringBuffer string = new StringBuffer(); - - /** - * Create an empty lexer, yyrset will be called later to reset and assign - * the reader - */ - public FlasmLexer() { - - } - - public int yychar() { - return yychar; - } - - public int yyline() { - return yyline+1; - } - - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public FlasmLexer(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public FlasmLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader(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[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 2206) { - 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) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + private static int[] zzUnpackAction() { + int[] result = new int[104]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; + 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\51\0\122\0\173\0\244\0\315\0\366\0\173" + + "\0\u011f\0\u0148\0\173\0\u0171\0\173\0\u019a\0\173\0\u01c3" + + "\0\u01ec\0\u0215\0\173\0\u023e\0\u0267\0\u0290\0\u02b9\0\u02e2" + + "\0\u030b\0\u0334\0\u035d\0\u0386\0\u03af\0\u03d8\0\173\0\315" + + "\0\173\0\173\0\173\0\173\0\173\0\173\0\u0401\0\u042a" + + "\0\173\0\173\0\173\0\173\0\u0453\0\u047c\0\u04a5\0\u04ce" + + "\0\u04f7\0\u0520\0\u0549\0\u0572\0\u059b\0\173\0\u05c4\0\u035d" + + "\0\u05ed\0\u0616\0\173\0\u063f\0\u063f\0\u0668\0\u0691\0\u06ba" + + "\0\u06e3\0\u070c\0\u0735\0\u075e\0\u01ec\0\u0787\0\u01ec\0\u07b0" + + "\0\u07d9\0\u0802\0\u01ec\0\u082b\0\u0854\0\u087d\0\u08a6\0\u08cf" + + "\0\u01ec\0\u08f8\0\u0921\0\u094a\0\u0973\0\u099c\0\u09c5\0\u09ee" + + "\0\u0a17\0\u0a40\0\u0a69\0\u0a92\0\u0abb\0\u0ae4\0\u0b0d\0\u0b36" + + "\0\u0b5f\0\u0b88\0\u0bb1\0\u01ec\0\u01ec\0\173\0\u0bda\0\u01ec"; + + private static int[] zzUnpackRowMap() { + int[] result = new int[104]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; + 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; } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); + private static final String ZZ_TRANS_PACKED_0 = + "\4\4\1\5\1\6\1\4\1\7\1\6\3\4\1\10" + + "\13\7\1\4\2\7\1\4\1\7\1\4\1\7\3\4" + + "\3\7\1\4\1\7\2\4\1\11\1\12\1\13\36\11" + + "\1\14\3\11\1\15\3\11\1\4\1\16\1\17\1\20" + + "\1\4\1\21\1\4\2\21\1\22\1\4\1\23\1\4" + + "\1\24\1\25\1\26\1\21\1\27\3\21\1\30\2\21" + + "\1\31\1\32\1\21\1\33\1\34\1\35\1\21\1\4" + + "\1\22\1\4\1\21\1\36\1\21\1\37\1\21\1\4" + + "\1\22\55\0\1\5\51\0\5\40\1\41\2\0\13\40" + + "\1\0\4\40\1\0\1\40\1\0\1\40\1\0\3\40" + + "\1\0\1\40\1\0\1\40\5\0\2\40\3\7\1\41" + + "\2\0\13\7\1\0\4\7\1\0\1\7\1\0\1\7" + + "\1\0\3\7\1\0\1\7\1\0\1\7\1\11\2\0" + + "\36\11\1\0\3\11\1\0\3\11\2\0\1\13\46\0" + + "\2\42\1\0\12\42\1\43\1\44\2\42\1\45\3\42" + + "\1\46\5\42\1\47\4\42\1\50\1\51\3\42\1\52" + + "\1\53\1\54\1\47\2\0\1\17\46\0\1\20\2\0" + + "\46\20\5\0\5\21\3\0\13\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\11\0\1\22\6\0\1\55\12\0\1\22\1\0" + + "\1\56\1\55\1\0\1\22\7\0\1\22\5\0\5\21" + + "\3\0\1\21\1\57\11\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\5\0\5\21\3\0\3\21\1\60\7\21\1\0\4\21" + + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" + + "\1\0\1\21\5\0\5\21\3\0\10\21\1\61\2\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\5\21" + + "\1\62\5\21\1\0\4\21\1\0\1\21\1\0\1\21" + + "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21" + + "\3\0\2\21\1\63\10\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\11\0\1\64\17\0\1\65\1\0\1\66\4\0\1\64" + + "\7\0\1\64\5\0\5\21\3\0\10\21\1\67\2\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\11\0\1\70\6\0\1\55" + + "\12\0\1\70\1\0\1\56\1\55\1\0\1\70\7\0" + + "\1\70\5\0\5\21\3\0\5\21\1\71\5\21\1\0" + + "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0" + + "\1\21\1\0\1\21\11\0\1\56\21\0\1\56\4\0" + + "\1\56\7\0\1\56\5\0\5\21\3\0\13\21\1\0" + + "\4\21\1\0\1\21\1\0\1\21\1\0\2\21\1\72" + + "\1\0\1\21\1\0\1\21\33\0\1\50\4\0\1\50" + + "\7\0\1\50\33\0\1\73\4\0\1\73\7\0\1\73" + + "\11\0\1\74\16\0\1\75\2\0\1\74\3\0\1\75" + + "\1\74\7\0\1\74\11\0\1\56\6\0\1\55\12\0" + + "\1\56\2\0\1\55\1\0\1\56\7\0\1\56\5\0" + + "\5\21\3\0\2\21\1\76\10\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\5\21\3\0\13\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\1\77\2\21\1\0\1\21" + + "\1\0\1\21\5\0\5\21\3\0\11\21\1\100\1\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\6\21" + + "\1\101\4\21\1\0\4\21\1\0\1\21\1\0\1\21" + + "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21" + + "\3\0\6\21\1\102\4\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\11\0\1\64\21\0\1\64\4\0\1\64\7\0\1\64" + + "\25\0\1\103\30\0\5\21\3\0\4\21\1\104\6\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\13\21" + + "\1\0\3\21\1\105\1\0\1\21\1\0\1\21\1\0" + + "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0" + + "\10\21\1\106\2\21\1\0\4\21\1\0\1\21\1\0" + + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\11\0" + + "\1\74\21\0\1\74\4\0\1\74\7\0\1\74\5\0" + + "\5\21\3\0\3\21\1\107\7\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\5\21\3\0\12\21\1\110\1\0\4\21" + + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" + + "\1\0\1\21\5\0\5\21\3\0\3\21\1\111\7\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\5\0\5\21\3\0\7\21" + + "\1\112\3\21\1\0\4\21\1\0\1\21\1\0\1\21" + + "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21" + + "\3\0\6\21\1\113\4\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\21\0\1\114\34\0\5\21\3\0\12\21\1\115\1\0" + + "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0" + + "\1\21\1\0\1\21\5\0\5\21\3\0\7\21\1\116" + + "\3\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" + + "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0" + + "\7\21\1\117\3\21\1\0\4\21\1\0\1\21\1\0" + + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0" + + "\5\21\3\0\4\21\1\120\6\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\5\21\3\0\3\21\1\121\7\21\1\0" + + "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0" + + "\1\21\1\0\1\21\27\0\1\122\26\0\5\21\3\0" + + "\10\21\1\123\2\21\1\0\4\21\1\0\1\21\1\0" + + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0" + + "\5\21\3\0\1\124\12\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\5\0\5\21\3\0\1\125\12\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\5\21\3\0\12\21\1\126\1\0\4\21" + + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" + + "\1\0\1\21\25\0\1\127\30\0\5\21\3\0\12\21" + + "\1\130\1\0\4\21\1\0\1\21\1\0\1\21\1\0" + + "\3\21\1\0\1\21\1\0\1\21\5\0\5\21\3\0" + + "\5\21\1\131\5\21\1\0\4\21\1\0\1\21\1\0" + + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\5\0" + + "\5\21\3\0\3\21\1\132\7\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\5\21\3\0\10\21\1\133\2\21\1\0" + + "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0" + + "\1\21\1\0\1\21\27\0\1\134\26\0\5\21\3\0" + + "\1\135\12\21\1\0\4\21\1\0\1\21\1\0\1\21" + + "\1\0\3\21\1\0\1\21\1\0\1\21\5\0\5\21" + + "\3\0\10\21\1\136\2\21\1\0\4\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\5\0\5\21\3\0\1\21\1\137\11\21\1\0\4\21" + + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" + + "\1\0\1\21\5\0\5\21\3\0\3\21\1\140\7\21" + + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" + + "\1\0\1\21\1\0\1\21\15\0\1\141\40\0\5\21" + + "\3\0\13\21\1\0\1\21\1\105\2\21\1\0\1\21" + + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" + + "\5\0\5\21\3\0\1\142\12\21\1\0\4\21\1\0" + + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" + + "\1\21\5\0\4\21\1\143\3\0\13\21\1\0\2\21" + + "\1\144\1\21\1\0\1\21\1\0\1\143\1\0\3\21" + + "\1\0\1\21\1\0\1\143\5\0\5\21\3\0\11\21" + + "\1\145\1\21\1\0\4\21\1\0\1\21\1\0\1\21" + + "\1\0\3\21\1\0\1\21\1\0\1\21\32\0\1\146" + + "\23\0\4\21\1\147\3\0\13\21\1\0\2\21\1\150" + + "\1\21\1\0\1\21\1\0\1\147\1\0\3\21\1\0" + + "\1\21\1\0\1\147\5\0\4\21\1\143\3\0\13\21" + + "\1\0\2\21\1\143\1\21\1\0\1\21\1\0\1\143" + + "\1\0\3\21\1\0\1\21\1\0\1\143\5\0\4\21" + + "\1\147\3\0\13\21\1\0\2\21\1\147\1\21\1\0" + + "\1\21\1\0\1\147\1\0\3\21\1\0\1\21\1\0" + + "\1\147"; + + private static int[] zzUnpackTrans() { + int[] result = new int[3075]; + 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; + } + /* 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 = + "\3\0\1\11\3\1\1\11\2\1\1\11\1\1\1\11" + + "\1\1\1\11\3\1\1\11\13\1\1\11\1\0\6\11" + + "\2\1\4\11\1\0\7\1\1\0\1\11\4\1\1\11" + + "\1\1\1\0\5\1\1\0\10\1\1\0\5\1\1\0" + + "\4\1\1\0\4\1\1\0\4\1\1\0\4\1\1\11" + + "\2\1"; + + private static int[] zzUnpackAttribute() { + int[] result = new int[104]; + 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 input device + */ + private java.io.Reader zzReader; + /** + * the current state of the DFA + */ + private int zzState; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; + /** + * 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; + /** + * 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; + + /* user code: */ + StringBuffer string = new StringBuffer(); + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public FlasmLexer() { + } + + public int yychar() { + return yychar; + } + + public int yyline() { + return yyline + 1; + } + + /** + * Creates a new scanner There is also a java.io.InputStream version of this + * constructor. + * + * @param in the java.io.Reader to read input from. + */ + public FlasmLexer(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. There is also java.io.Reader version of this + * constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public FlasmLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2206) { + 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) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length - zzEndRead); + + if (numRead > 0) { + zzEndRead += numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } } - // numRead < 0 - return true; - } + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - 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. - * - * @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; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * 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]; - } - - throw new Error(message); - } - - - /** - * 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); - - zzMarkedPos -= number; - } - - - /** - * 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 ASMParsedSymbol yylex() throws java.io.IOException, ParseException { - int zzInput; - int zzAction; - - // 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; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - boolean zzR = false; - for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; - zzCurrentPosL++) { - switch (zzBufferL[zzCurrentPosL]) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn++; + if (zzReader != null) { + zzReader.close(); } - } + } - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + /** + * 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. + * + * @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; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + } + + /** + * 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]; } - if (zzPeek) yyline--; - } - zzAction = -1; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; + throw new Error(message); + } + /** + * 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); + } + + zzMarkedPos -= number; + } + + /** + * 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 ASMParsedSymbol yylex() throws java.io.IOException, ParseException { + int zzInput; + int zzAction; + + // 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) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - 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 = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; + zzMarkedPosL = zzMarkedPos; - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + yychar += zzMarkedPosL - zzStartRead; + boolean zzR = false; + for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL++) { + switch (zzBufferL[zzCurrentPosL]) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) { + zzR = false; + } else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn++; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } else if (zzAtEOF) { + zzPeek = false; + } else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) { + zzPeek = false; + } else { + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + } + if (zzPeek) { + yyline--; + } + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; + } 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 = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 23: { + string.append('\''); + } + case 31: + break; + case 25: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE); + } + case 32: + break; + case 19: { + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); + } + case 33: + break; + case 4: { + string.append(yytext()); + } + case 34: + break; + case 7: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); + } + case 35: + break; + case 16: { + string.append('\r'); + } + case 36: + break; + case 12: { + yybegin(STRING); + string.setLength(0); + } + case 37: + break; + case 26: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL, new Null()); + } + case 38: + break; + case 3: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); + } + case 39: + break; + case 30: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); + } + case 40: + break; + case 22: { + string.append('\b'); + } + case 41: + break; + case 9: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 42: + break; + case 5: { + throw new ParseException("Unterminated string at end of line", yyline + 1); + } + case 43: + break; + case 27: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.FALSE); + } + case 44: + break; + case 24: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT, new Double(Double.parseDouble((yytext())))); + } + case 45: + break; + case 15: { + string.append('\t'); + } + case 46: + break; + case 6: { + yybegin(PARAMETERS); + // length also includes the trailing quote + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING, string.toString()); + } + case 47: + break; + case 2: { + yybegin(PARAMETERS); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + } + case 48: + break; + case 28: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); + } + case 49: + break; + case 13: { + String s = yytext(); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); + } + case 50: + break; + case 20: { + string.append('\\'); + } + case 51: + break; + case 14: { + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 52: + break; + case 29: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED, new Undefined()); + } + case 53: + break; + case 18: { + string.append('\n'); + } + case 54: + break; + case 10: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER, new Long(Long.parseLong((yytext())))); + } + case 55: + break; + case 17: { + string.append('\f'); + } + case 56: + break; + case 8: { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT, yytext().substring(1)); + } + case 57: + break; + case 11: { + yybegin(YYINITIAL); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); + } + case 58: + break; + case 21: { + string.append('\"'); + } + case 59: + break; + case 1: { + } + case 60: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 23: - { string.append( '\'' ); - } - case 31: break; - case 25: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.TRUE); - } - case 32: break; - case 19: - { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); - } - case 33: break; - case 4: - { string.append( yytext() ); - } - case 34: break; - case 7: - { yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); - } - case 35: break; - case 16: - { string.append( '\r' ); - } - case 36: break; - case 12: - { yybegin(STRING); - string.setLength(0); - } - case 37: break; - case 26: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL,new Null()); - } - case 38: break; - case 3: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); - } - case 39: break; - case 30: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT,new ConstantIndex(Integer.parseInt(yytext().substring(8)))); - } - case 40: break; - case 22: - { string.append( '\b' ); - } - case 41: break; - case 9: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER,yytext()); - } - case 42: break; - case 5: - { throw new ParseException("Unterminated string at end of line",yyline+1); - } - case 43: break; - case 27: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.FALSE); - } - case 44: break; - case 24: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); - } - case 45: break; - case 15: - { string.append( '\t' ); - } - case 46: break; - case 6: - { yybegin(PARAMETERS); - // length also includes the trailing quote - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING,string.toString()); - } - case 47: break; - case 2: - { yybegin(PARAMETERS); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME,yytext()); - } - case 48: break; - case 28: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER,new RegisterNumber(Integer.parseInt(yytext().substring(8)))); - } - case 49: break; - case 13: - { String s=yytext(); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL,s.substring(0,s.length()-1)); - } - case 50: break; - case 20: - { string.append( '\\' ); - } - case 51: break; - case 14: - { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); - } - case 52: break; - case 29: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED,new Undefined()); - } - case 53: break; - case 18: - { string.append( '\n' ); - } - case 54: break; - case 10: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); - } - case 55: break; - case 17: - { string.append( '\f' ); - } - case 56: break; - case 8: - { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT,yytext().substring(1)); - } - case 57: break; - case 11: - { yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); - } - case 58: break; - case 21: - { string.append( '\"' ); - } - case 59: break; - case 1: - { - } - case 60: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } } - } - - } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java index c40c9dd0c..c5ec9cd48 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptLexer.java @@ -17,729 +17,732 @@ * along with this program. If not, see . */ package com.jpexs.decompiler.flash.action.parser.script; + import com.jpexs.decompiler.flash.action.parser.ParseException; import java.util.Stack; - /** - * This class is a scanner generated by - * JFlex 1.4.3 - * on 7.4.13 15:38 from the specification file + * This class is a scanner generated by + * JFlex 1.4.3 on 7.4.13 15:38 from the + * specification file * D:/Dokumenty/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/action/parser/script/actionscript.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; + /** + * lexical states + */ + public static final int XML = 8; + public static final int XMLSTARTTAG = 6; + public static final int STRING = 2; + public static final int YYINITIAL = 0; + public static final int CHARLITERAL = 4; + /** + * 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 + }; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\7\1\3\1\2\1\0\1\3\1\1\16\7\4\0\1\14\1\70" + + "\1\16\1\0\1\6\1\77\1\73\1\30\1\60\1\61\1\5\1\75" + + "\1\67\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\66" + + "\1\12\1\15\1\13\1\72\1\100\4\22\1\25\1\22\21\6\1\21" + + "\2\6\1\64\1\27\1\65\1\76\1\6\1\0\1\34\1\31\1\36" + + "\1\45\1\33\1\46\1\57\1\51\1\43\1\6\1\35\1\47\1\54" + + "\1\41\1\40\1\52\1\6\1\32\1\37\1\42\1\44\1\55\1\50" + + "\1\56\1\53\1\6\1\62\1\74\1\63\1\71\41\7\2\0\4\6" + + "\4\0\1\6\2\0\1\7\7\0\1\6\4\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\10\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\236\6\11\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\15\0\4\7\7\0\1\6\4\0" + + "\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6" + + "\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6" + + "\2\0\1\6\17\0\1\7\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\244\0\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6" + + "\2\7\2\0\12\7\1\0\7\6\1\0\7\6\1\0\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\4\6" + + "\7\0\1\6\5\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\1\0\1\6\17\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\11\0\1\6\7\0\3\7\1\0\10\6\1\0" + + "\3\6\1\0\27\6\1\0\12\6\1\0\5\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\22\0\2\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\17\0\2\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\22\0" + + "\2\7\15\0\60\6\1\7\2\6\7\7\4\0\10\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" + + "\2\6\42\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" + + "\12\0\53\6\1\0\1\6\3\0\u0149\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\6\17\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\3\0\2\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\35\6\3\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\130\0\5\7\57\6\21\7\7\6\4\0" + + "\12\7\21\0\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7" + + "\6\0\46\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\1\7" + + "\15\0\300\6\47\7\25\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\16\0\5\7\32\0\5\7\20\0\2\6\23\0\1\6" + + "\13\0\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6" + + "\3\0\32\6\26\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\51\6\u0a77\0\57\6\1\0\57\6" + + "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\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\u01d5\0\3\6\31\0\11\6\6\7\1\0" + + "\5\6\2\0\5\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\u51cc\6\64\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\14\0\2\7" + + "\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0\147\6\2\0" + + "\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7\3\6\1\7" + + "\4\6\1\7\27\6\5\7\20\0\1\6\7\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\46\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\1\7" + + "\4\0\60\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\43\0\6\6\2\0\6\6\2\0\6\6" + + "\11\0\7\6\1\0\7\6\221\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\u2104\0\u012e\6\2\0" + + "\76\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\50\0" + + "\15\6\3\0\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0" + + "\1\6\6\0\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0" + + "\12\7\7\0\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0" + + "\6\6\2\0\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0" + + "\2\6\22\0\3\7\4\0"; + /** + * 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(); + private static final String ZZ_ACTION_PACKED_0 = + "\5\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\2\15\1\16\1\17" + + "\21\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26" + + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36" + + "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44" + + "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47" + + "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55" + + "\1\56\1\57\1\51\1\0\2\57\1\0\1\60\1\61" + + "\5\6\1\62\16\6\1\63\1\64\1\65\3\6\1\66" + + "\15\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75" + + "\1\76\1\77\1\100\1\101\2\102\1\103\1\104\1\105" + + "\1\106\1\107\1\110\1\111\6\0\2\3\2\0\1\112" + + "\3\0\1\113\1\0\1\114\1\115\1\116\2\117\1\57" + + "\1\51\1\0\11\6\1\120\4\6\1\121\3\6\1\122" + + "\6\6\1\123\4\6\1\124\10\6\1\125\1\6\1\126" + + "\1\102\7\0\1\127\5\0\1\130\1\117\1\57\2\6" + + "\1\131\1\132\1\6\1\133\11\6\1\134\1\135\1\6" + + "\1\136\13\6\1\137\5\6\1\140\1\41\1\0\1\141" + + "\12\0\1\117\1\57\1\142\2\6\1\143\1\144\1\6" + + "\1\145\1\6\1\146\3\6\1\147\10\6\1\150\2\6" + + "\1\151\4\6\10\0\1\117\1\57\1\152\2\6\1\153" + + "\1\154\2\6\1\155\3\6\1\156\2\6\1\157\6\6" + + "\1\160\2\0\1\113\1\117\1\57\1\161\7\6\1\162" + + "\1\163\1\164\2\6\1\165\1\166\1\41\1\117\1\57" + + "\1\167\1\170\2\6\1\171\2\6\1\172\1\6\1\117" + + "\1\57\1\173\1\6\1\174\1\6\1\175\1\117\1\57" + + "\1\176\1\177\6\57"; - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - public static final int XML = 8; - public static final int XMLSTARTTAG = 6; - public static final int STRING = 2; - public static final int YYINITIAL = 0; - public static final int CHARLITERAL = 4; - - /** - * 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 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\7\1\3\1\2\1\0\1\3\1\1\16\7\4\0\1\14\1\70"+ - "\1\16\1\0\1\6\1\77\1\73\1\30\1\60\1\61\1\5\1\75"+ - "\1\67\1\26\1\11\1\4\1\17\3\23\4\24\2\20\1\10\1\66"+ - "\1\12\1\15\1\13\1\72\1\100\4\22\1\25\1\22\21\6\1\21"+ - "\2\6\1\64\1\27\1\65\1\76\1\6\1\0\1\34\1\31\1\36"+ - "\1\45\1\33\1\46\1\57\1\51\1\43\1\6\1\35\1\47\1\54"+ - "\1\41\1\40\1\52\1\6\1\32\1\37\1\42\1\44\1\55\1\50"+ - "\1\56\1\53\1\6\1\62\1\74\1\63\1\71\41\7\2\0\4\6"+ - "\4\0\1\6\2\0\1\7\7\0\1\6\4\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\10\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\236\6\11\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\15\0\4\7\7\0\1\6\4\0"+ - "\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6"+ - "\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6"+ - "\2\0\1\6\17\0\1\7\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\244\0\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6"+ - "\2\7\2\0\12\7\1\0\7\6\1\0\7\6\1\0\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\4\6"+ - "\7\0\1\6\5\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\1\0\1\6\17\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\11\0\1\6\7\0\3\7\1\0\10\6\1\0"+ - "\3\6\1\0\27\6\1\0\12\6\1\0\5\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\22\0\2\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\17\0\2\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\22\0"+ - "\2\7\15\0\60\6\1\7\2\6\7\7\4\0\10\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"+ - "\2\6\42\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"+ - "\12\0\53\6\1\0\1\6\3\0\u0149\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\6\17\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\3\0\2\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\35\6\3\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\130\0\5\7\57\6\21\7\7\6\4\0"+ - "\12\7\21\0\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7"+ - "\6\0\46\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\1\7"+ - "\15\0\300\6\47\7\25\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\16\0\5\7\32\0\5\7\20\0\2\6\23\0\1\6"+ - "\13\0\5\7\5\0\6\7\1\0\1\6\15\0\1\6\20\0\15\6"+ - "\3\0\32\6\26\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\51\6\u0a77\0\57\6\1\0\57\6"+ - "\1\0\205\6\6\0\4\6\3\7\16\0\46\6\12\0\66\6\11\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\u01d5\0\3\6\31\0\11\6\6\7\1\0"+ - "\5\6\2\0\5\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\u51cc\6\64\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\14\0\2\7"+ - "\1\0\31\6\10\0\120\6\2\7\45\0\11\6\2\0\147\6\2\0"+ - "\4\6\1\0\2\6\16\0\12\6\120\0\10\6\1\7\3\6\1\7"+ - "\4\6\1\7\27\6\5\7\20\0\1\6\7\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\46\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\1\7"+ - "\4\0\60\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\43\0\6\6\2\0\6\6\2\0\6\6"+ - "\11\0\7\6\1\0\7\6\221\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\u2104\0\u012e\6\2\0"+ - "\76\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\50\0"+ - "\15\6\3\0\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0"+ - "\1\6\6\0\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0"+ - "\12\7\7\0\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0"+ - "\6\6\2\0\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0"+ - "\2\6\22\0\3\7\4\0"; - - /** - * 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(); - - private static final String ZZ_ACTION_PACKED_0 = - "\5\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\2\15\1\16\1\17"+ - "\21\6\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+ - "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36"+ - "\1\37\1\40\1\41\2\42\1\43\1\1\1\41\2\44"+ - "\1\41\1\1\1\45\3\41\1\3\1\0\1\46\1\47"+ - "\1\50\2\0\1\51\1\0\1\52\1\53\1\54\1\55"+ - "\1\56\1\57\1\51\1\0\2\57\1\0\1\60\1\61"+ - "\5\6\1\62\16\6\1\63\1\64\1\65\3\6\1\66"+ - "\15\6\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\1\100\1\101\2\102\1\103\1\104\1\105"+ - "\1\106\1\107\1\110\1\111\6\0\2\3\2\0\1\112"+ - "\3\0\1\113\1\0\1\114\1\115\1\116\2\117\1\57"+ - "\1\51\1\0\11\6\1\120\4\6\1\121\3\6\1\122"+ - "\6\6\1\123\4\6\1\124\10\6\1\125\1\6\1\126"+ - "\1\102\7\0\1\127\5\0\1\130\1\117\1\57\2\6"+ - "\1\131\1\132\1\6\1\133\11\6\1\134\1\135\1\6"+ - "\1\136\13\6\1\137\5\6\1\140\1\41\1\0\1\141"+ - "\12\0\1\117\1\57\1\142\2\6\1\143\1\144\1\6"+ - "\1\145\1\6\1\146\3\6\1\147\10\6\1\150\2\6"+ - "\1\151\4\6\10\0\1\117\1\57\1\152\2\6\1\153"+ - "\1\154\2\6\1\155\3\6\1\156\2\6\1\157\6\6"+ - "\1\160\2\0\1\113\1\117\1\57\1\161\7\6\1\162"+ - "\1\163\1\164\2\6\1\165\1\166\1\41\1\117\1\57"+ - "\1\167\1\170\2\6\1\171\2\6\1\172\1\6\1\117"+ - "\1\57\1\173\1\6\1\174\1\6\1\175\1\117\1\57"+ - "\1\176\1\177\6\57"; - - private static int [] zzUnpackAction() { - int [] result = new int[397]; - 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); + private static int[] zzUnpackAction() { + int[] result = new int[397]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; } - 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\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u0145"+ - "\0\u01c7\0\u0208\0\u0249\0\u028a\0\u02cb\0\u030c\0\u034d\0\u038e"+ - "\0\u03cf\0\u0145\0\u0410\0\u0451\0\u0492\0\u0145\0\u04d3\0\u0514"+ - "\0\u0555\0\u0596\0\u05d7\0\u0618\0\u0659\0\u069a\0\u06db\0\u071c"+ - "\0\u075d\0\u079e\0\u07df\0\u0820\0\u0861\0\u08a2\0\u08e3\0\u0145"+ - "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0924"+ - "\0\u0145\0\u0145\0\u0965\0\u09a6\0\u09e7\0\u0a28\0\u0a69\0\u0145"+ - "\0\u0aaa\0\u0aeb\0\u0145\0\u0145\0\u0b2c\0\u0b6d\0\u0bae\0\u0145"+ - "\0\u0bef\0\u0c30\0\u0145\0\u0c71\0\u0145\0\u0cb2\0\u0cf3\0\u0d34"+ - "\0\u0145\0\u0145\0\u0145\0\u0d75\0\u0db6\0\u0df7\0\u0e38\0\u0e79"+ - "\0\u0145\0\u0eba\0\u0145\0\u0145\0\u0efb\0\u0f3c\0\u0f7d\0\u0fbe"+ - "\0\u0fff\0\u1040\0\u0145\0\u0145\0\u1081\0\u10c2\0\u1103\0\u1144"+ - "\0\u1185\0\u028a\0\u11c6\0\u1207\0\u1248\0\u1289\0\u12ca\0\u130b"+ - "\0\u134c\0\u138d\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513"+ - "\0\u028a\0\u1554\0\u028a\0\u1595\0\u15d6\0\u1617\0\u028a\0\u1658"+ - "\0\u1699\0\u16da\0\u171b\0\u175c\0\u179d\0\u17de\0\u181f\0\u1860"+ - "\0\u18a1\0\u18e2\0\u1923\0\u1964\0\u0145\0\u0145\0\u0145\0\u0145"+ - "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u19a5"+ - "\0\u19e6\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145"+ - "\0\u0c30\0\u1a27\0\u1a68\0\u1aa9\0\u1aea\0\u1b2b\0\u1b6c\0\u0145"+ - "\0\u1bad\0\u1bee\0\u0145\0\u1c2f\0\u1c70\0\u1cb1\0\u0145\0\u1cf2"+ - "\0\u0145\0\u1d33\0\u0145\0\u0f7d\0\u1d74\0\u1db5\0\u1df6\0\u1df6"+ - "\0\u1e37\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\u1f7c\0\u1fbd\0\u1ffe"+ - "\0\u203f\0\u028a\0\u2080\0\u20c1\0\u2102\0\u2143\0\u028a\0\u2184"+ - "\0\u21c5\0\u2206\0\u028a\0\u2247\0\u2288\0\u22c9\0\u230a\0\u234b"+ - "\0\u238c\0\u028a\0\u23cd\0\u240e\0\u244f\0\u2490\0\u028a\0\u24d1"+ - "\0\u2512\0\u2553\0\u2594\0\u25d5\0\u2616\0\u2657\0\u2698\0\u028a"+ - "\0\u26d9\0\u028a\0\u0145\0\u271a\0\u275b\0\u279c\0\u27dd\0\u281e"+ - "\0\u285f\0\u28a0\0\u0145\0\u28e1\0\u2922\0\u2963\0\u29a4\0\u29e5"+ - "\0\u0145\0\u2a26\0\u2a67\0\u2aa8\0\u2ae9\0\u028a\0\u028a\0\u2b2a"+ - "\0\u028a\0\u2b6b\0\u2bac\0\u2bed\0\u2c2e\0\u2c6f\0\u2cb0\0\u2cf1"+ - "\0\u2d32\0\u2d73\0\u028a\0\u028a\0\u2db4\0\u028a\0\u2df5\0\u2e36"+ - "\0\u2e77\0\u2eb8\0\u2ef9\0\u2f3a\0\u2f7b\0\u2fbc\0\u2ffd\0\u303e"+ - "\0\u307f\0\u028a\0\u30c0\0\u3101\0\u3142\0\u3183\0\u31c4\0\u028a"+ - "\0\u3205\0\u3246\0\u0145\0\u3287\0\u32c8\0\u3309\0\u334a\0\u338b"+ - "\0\u33cc\0\u340d\0\u344e\0\u348f\0\u34d0\0\u3511\0\u3552\0\u028a"+ - "\0\u3593\0\u35d4\0\u028a\0\u028a\0\u3615\0\u028a\0\u3656\0\u028a"+ - "\0\u3697\0\u36d8\0\u3719\0\u028a\0\u375a\0\u379b\0\u37dc\0\u381d"+ - "\0\u385e\0\u389f\0\u38e0\0\u3921\0\u028a\0\u3962\0\u39a3\0\u028a"+ - "\0\u39e4\0\u3a25\0\u3a66\0\u3aa7\0\u3ae8\0\u3b29\0\u3b6a\0\u3bab"+ - "\0\u3bec\0\u3c2d\0\u3c6e\0\u3caf\0\u3cf0\0\u3d31\0\u028a\0\u3d72"+ - "\0\u3db3\0\u028a\0\u028a\0\u3df4\0\u3e35\0\u028a\0\u3e76\0\u3eb7"+ - "\0\u3ef8\0\u028a\0\u3f39\0\u3f7a\0\u028a\0\u3fbb\0\u3ffc\0\u403d"+ - "\0\u407e\0\u40bf\0\u4100\0\u028a\0\u4141\0\u4182\0\u340d\0\u41c3"+ - "\0\u4204\0\u028a\0\u4245\0\u4286\0\u42c7\0\u4308\0\u4349\0\u438a"+ - "\0\u43cb\0\u028a\0\u028a\0\u028a\0\u440c\0\u444d\0\u028a\0\u028a"+ - "\0\u3b6a\0\u448e\0\u44cf\0\u028a\0\u028a\0\u4510\0\u4551\0\u028a"+ - "\0\u4592\0\u45d3\0\u028a\0\u4614\0\u4655\0\u4696\0\u028a\0\u46d7"+ - "\0\u028a\0\u4718\0\u028a\0\u0145\0\u4759\0\u028a\0\u028a\0\u479a"+ - "\0\u47db\0\u481c\0\u485d\0\u489e\0\u0f3c"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[397]; - 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++); + 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; } - 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\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u0145" + + "\0\u01c7\0\u0208\0\u0249\0\u028a\0\u02cb\0\u030c\0\u034d\0\u038e" + + "\0\u03cf\0\u0145\0\u0410\0\u0451\0\u0492\0\u0145\0\u04d3\0\u0514" + + "\0\u0555\0\u0596\0\u05d7\0\u0618\0\u0659\0\u069a\0\u06db\0\u071c" + + "\0\u075d\0\u079e\0\u07df\0\u0820\0\u0861\0\u08a2\0\u08e3\0\u0145" + + "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0924" + + "\0\u0145\0\u0145\0\u0965\0\u09a6\0\u09e7\0\u0a28\0\u0a69\0\u0145" + + "\0\u0aaa\0\u0aeb\0\u0145\0\u0145\0\u0b2c\0\u0b6d\0\u0bae\0\u0145" + + "\0\u0bef\0\u0c30\0\u0145\0\u0c71\0\u0145\0\u0cb2\0\u0cf3\0\u0d34" + + "\0\u0145\0\u0145\0\u0145\0\u0d75\0\u0db6\0\u0df7\0\u0e38\0\u0e79" + + "\0\u0145\0\u0eba\0\u0145\0\u0145\0\u0efb\0\u0f3c\0\u0f7d\0\u0fbe" + + "\0\u0fff\0\u1040\0\u0145\0\u0145\0\u1081\0\u10c2\0\u1103\0\u1144" + + "\0\u1185\0\u028a\0\u11c6\0\u1207\0\u1248\0\u1289\0\u12ca\0\u130b" + + "\0\u134c\0\u138d\0\u13ce\0\u140f\0\u1450\0\u1491\0\u14d2\0\u1513" + + "\0\u028a\0\u1554\0\u028a\0\u1595\0\u15d6\0\u1617\0\u028a\0\u1658" + + "\0\u1699\0\u16da\0\u171b\0\u175c\0\u179d\0\u17de\0\u181f\0\u1860" + + "\0\u18a1\0\u18e2\0\u1923\0\u1964\0\u0145\0\u0145\0\u0145\0\u0145" + + "\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u19a5" + + "\0\u19e6\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145\0\u0145" + + "\0\u0c30\0\u1a27\0\u1a68\0\u1aa9\0\u1aea\0\u1b2b\0\u1b6c\0\u0145" + + "\0\u1bad\0\u1bee\0\u0145\0\u1c2f\0\u1c70\0\u1cb1\0\u0145\0\u1cf2" + + "\0\u0145\0\u1d33\0\u0145\0\u0f7d\0\u1d74\0\u1db5\0\u1df6\0\u1df6" + + "\0\u1e37\0\u1e78\0\u1eb9\0\u1efa\0\u1f3b\0\u1f7c\0\u1fbd\0\u1ffe" + + "\0\u203f\0\u028a\0\u2080\0\u20c1\0\u2102\0\u2143\0\u028a\0\u2184" + + "\0\u21c5\0\u2206\0\u028a\0\u2247\0\u2288\0\u22c9\0\u230a\0\u234b" + + "\0\u238c\0\u028a\0\u23cd\0\u240e\0\u244f\0\u2490\0\u028a\0\u24d1" + + "\0\u2512\0\u2553\0\u2594\0\u25d5\0\u2616\0\u2657\0\u2698\0\u028a" + + "\0\u26d9\0\u028a\0\u0145\0\u271a\0\u275b\0\u279c\0\u27dd\0\u281e" + + "\0\u285f\0\u28a0\0\u0145\0\u28e1\0\u2922\0\u2963\0\u29a4\0\u29e5" + + "\0\u0145\0\u2a26\0\u2a67\0\u2aa8\0\u2ae9\0\u028a\0\u028a\0\u2b2a" + + "\0\u028a\0\u2b6b\0\u2bac\0\u2bed\0\u2c2e\0\u2c6f\0\u2cb0\0\u2cf1" + + "\0\u2d32\0\u2d73\0\u028a\0\u028a\0\u2db4\0\u028a\0\u2df5\0\u2e36" + + "\0\u2e77\0\u2eb8\0\u2ef9\0\u2f3a\0\u2f7b\0\u2fbc\0\u2ffd\0\u303e" + + "\0\u307f\0\u028a\0\u30c0\0\u3101\0\u3142\0\u3183\0\u31c4\0\u028a" + + "\0\u3205\0\u3246\0\u0145\0\u3287\0\u32c8\0\u3309\0\u334a\0\u338b" + + "\0\u33cc\0\u340d\0\u344e\0\u348f\0\u34d0\0\u3511\0\u3552\0\u028a" + + "\0\u3593\0\u35d4\0\u028a\0\u028a\0\u3615\0\u028a\0\u3656\0\u028a" + + "\0\u3697\0\u36d8\0\u3719\0\u028a\0\u375a\0\u379b\0\u37dc\0\u381d" + + "\0\u385e\0\u389f\0\u38e0\0\u3921\0\u028a\0\u3962\0\u39a3\0\u028a" + + "\0\u39e4\0\u3a25\0\u3a66\0\u3aa7\0\u3ae8\0\u3b29\0\u3b6a\0\u3bab" + + "\0\u3bec\0\u3c2d\0\u3c6e\0\u3caf\0\u3cf0\0\u3d31\0\u028a\0\u3d72" + + "\0\u3db3\0\u028a\0\u028a\0\u3df4\0\u3e35\0\u028a\0\u3e76\0\u3eb7" + + "\0\u3ef8\0\u028a\0\u3f39\0\u3f7a\0\u028a\0\u3fbb\0\u3ffc\0\u403d" + + "\0\u407e\0\u40bf\0\u4100\0\u028a\0\u4141\0\u4182\0\u340d\0\u41c3" + + "\0\u4204\0\u028a\0\u4245\0\u4286\0\u42c7\0\u4308\0\u4349\0\u438a" + + "\0\u43cb\0\u028a\0\u028a\0\u028a\0\u440c\0\u444d\0\u028a\0\u028a" + + "\0\u3b6a\0\u448e\0\u44cf\0\u028a\0\u028a\0\u4510\0\u4551\0\u028a" + + "\0\u4592\0\u45d3\0\u028a\0\u4614\0\u4655\0\u4696\0\u028a\0\u46d7" + + "\0\u028a\0\u4718\0\u028a\0\u0145\0\u4759\0\u028a\0\u028a\0\u479a" + + "\0\u47db\0\u481c\0\u485d\0\u489e\0\u0f3c"; - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\6"+ - "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23"+ - "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27"+ - "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36"+ - "\1\37\1\40\1\41\1\42\1\43\1\14\1\44\1\14"+ - "\1\45\2\14\1\46\1\14\1\47\1\50\1\51\1\52"+ - "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62"+ - "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72"+ - "\1\73\13\71\1\74\10\71\1\75\51\71\1\76\1\72"+ - "\1\73\24\76\1\75\1\74\50\76\1\6\1\77\1\100"+ - "\1\101\2\6\1\102\4\6\1\103\1\104\4\6\2\102"+ - "\2\6\1\102\3\6\27\102\21\6\1\105\1\77\1\100"+ - "\7\105\1\106\66\105\103\0\1\10\101\0\1\11\10\0"+ - "\1\11\70\0\1\107\1\110\7\0\1\111\100\0\1\112"+ - "\71\0\2\14\7\0\7\14\3\0\27\14\31\0\1\113"+ - "\101\0\1\114\1\115\4\0\2\116\2\0\2\116\62\0"+ - "\1\117\3\0\1\120\2\0\1\121\3\0\2\117\2\0"+ - "\1\117\3\0\27\117\34\0\1\122\1\0\1\123\100\0"+ - "\1\124\74\0\1\116\5\0\1\125\1\126\1\127\1\0"+ - "\1\130\1\131\1\132\5\0\1\132\22\0\1\127\33\0"+ - "\1\116\5\0\2\24\2\0\2\24\1\132\5\0\1\132"+ - "\62\0\1\133\10\0\1\134\60\0\2\14\7\0\7\14"+ - "\3\0\1\14\1\135\25\14\27\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\136\24\14\27\0\2\14\7\0\7\14"+ - "\3\0\3\14\1\137\12\14\1\140\6\14\1\141\1\14"+ - "\27\0\2\14\7\0\7\14\3\0\6\14\1\142\20\14"+ - "\27\0\2\14\7\0\7\14\3\0\3\14\1\143\3\14"+ - "\1\144\6\14\1\145\10\14\27\0\2\14\7\0\7\14"+ - "\3\0\2\14\1\146\6\14\1\147\1\14\1\150\3\14"+ - "\1\151\7\14\27\0\2\14\7\0\7\14\3\0\24\14"+ - "\1\152\2\14\27\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\153\1\154\7\14\1\155\13\14\27\0\2\14\7\0"+ - "\7\14\3\0\1\14\1\156\16\14\1\157\1\14\1\160"+ - "\4\14\27\0\2\14\7\0\7\14\3\0\6\14\1\161"+ - "\1\14\1\162\4\14\1\163\5\14\1\164\3\14\27\0"+ - "\2\14\7\0\7\14\3\0\6\14\1\165\20\14\27\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\166\4\14\1\167"+ - "\12\14\1\170\4\14\27\0\2\14\7\0\7\14\3\0"+ - "\3\14\1\171\3\14\1\172\2\14\1\173\1\174\13\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\175\5\14"+ - "\1\176\6\14\27\0\2\14\7\0\7\14\3\0\1\14"+ - "\1\177\1\14\1\200\7\14\1\201\13\14\27\0\2\14"+ - "\7\0\7\14\3\0\3\14\1\202\3\14\1\203\17\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\204\24\14"+ - "\36\0\1\205\100\0\1\206\55\0\1\207\22\0\1\210"+ - "\56\0\1\211\21\0\1\212\57\0\1\213\20\0\1\214"+ - "\100\0\1\215\63\0\1\71\2\0\13\71\1\0\10\71"+ - "\1\0\51\71\2\0\1\73\76\0\2\216\1\0\13\216"+ - "\1\217\1\220\3\216\1\220\1\221\2\216\1\222\1\223"+ - "\1\224\1\225\6\216\1\226\1\227\3\216\1\230\32\216"+ - "\1\76\2\0\24\76\2\0\50\76\2\0\1\100\101\0"+ - "\1\101\10\0\1\101\72\0\2\231\1\232\3\0\1\233"+ - "\1\234\1\0\7\231\3\0\27\231\24\0\1\101\2\0"+ - "\1\231\5\0\1\104\4\0\2\231\2\0\1\231\3\0"+ - "\27\231\25\0\1\235\1\0\1\236\12\0\2\236\2\0"+ - "\1\236\3\0\27\236\21\0\1\107\1\237\1\240\76\107"+ - "\5\241\1\242\73\241\11\0\1\243\75\0\1\244\12\0"+ - "\2\244\2\0\1\244\3\0\27\244\40\0\2\116\2\0"+ - "\2\116\1\132\5\0\1\132\53\0\1\245\1\117\1\246"+ - "\2\0\1\247\1\250\2\0\2\117\2\245\2\117\1\245"+ - "\3\0\27\245\36\0\1\251\76\0\1\252\1\0\1\253"+ - "\74\0\1\116\5\0\1\125\1\126\2\0\1\130\1\131"+ - "\1\132\5\0\1\132\56\0\1\116\5\0\2\126\2\0"+ - "\2\126\1\132\5\0\1\132\64\0\1\254\1\255\1\0"+ - "\4\255\3\0\1\255\1\0\2\255\1\0\1\255\6\0"+ - "\2\255\43\0\1\116\5\0\1\131\1\126\2\0\2\131"+ - "\1\132\5\0\1\132\56\0\1\116\5\0\1\256\1\126"+ - "\2\0\2\256\1\132\5\0\1\132\64\0\2\257\2\0"+ - "\2\257\1\0\1\260\46\0\1\260\11\0\2\14\7\0"+ - "\7\14\3\0\2\14\1\261\24\14\27\0\2\14\7\0"+ - "\7\14\3\0\11\14\1\262\15\14\27\0\2\14\7\0"+ - "\7\14\3\0\5\14\1\263\21\14\27\0\2\14\7\0"+ - "\7\14\3\0\6\14\1\264\20\14\27\0\2\14\7\0"+ - "\7\14\3\0\11\14\1\265\15\14\27\0\2\14\7\0"+ - "\7\14\3\0\6\14\1\266\2\14\1\267\15\14\27\0"+ - "\2\14\7\0\7\14\3\0\10\14\1\270\16\14\27\0"+ - "\2\14\7\0\7\14\3\0\3\14\1\271\23\14\27\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\272\15\14\27\0"+ - "\2\14\7\0\7\14\3\0\3\14\1\273\23\14\27\0"+ - "\2\14\7\0\7\14\3\0\21\14\1\274\5\14\27\0"+ - "\2\14\7\0\7\14\3\0\12\14\1\275\14\14\27\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\276\24\14\27\0"+ - "\2\14\7\0\7\14\3\0\17\14\1\277\7\14\27\0"+ - "\2\14\7\0\7\14\3\0\23\14\1\300\3\14\27\0"+ - "\2\14\7\0\7\14\3\0\16\14\1\301\10\14\27\0"+ - "\2\14\7\0\7\14\3\0\13\14\1\302\6\14\1\303"+ - "\4\14\27\0\2\14\7\0\7\14\3\0\1\14\1\304"+ - "\10\14\1\305\14\14\27\0\2\14\7\0\7\14\3\0"+ - "\21\14\1\306\5\14\27\0\2\14\7\0\7\14\3\0"+ - "\6\14\1\307\2\14\1\310\15\14\27\0\2\14\7\0"+ - "\7\14\3\0\21\14\1\311\5\14\27\0\2\14\7\0"+ - "\7\14\3\0\2\14\1\312\24\14\27\0\2\14\7\0"+ - "\7\14\3\0\15\14\1\313\1\314\10\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\315\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\16\14\1\316\10\14\27\0\2\14"+ - "\7\0\7\14\3\0\1\14\1\317\25\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\320\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\321\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\11\14\1\322\15\14\27\0\2\14"+ - "\7\0\7\14\3\0\12\14\1\323\14\14\27\0\2\14"+ - "\7\0\7\14\3\0\7\14\1\324\2\14\1\325\14\14"+ - "\27\0\2\14\7\0\7\14\3\0\5\14\1\326\21\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\327\26\14\27\0"+ - "\2\14\7\0\7\14\3\0\1\14\1\330\25\14\27\0"+ - "\2\14\7\0\7\14\3\0\12\14\1\331\14\14\27\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\332\15\14\40\0"+ - "\1\221\3\0\2\221\73\0\1\333\3\0\2\333\62\0"+ - "\1\334\12\0\2\334\2\0\1\334\3\0\27\334\35\0"+ - "\1\233\1\234\77\0\1\234\1\0\1\335\70\0\1\336"+ - "\12\0\2\336\2\0\1\336\3\0\27\336\27\0\1\337"+ - "\1\236\1\340\2\0\1\105\1\341\2\0\2\236\2\337"+ - "\2\236\1\337\3\0\27\337\23\0\1\240\76\0\5\241"+ - "\1\342\73\241\4\0\1\240\1\242\101\0\2\244\3\0"+ - "\1\343\3\0\7\244\3\0\27\244\27\0\2\245\1\344"+ - "\2\0\1\247\1\345\1\346\1\0\7\245\3\0\27\245"+ - "\27\0\1\347\12\0\2\347\2\0\1\347\3\0\27\347"+ - "\27\0\1\350\5\0\1\250\4\0\2\350\2\0\1\350"+ - "\3\0\27\350\36\0\1\351\102\0\2\352\1\0\4\352"+ - "\3\0\1\352\1\0\2\352\1\0\1\352\6\0\2\352"+ - "\43\0\1\116\5\0\1\353\1\126\2\0\2\353\1\132"+ - "\5\0\1\132\64\0\2\257\2\0\2\257\62\0\2\14"+ - "\7\0\7\14\3\0\3\14\1\354\23\14\27\0\2\14"+ - "\7\0\7\14\3\0\13\14\1\355\13\14\27\0\2\14"+ - "\7\0\7\14\3\0\20\14\1\356\6\14\27\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\357\24\14\27\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\360\24\14\27\0\2\14"+ - "\7\0\7\14\3\0\2\14\1\361\24\14\27\0\2\14"+ - "\7\0\7\14\3\0\5\14\1\362\21\14\27\0\2\14"+ - "\7\0\7\14\3\0\6\14\1\363\2\14\1\364\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\6\14\1\365\20\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\366\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\367\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\370\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\371\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\372\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\16\14\1\373\10\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\374\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\7\14\1\375\17\14"+ - "\27\0\2\14\7\0\7\14\3\0\6\14\1\376\20\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\377\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0100\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0101\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\7\14\1\u0102\6\14"+ - "\1\u0103\10\14\27\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\u0104\23\14\27\0\2\14\7\0\7\14\3\0\2\14"+ - "\1\u0105\24\14\27\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\u0106\23\14\27\0\2\14\7\0\7\14\3\0\6\14"+ - "\1\u0107\20\14\27\0\2\14\7\0\7\14\3\0\3\14"+ - "\1\u0108\23\14\27\0\2\14\7\0\7\14\3\0\5\14"+ - "\1\u0109\21\14\27\0\2\14\7\0\7\14\3\0\20\14"+ - "\1\u010a\6\14\27\0\2\14\7\0\7\14\3\0\16\14"+ - "\1\u010b\10\14\27\0\2\14\7\0\7\14\3\0\11\14"+ - "\1\u010c\15\14\27\0\2\14\7\0\7\14\3\0\24\14"+ - "\1\u010d\2\14\27\0\2\14\7\0\7\14\3\0\4\14"+ - "\1\u010e\22\14\27\0\2\14\7\0\7\14\3\0\16\14"+ - "\1\u010f\10\14\27\0\2\14\7\0\7\14\3\0\14\14"+ - "\1\u0110\12\14\27\0\2\334\4\0\1\233\1\234\1\0"+ - "\7\334\3\0\27\334\21\0\1\335\2\0\13\335\1\u0111"+ - "\62\335\6\0\2\336\1\u0112\2\0\1\u0113\3\0\7\336"+ - "\3\0\27\336\27\0\2\337\1\u0114\2\0\1\105\1\u0115"+ - "\1\u0116\1\0\7\337\3\0\27\337\27\0\1\u0117\12\0"+ - "\2\u0117\2\0\1\u0117\3\0\27\u0117\27\0\1\u0118\5\0"+ - "\1\341\4\0\2\u0118\2\0\1\u0118\3\0\27\u0118\21\0"+ - "\4\241\1\240\1\342\73\241\6\0\1\u0119\12\0\2\u0119"+ - "\2\0\1\u0119\3\0\27\u0119\27\0\1\350\5\0\1\345"+ - "\1\346\3\0\2\350\2\0\1\350\3\0\27\350\35\0"+ - "\1\346\1\0\1\u011a\70\0\1\u011b\1\347\3\0\1\247"+ - "\1\250\2\0\2\347\2\u011b\2\347\1\u011b\3\0\27\u011b"+ - "\27\0\2\350\1\u011c\3\0\1\u011d\1\346\1\0\7\350"+ - "\3\0\27\350\40\0\2\u011e\1\0\4\u011e\3\0\1\u011e"+ - "\1\0\2\u011e\1\0\1\u011e\6\0\2\u011e\43\0\1\116"+ - "\5\0\1\u011f\1\126\2\0\2\u011f\1\132\5\0\1\132"+ - "\53\0\2\14\7\0\7\14\3\0\4\14\1\u0120\22\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0121\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\10\14\1\u0122\16\14"+ - "\27\0\2\14\7\0\7\14\3\0\20\14\1\u0123\6\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0124\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0125\14\14"+ - "\27\0\2\14\7\0\7\14\3\0\6\14\1\u0126\20\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0127\14\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0128\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\5\14\1\u0129\21\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\u012a\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\6\14\1\u012b\20\14"+ - "\27\0\2\14\7\0\7\14\3\0\17\14\1\u012c\7\14"+ - "\27\0\2\14\7\0\7\14\3\0\7\14\1\u012d\17\14"+ - "\27\0\2\14\7\0\7\14\3\0\3\14\1\u012e\23\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\u012f\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0130\25\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0131\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\13\14\1\u0132\13\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0133\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\23\14\1\u0134\3\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0135\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0136\10\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0137\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0138\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0139\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013a\23\14"+ - "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013b\23\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\u013c\14\14"+ - "\21\0\1\335\2\0\11\335\1\u0111\1\335\1\u0111\62\335"+ - "\6\0\1\u013d\12\0\2\u013d\2\0\1\u013d\3\0\27\u013d"+ - "\27\0\1\u013e\12\0\2\u013e\2\0\1\u013e\3\0\27\u013e"+ - "\27\0\1\u0118\5\0\1\u0115\1\u0116\3\0\2\u0118\2\0"+ - "\1\u0118\3\0\27\u0118\35\0\1\u0116\1\0\1\u013f\70\0"+ - "\1\u0140\1\u0117\3\0\1\105\1\341\2\0\2\u0117\2\u0140"+ - "\2\u0117\1\u0140\3\0\27\u0140\27\0\2\u0118\1\u0141\3\0"+ - "\1\u0142\1\u0116\1\0\7\u0118\3\0\27\u0118\27\0\1\u011b"+ - "\1\u0119\3\0\1\247\1\345\1\346\1\0\2\u0119\2\u011b"+ - "\2\u0119\1\u011b\3\0\27\u011b\21\0\1\u011a\2\0\13\u011a"+ - "\1\u0143\62\u011a\6\0\2\u011b\1\u011c\2\0\1\247\1\345"+ - "\1\346\1\0\7\u011b\3\0\27\u011b\27\0\1\u0144\12\0"+ - "\2\u0144\2\0\1\u0144\3\0\27\u0144\35\0\1\u011d\1\346"+ - "\102\0\2\u0145\1\0\4\u0145\3\0\1\u0145\1\0\2\u0145"+ - "\1\0\1\u0145\6\0\2\u0145\43\0\1\116\5\0\1\u0146"+ - "\1\126\2\0\2\u0146\1\132\5\0\1\132\53\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\u0147\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\14\14\1\u0148\12\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\u0149\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\5\14\1\u014a\21\14\27\0\2\14"+ - "\7\0\7\14\3\0\20\14\1\u014b\6\14\27\0\2\14"+ - "\7\0\7\14\3\0\12\14\1\u014c\14\14\27\0\2\14"+ - "\7\0\7\14\3\0\21\14\1\u014d\5\14\27\0\2\14"+ - "\7\0\7\14\3\0\15\14\1\u014e\11\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\u014f\16\14\27\0\2\14"+ - "\7\0\7\14\3\0\10\14\1\u0150\4\14\1\u0151\11\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0152\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\23\14\1\u0153\3\14"+ - "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0154\10\14"+ - "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0155\24\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0156\14\14"+ - "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0157\10\14"+ - "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0158\14\14"+ - "\27\0\2\14\7\0\7\14\3\0\5\14\1\u0159\21\14"+ - "\27\0\2\14\7\0\7\14\3\0\11\14\1\u015a\15\14"+ - "\27\0\2\14\7\0\7\14\3\0\26\14\1\u015b\27\0"+ - "\2\14\7\0\7\14\3\0\5\14\1\u015c\21\14\27\0"+ - "\2\u013d\3\0\1\u0113\3\0\7\u013d\3\0\27\u013d\27\0"+ - "\1\u0140\1\u013e\3\0\1\105\1\u0115\1\u0116\1\0\2\u013e"+ - "\2\u0140\2\u013e\1\u0140\3\0\27\u0140\21\0\1\u013f\2\0"+ - "\13\u013f\1\u015d\62\u013f\6\0\2\u0140\1\u0141\2\0\1\105"+ - "\1\u0115\1\u0116\1\0\7\u0140\3\0\27\u0140\27\0\1\u015e"+ - "\12\0\2\u015e\2\0\1\u015e\3\0\27\u015e\35\0\1\u0142"+ - "\1\u0116\63\0\1\u011a\2\0\10\u011a\1\u015f\1\u0143\1\u011a"+ - "\1\u0143\62\u011a\6\0\2\u0144\4\0\1\u011d\1\346\1\0"+ - "\7\u0144\3\0\27\u0144\40\0\2\u0160\1\0\4\u0160\3\0"+ - "\1\u0160\1\0\2\u0160\1\0\1\u0160\6\0\2\u0160\43\0"+ - "\1\116\5\0\1\u0161\1\126\2\0\2\u0161\1\132\5\0"+ - "\1\132\53\0\2\14\7\0\7\14\3\0\6\14\1\u0162"+ - "\20\14\27\0\2\14\7\0\7\14\3\0\13\14\1\u0163"+ - "\13\14\27\0\2\14\7\0\7\14\3\0\14\14\1\u0164"+ - "\12\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0165"+ - "\23\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0166"+ - "\21\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0167"+ - "\23\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0168"+ - "\23\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0169"+ - "\24\14\27\0\2\14\7\0\7\14\3\0\11\14\1\u016a"+ - "\15\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u016b"+ - "\21\14\27\0\2\14\7\0\7\14\3\0\22\14\1\u016c"+ - "\4\14\27\0\2\14\7\0\7\14\3\0\7\14\1\u016d"+ - "\17\14\27\0\2\14\7\0\7\14\3\0\11\14\1\u016e"+ - "\15\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u016f"+ - "\24\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0170"+ - "\24\14\21\0\1\u013f\2\0\10\u013f\1\u0171\1\u015d\1\u013f"+ - "\1\u015d\62\u013f\6\0\2\u015e\4\0\1\u0142\1\u0116\1\0"+ - "\7\u015e\3\0\27\u015e\40\0\2\u0172\1\0\4\u0172\3\0"+ - "\1\u0172\1\0\2\u0172\1\0\1\u0172\6\0\2\u0172\43\0"+ - "\1\116\5\0\1\u0173\1\126\2\0\2\u0173\1\132\5\0"+ - "\1\132\53\0\2\14\7\0\7\14\3\0\2\14\1\u0174"+ - "\24\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0175"+ - "\24\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0176"+ - "\21\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0177"+ - "\24\14\27\0\2\14\7\0\7\14\3\0\16\14\1\u0178"+ - "\10\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0179"+ - "\21\14\27\0\2\14\7\0\7\14\3\0\10\14\1\u017a"+ - "\16\14\27\0\2\14\7\0\7\14\3\0\10\14\1\u017b"+ - "\16\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u017c"+ - "\24\14\40\0\2\u017d\1\0\4\u017d\3\0\1\u017d\1\0"+ - "\2\u017d\1\0\1\u017d\6\0\2\u017d\43\0\1\116\5\0"+ - "\1\u017e\1\126\2\0\2\u017e\1\132\5\0\1\132\53\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\u017f\24\14\27\0"+ - "\2\14\7\0\7\14\3\0\7\14\1\u0180\17\14\27\0"+ - "\2\14\7\0\7\14\3\0\2\14\1\u0181\24\14\27\0"+ - "\2\14\7\0\7\14\3\0\11\14\1\u0182\15\14\27\0"+ - "\2\14\7\0\7\14\3\0\14\14\1\u0183\12\14\40\0"+ - "\2\u0184\1\0\4\u0184\3\0\1\u0184\1\0\2\u0184\1\0"+ - "\1\u0184\6\0\2\u0184\43\0\1\116\5\0\1\u0185\1\126"+ - "\2\0\2\u0185\1\132\5\0\1\132\53\0\2\14\7\0"+ - "\7\14\3\0\15\14\1\u0186\11\14\27\0\2\14\7\0"+ - "\7\14\3\0\6\14\1\u0187\20\14\32\0\1\116\5\0"+ - "\1\u0188\1\126\2\0\2\u0188\1\132\5\0\1\132\56\0"+ - "\1\116\5\0\1\u0189\1\126\2\0\2\u0189\1\132\5\0"+ - "\1\132\56\0\1\116\5\0\1\u018a\1\126\2\0\2\u018a"+ - "\1\132\5\0\1\132\56\0\1\116\5\0\1\u018b\1\126"+ - "\2\0\2\u018b\1\132\5\0\1\132\56\0\1\116\5\0"+ - "\1\u018c\1\126\2\0\2\u018c\1\132\5\0\1\132\56\0"+ - "\1\116\5\0\1\u018d\1\126\2\0\2\u018d\1\132\5\0"+ - "\1\132\45\0"; - - private static int [] zzUnpackTrans() { - int [] result = new int[18655]; - 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); + private static int[] zzUnpackRowMap() { + int[] result = new int[397]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; } - 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 = - "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11"+ - "\21\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11"+ - "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0"+ - "\3\11\2\0\1\1\1\0\1\1\1\11\1\1\2\11"+ - "\2\1\1\0\2\1\1\0\2\11\50\1\13\11\2\1"+ - "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11"+ - "\1\0\1\11\1\1\1\11\4\1\1\0\52\1\1\11"+ - "\7\0\1\11\5\0\1\11\50\1\1\0\1\11\12\0"+ - "\37\1\10\0\30\1\2\0\45\1\1\11\11\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[397]; - 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); + 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; } - return j; - } + /** + * The transition table of the DFA + */ + private static final int[] ZZ_TRANS = zzUnpackTrans(); + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\6" + + "\1\15\1\16\1\17\1\20\1\11\1\21\1\22\1\23" + + "\1\24\2\14\2\24\1\14\1\25\1\6\1\26\1\27" + + "\1\30\1\31\1\32\1\14\1\33\1\34\1\35\1\36" + + "\1\37\1\40\1\41\1\42\1\43\1\14\1\44\1\14" + + "\1\45\2\14\1\46\1\14\1\47\1\50\1\51\1\52" + + "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62" + + "\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72" + + "\1\73\13\71\1\74\10\71\1\75\51\71\1\76\1\72" + + "\1\73\24\76\1\75\1\74\50\76\1\6\1\77\1\100" + + "\1\101\2\6\1\102\4\6\1\103\1\104\4\6\2\102" + + "\2\6\1\102\3\6\27\102\21\6\1\105\1\77\1\100" + + "\7\105\1\106\66\105\103\0\1\10\101\0\1\11\10\0" + + "\1\11\70\0\1\107\1\110\7\0\1\111\100\0\1\112" + + "\71\0\2\14\7\0\7\14\3\0\27\14\31\0\1\113" + + "\101\0\1\114\1\115\4\0\2\116\2\0\2\116\62\0" + + "\1\117\3\0\1\120\2\0\1\121\3\0\2\117\2\0" + + "\1\117\3\0\27\117\34\0\1\122\1\0\1\123\100\0" + + "\1\124\74\0\1\116\5\0\1\125\1\126\1\127\1\0" + + "\1\130\1\131\1\132\5\0\1\132\22\0\1\127\33\0" + + "\1\116\5\0\2\24\2\0\2\24\1\132\5\0\1\132" + + "\62\0\1\133\10\0\1\134\60\0\2\14\7\0\7\14" + + "\3\0\1\14\1\135\25\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\136\24\14\27\0\2\14\7\0\7\14" + + "\3\0\3\14\1\137\12\14\1\140\6\14\1\141\1\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\142\20\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\143\3\14" + + "\1\144\6\14\1\145\10\14\27\0\2\14\7\0\7\14" + + "\3\0\2\14\1\146\6\14\1\147\1\14\1\150\3\14" + + "\1\151\7\14\27\0\2\14\7\0\7\14\3\0\24\14" + + "\1\152\2\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\153\1\154\7\14\1\155\13\14\27\0\2\14\7\0" + + "\7\14\3\0\1\14\1\156\16\14\1\157\1\14\1\160" + + "\4\14\27\0\2\14\7\0\7\14\3\0\6\14\1\161" + + "\1\14\1\162\4\14\1\163\5\14\1\164\3\14\27\0" + + "\2\14\7\0\7\14\3\0\6\14\1\165\20\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\166\4\14\1\167" + + "\12\14\1\170\4\14\27\0\2\14\7\0\7\14\3\0" + + "\3\14\1\171\3\14\1\172\2\14\1\173\1\174\13\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\175\5\14" + + "\1\176\6\14\27\0\2\14\7\0\7\14\3\0\1\14" + + "\1\177\1\14\1\200\7\14\1\201\13\14\27\0\2\14" + + "\7\0\7\14\3\0\3\14\1\202\3\14\1\203\17\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\204\24\14" + + "\36\0\1\205\100\0\1\206\55\0\1\207\22\0\1\210" + + "\56\0\1\211\21\0\1\212\57\0\1\213\20\0\1\214" + + "\100\0\1\215\63\0\1\71\2\0\13\71\1\0\10\71" + + "\1\0\51\71\2\0\1\73\76\0\2\216\1\0\13\216" + + "\1\217\1\220\3\216\1\220\1\221\2\216\1\222\1\223" + + "\1\224\1\225\6\216\1\226\1\227\3\216\1\230\32\216" + + "\1\76\2\0\24\76\2\0\50\76\2\0\1\100\101\0" + + "\1\101\10\0\1\101\72\0\2\231\1\232\3\0\1\233" + + "\1\234\1\0\7\231\3\0\27\231\24\0\1\101\2\0" + + "\1\231\5\0\1\104\4\0\2\231\2\0\1\231\3\0" + + "\27\231\25\0\1\235\1\0\1\236\12\0\2\236\2\0" + + "\1\236\3\0\27\236\21\0\1\107\1\237\1\240\76\107" + + "\5\241\1\242\73\241\11\0\1\243\75\0\1\244\12\0" + + "\2\244\2\0\1\244\3\0\27\244\40\0\2\116\2\0" + + "\2\116\1\132\5\0\1\132\53\0\1\245\1\117\1\246" + + "\2\0\1\247\1\250\2\0\2\117\2\245\2\117\1\245" + + "\3\0\27\245\36\0\1\251\76\0\1\252\1\0\1\253" + + "\74\0\1\116\5\0\1\125\1\126\2\0\1\130\1\131" + + "\1\132\5\0\1\132\56\0\1\116\5\0\2\126\2\0" + + "\2\126\1\132\5\0\1\132\64\0\1\254\1\255\1\0" + + "\4\255\3\0\1\255\1\0\2\255\1\0\1\255\6\0" + + "\2\255\43\0\1\116\5\0\1\131\1\126\2\0\2\131" + + "\1\132\5\0\1\132\56\0\1\116\5\0\1\256\1\126" + + "\2\0\2\256\1\132\5\0\1\132\64\0\2\257\2\0" + + "\2\257\1\0\1\260\46\0\1\260\11\0\2\14\7\0" + + "\7\14\3\0\2\14\1\261\24\14\27\0\2\14\7\0" + + "\7\14\3\0\11\14\1\262\15\14\27\0\2\14\7\0" + + "\7\14\3\0\5\14\1\263\21\14\27\0\2\14\7\0" + + "\7\14\3\0\6\14\1\264\20\14\27\0\2\14\7\0" + + "\7\14\3\0\11\14\1\265\15\14\27\0\2\14\7\0" + + "\7\14\3\0\6\14\1\266\2\14\1\267\15\14\27\0" + + "\2\14\7\0\7\14\3\0\10\14\1\270\16\14\27\0" + + "\2\14\7\0\7\14\3\0\3\14\1\271\23\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\272\15\14\27\0" + + "\2\14\7\0\7\14\3\0\3\14\1\273\23\14\27\0" + + "\2\14\7\0\7\14\3\0\21\14\1\274\5\14\27\0" + + "\2\14\7\0\7\14\3\0\12\14\1\275\14\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\276\24\14\27\0" + + "\2\14\7\0\7\14\3\0\17\14\1\277\7\14\27\0" + + "\2\14\7\0\7\14\3\0\23\14\1\300\3\14\27\0" + + "\2\14\7\0\7\14\3\0\16\14\1\301\10\14\27\0" + + "\2\14\7\0\7\14\3\0\13\14\1\302\6\14\1\303" + + "\4\14\27\0\2\14\7\0\7\14\3\0\1\14\1\304" + + "\10\14\1\305\14\14\27\0\2\14\7\0\7\14\3\0" + + "\21\14\1\306\5\14\27\0\2\14\7\0\7\14\3\0" + + "\6\14\1\307\2\14\1\310\15\14\27\0\2\14\7\0" + + "\7\14\3\0\21\14\1\311\5\14\27\0\2\14\7\0" + + "\7\14\3\0\2\14\1\312\24\14\27\0\2\14\7\0" + + "\7\14\3\0\15\14\1\313\1\314\10\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\315\16\14\27\0\2\14" + + "\7\0\7\14\3\0\16\14\1\316\10\14\27\0\2\14" + + "\7\0\7\14\3\0\1\14\1\317\25\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\320\16\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\321\16\14\27\0\2\14" + + "\7\0\7\14\3\0\11\14\1\322\15\14\27\0\2\14" + + "\7\0\7\14\3\0\12\14\1\323\14\14\27\0\2\14" + + "\7\0\7\14\3\0\7\14\1\324\2\14\1\325\14\14" + + "\27\0\2\14\7\0\7\14\3\0\5\14\1\326\21\14" + + "\27\0\2\14\7\0\7\14\3\0\1\327\26\14\27\0" + + "\2\14\7\0\7\14\3\0\1\14\1\330\25\14\27\0" + + "\2\14\7\0\7\14\3\0\12\14\1\331\14\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\332\15\14\40\0" + + "\1\221\3\0\2\221\73\0\1\333\3\0\2\333\62\0" + + "\1\334\12\0\2\334\2\0\1\334\3\0\27\334\35\0" + + "\1\233\1\234\77\0\1\234\1\0\1\335\70\0\1\336" + + "\12\0\2\336\2\0\1\336\3\0\27\336\27\0\1\337" + + "\1\236\1\340\2\0\1\105\1\341\2\0\2\236\2\337" + + "\2\236\1\337\3\0\27\337\23\0\1\240\76\0\5\241" + + "\1\342\73\241\4\0\1\240\1\242\101\0\2\244\3\0" + + "\1\343\3\0\7\244\3\0\27\244\27\0\2\245\1\344" + + "\2\0\1\247\1\345\1\346\1\0\7\245\3\0\27\245" + + "\27\0\1\347\12\0\2\347\2\0\1\347\3\0\27\347" + + "\27\0\1\350\5\0\1\250\4\0\2\350\2\0\1\350" + + "\3\0\27\350\36\0\1\351\102\0\2\352\1\0\4\352" + + "\3\0\1\352\1\0\2\352\1\0\1\352\6\0\2\352" + + "\43\0\1\116\5\0\1\353\1\126\2\0\2\353\1\132" + + "\5\0\1\132\64\0\2\257\2\0\2\257\62\0\2\14" + + "\7\0\7\14\3\0\3\14\1\354\23\14\27\0\2\14" + + "\7\0\7\14\3\0\13\14\1\355\13\14\27\0\2\14" + + "\7\0\7\14\3\0\20\14\1\356\6\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\357\24\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\360\24\14\27\0\2\14" + + "\7\0\7\14\3\0\2\14\1\361\24\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\362\21\14\27\0\2\14" + + "\7\0\7\14\3\0\6\14\1\363\2\14\1\364\15\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\365\20\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\366\15\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\367\24\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\370\15\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\371\25\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\372\24\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\373\10\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\374\24\14" + + "\27\0\2\14\7\0\7\14\3\0\7\14\1\375\17\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\376\20\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\377\24\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0100\15\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0101\24\14" + + "\27\0\2\14\7\0\7\14\3\0\7\14\1\u0102\6\14" + + "\1\u0103\10\14\27\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0104\23\14\27\0\2\14\7\0\7\14\3\0\2\14" + + "\1\u0105\24\14\27\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0106\23\14\27\0\2\14\7\0\7\14\3\0\6\14" + + "\1\u0107\20\14\27\0\2\14\7\0\7\14\3\0\3\14" + + "\1\u0108\23\14\27\0\2\14\7\0\7\14\3\0\5\14" + + "\1\u0109\21\14\27\0\2\14\7\0\7\14\3\0\20\14" + + "\1\u010a\6\14\27\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u010b\10\14\27\0\2\14\7\0\7\14\3\0\11\14" + + "\1\u010c\15\14\27\0\2\14\7\0\7\14\3\0\24\14" + + "\1\u010d\2\14\27\0\2\14\7\0\7\14\3\0\4\14" + + "\1\u010e\22\14\27\0\2\14\7\0\7\14\3\0\16\14" + + "\1\u010f\10\14\27\0\2\14\7\0\7\14\3\0\14\14" + + "\1\u0110\12\14\27\0\2\334\4\0\1\233\1\234\1\0" + + "\7\334\3\0\27\334\21\0\1\335\2\0\13\335\1\u0111" + + "\62\335\6\0\2\336\1\u0112\2\0\1\u0113\3\0\7\336" + + "\3\0\27\336\27\0\2\337\1\u0114\2\0\1\105\1\u0115" + + "\1\u0116\1\0\7\337\3\0\27\337\27\0\1\u0117\12\0" + + "\2\u0117\2\0\1\u0117\3\0\27\u0117\27\0\1\u0118\5\0" + + "\1\341\4\0\2\u0118\2\0\1\u0118\3\0\27\u0118\21\0" + + "\4\241\1\240\1\342\73\241\6\0\1\u0119\12\0\2\u0119" + + "\2\0\1\u0119\3\0\27\u0119\27\0\1\350\5\0\1\345" + + "\1\346\3\0\2\350\2\0\1\350\3\0\27\350\35\0" + + "\1\346\1\0\1\u011a\70\0\1\u011b\1\347\3\0\1\247" + + "\1\250\2\0\2\347\2\u011b\2\347\1\u011b\3\0\27\u011b" + + "\27\0\2\350\1\u011c\3\0\1\u011d\1\346\1\0\7\350" + + "\3\0\27\350\40\0\2\u011e\1\0\4\u011e\3\0\1\u011e" + + "\1\0\2\u011e\1\0\1\u011e\6\0\2\u011e\43\0\1\116" + + "\5\0\1\u011f\1\126\2\0\2\u011f\1\132\5\0\1\132" + + "\53\0\2\14\7\0\7\14\3\0\4\14\1\u0120\22\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0121\25\14" + + "\27\0\2\14\7\0\7\14\3\0\10\14\1\u0122\16\14" + + "\27\0\2\14\7\0\7\14\3\0\20\14\1\u0123\6\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0124\15\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0125\14\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\u0126\20\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0127\14\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0128\25\14" + + "\27\0\2\14\7\0\7\14\3\0\5\14\1\u0129\21\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u012a\25\14" + + "\27\0\2\14\7\0\7\14\3\0\6\14\1\u012b\20\14" + + "\27\0\2\14\7\0\7\14\3\0\17\14\1\u012c\7\14" + + "\27\0\2\14\7\0\7\14\3\0\7\14\1\u012d\17\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u012e\23\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u012f\25\14" + + "\27\0\2\14\7\0\7\14\3\0\1\14\1\u0130\25\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0131\24\14" + + "\27\0\2\14\7\0\7\14\3\0\13\14\1\u0132\13\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0133\15\14" + + "\27\0\2\14\7\0\7\14\3\0\23\14\1\u0134\3\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0135\24\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0136\10\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0137\15\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0138\24\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0139\24\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013a\23\14" + + "\27\0\2\14\7\0\7\14\3\0\3\14\1\u013b\23\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u013c\14\14" + + "\21\0\1\335\2\0\11\335\1\u0111\1\335\1\u0111\62\335" + + "\6\0\1\u013d\12\0\2\u013d\2\0\1\u013d\3\0\27\u013d" + + "\27\0\1\u013e\12\0\2\u013e\2\0\1\u013e\3\0\27\u013e" + + "\27\0\1\u0118\5\0\1\u0115\1\u0116\3\0\2\u0118\2\0" + + "\1\u0118\3\0\27\u0118\35\0\1\u0116\1\0\1\u013f\70\0" + + "\1\u0140\1\u0117\3\0\1\105\1\341\2\0\2\u0117\2\u0140" + + "\2\u0117\1\u0140\3\0\27\u0140\27\0\2\u0118\1\u0141\3\0" + + "\1\u0142\1\u0116\1\0\7\u0118\3\0\27\u0118\27\0\1\u011b" + + "\1\u0119\3\0\1\247\1\345\1\346\1\0\2\u0119\2\u011b" + + "\2\u0119\1\u011b\3\0\27\u011b\21\0\1\u011a\2\0\13\u011a" + + "\1\u0143\62\u011a\6\0\2\u011b\1\u011c\2\0\1\247\1\345" + + "\1\346\1\0\7\u011b\3\0\27\u011b\27\0\1\u0144\12\0" + + "\2\u0144\2\0\1\u0144\3\0\27\u0144\35\0\1\u011d\1\346" + + "\102\0\2\u0145\1\0\4\u0145\3\0\1\u0145\1\0\2\u0145" + + "\1\0\1\u0145\6\0\2\u0145\43\0\1\116\5\0\1\u0146" + + "\1\126\2\0\2\u0146\1\132\5\0\1\132\53\0\2\14" + + "\7\0\7\14\3\0\10\14\1\u0147\16\14\27\0\2\14" + + "\7\0\7\14\3\0\14\14\1\u0148\12\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\u0149\16\14\27\0\2\14" + + "\7\0\7\14\3\0\5\14\1\u014a\21\14\27\0\2\14" + + "\7\0\7\14\3\0\20\14\1\u014b\6\14\27\0\2\14" + + "\7\0\7\14\3\0\12\14\1\u014c\14\14\27\0\2\14" + + "\7\0\7\14\3\0\21\14\1\u014d\5\14\27\0\2\14" + + "\7\0\7\14\3\0\15\14\1\u014e\11\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\u014f\16\14\27\0\2\14" + + "\7\0\7\14\3\0\10\14\1\u0150\4\14\1\u0151\11\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u0152\15\14" + + "\27\0\2\14\7\0\7\14\3\0\23\14\1\u0153\3\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0154\10\14" + + "\27\0\2\14\7\0\7\14\3\0\2\14\1\u0155\24\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0156\14\14" + + "\27\0\2\14\7\0\7\14\3\0\16\14\1\u0157\10\14" + + "\27\0\2\14\7\0\7\14\3\0\12\14\1\u0158\14\14" + + "\27\0\2\14\7\0\7\14\3\0\5\14\1\u0159\21\14" + + "\27\0\2\14\7\0\7\14\3\0\11\14\1\u015a\15\14" + + "\27\0\2\14\7\0\7\14\3\0\26\14\1\u015b\27\0" + + "\2\14\7\0\7\14\3\0\5\14\1\u015c\21\14\27\0" + + "\2\u013d\3\0\1\u0113\3\0\7\u013d\3\0\27\u013d\27\0" + + "\1\u0140\1\u013e\3\0\1\105\1\u0115\1\u0116\1\0\2\u013e" + + "\2\u0140\2\u013e\1\u0140\3\0\27\u0140\21\0\1\u013f\2\0" + + "\13\u013f\1\u015d\62\u013f\6\0\2\u0140\1\u0141\2\0\1\105" + + "\1\u0115\1\u0116\1\0\7\u0140\3\0\27\u0140\27\0\1\u015e" + + "\12\0\2\u015e\2\0\1\u015e\3\0\27\u015e\35\0\1\u0142" + + "\1\u0116\63\0\1\u011a\2\0\10\u011a\1\u015f\1\u0143\1\u011a" + + "\1\u0143\62\u011a\6\0\2\u0144\4\0\1\u011d\1\346\1\0" + + "\7\u0144\3\0\27\u0144\40\0\2\u0160\1\0\4\u0160\3\0" + + "\1\u0160\1\0\2\u0160\1\0\1\u0160\6\0\2\u0160\43\0" + + "\1\116\5\0\1\u0161\1\126\2\0\2\u0161\1\132\5\0" + + "\1\132\53\0\2\14\7\0\7\14\3\0\6\14\1\u0162" + + "\20\14\27\0\2\14\7\0\7\14\3\0\13\14\1\u0163" + + "\13\14\27\0\2\14\7\0\7\14\3\0\14\14\1\u0164" + + "\12\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0165" + + "\23\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0166" + + "\21\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0167" + + "\23\14\27\0\2\14\7\0\7\14\3\0\3\14\1\u0168" + + "\23\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0169" + + "\24\14\27\0\2\14\7\0\7\14\3\0\11\14\1\u016a" + + "\15\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u016b" + + "\21\14\27\0\2\14\7\0\7\14\3\0\22\14\1\u016c" + + "\4\14\27\0\2\14\7\0\7\14\3\0\7\14\1\u016d" + + "\17\14\27\0\2\14\7\0\7\14\3\0\11\14\1\u016e" + + "\15\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u016f" + + "\24\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0170" + + "\24\14\21\0\1\u013f\2\0\10\u013f\1\u0171\1\u015d\1\u013f" + + "\1\u015d\62\u013f\6\0\2\u015e\4\0\1\u0142\1\u0116\1\0" + + "\7\u015e\3\0\27\u015e\40\0\2\u0172\1\0\4\u0172\3\0" + + "\1\u0172\1\0\2\u0172\1\0\1\u0172\6\0\2\u0172\43\0" + + "\1\116\5\0\1\u0173\1\126\2\0\2\u0173\1\132\5\0" + + "\1\132\53\0\2\14\7\0\7\14\3\0\2\14\1\u0174" + + "\24\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0175" + + "\24\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0176" + + "\21\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u0177" + + "\24\14\27\0\2\14\7\0\7\14\3\0\16\14\1\u0178" + + "\10\14\27\0\2\14\7\0\7\14\3\0\5\14\1\u0179" + + "\21\14\27\0\2\14\7\0\7\14\3\0\10\14\1\u017a" + + "\16\14\27\0\2\14\7\0\7\14\3\0\10\14\1\u017b" + + "\16\14\27\0\2\14\7\0\7\14\3\0\2\14\1\u017c" + + "\24\14\40\0\2\u017d\1\0\4\u017d\3\0\1\u017d\1\0" + + "\2\u017d\1\0\1\u017d\6\0\2\u017d\43\0\1\116\5\0" + + "\1\u017e\1\126\2\0\2\u017e\1\132\5\0\1\132\53\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u017f\24\14\27\0" + + "\2\14\7\0\7\14\3\0\7\14\1\u0180\17\14\27\0" + + "\2\14\7\0\7\14\3\0\2\14\1\u0181\24\14\27\0" + + "\2\14\7\0\7\14\3\0\11\14\1\u0182\15\14\27\0" + + "\2\14\7\0\7\14\3\0\14\14\1\u0183\12\14\40\0" + + "\2\u0184\1\0\4\u0184\3\0\1\u0184\1\0\2\u0184\1\0" + + "\1\u0184\6\0\2\u0184\43\0\1\116\5\0\1\u0185\1\126" + + "\2\0\2\u0185\1\132\5\0\1\132\53\0\2\14\7\0" + + "\7\14\3\0\15\14\1\u0186\11\14\27\0\2\14\7\0" + + "\7\14\3\0\6\14\1\u0187\20\14\32\0\1\116\5\0" + + "\1\u0188\1\126\2\0\2\u0188\1\132\5\0\1\132\56\0" + + "\1\116\5\0\1\u0189\1\126\2\0\2\u0189\1\132\5\0" + + "\1\132\56\0\1\116\5\0\1\u018a\1\126\2\0\2\u018a" + + "\1\132\5\0\1\132\56\0\1\116\5\0\1\u018b\1\126" + + "\2\0\2\u018b\1\132\5\0\1\132\56\0\1\116\5\0" + + "\1\u018c\1\126\2\0\2\u018c\1\132\5\0\1\132\56\0" + + "\1\116\5\0\1\u018d\1\126\2\0\2\u018d\1\132\5\0" + + "\1\132\45\0"; - /** the input device */ - private java.io.Reader zzReader; + private static int[] zzUnpackTrans() { + int[] result = new int[18655]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } - /** the current state of the DFA */ - private int zzState; + 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; + } + /* 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 lexical state */ - private int zzLexicalState = YYINITIAL; + /* 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 = + "\5\0\1\11\1\1\1\11\11\1\1\11\3\1\1\11" + + "\21\1\10\11\1\1\2\11\5\1\1\11\2\1\2\11" + + "\3\1\1\11\2\1\1\11\1\1\1\11\2\1\1\0" + + "\3\11\2\0\1\1\1\0\1\1\1\11\1\1\2\11" + + "\2\1\1\0\2\1\1\0\2\11\50\1\13\11\2\1" + + "\7\11\6\0\1\1\1\11\2\0\1\11\3\0\1\11" + + "\1\0\1\11\1\1\1\11\4\1\1\0\52\1\1\11" + + "\7\0\1\11\5\0\1\11\50\1\1\0\1\11\12\0" + + "\37\1\10\0\30\1\2\0\45\1\1\11\11\1"; - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + private static int[] zzUnpackAttribute() { + int[] result = new int[397]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** 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; - - /* user code: */ + 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 input device + */ + private java.io.Reader zzReader; + /** + * the current state of the DFA + */ + private int zzState; + /** + * the current lexical state + */ + private int zzLexicalState = YYINITIAL; + /** + * 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; + /** + * 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; + /* user code: */ StringBuffer string = new StringBuffer(); - - private static String xmlTagName=""; + private static String xmlTagName = ""; public int yychar() { return yychar; } - - private Stack pushedBack=new Stack(); + private Stack pushedBack = new Stack(); public int yyline() { - return yyline+1; + return yyline + 1; } public void pushback(ParsedSymbol symb) { @@ -747,854 +750,973 @@ public final class ActionScriptLexer { last = null; } ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ - if(!pushedBack.isEmpty()){ - return last=pushedBack.pop(); + + public ParsedSymbol lex() throws java.io.IOException, ParseException { + if (!pushedBack.isEmpty()) { + return last = pushedBack.pop(); } - return last=yylex(); + return last = yylex(); } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader(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[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 2228) { - 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) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; + /** + * Creates a new scanner There is also a java.io.InputStream version of this + * constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; + /** + * Creates a new scanner. There is also java.io.Reader version of this + * constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptLexer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); } - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; + /** + * 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[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2228) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do { + map[j++] = value; + } while (--count > 0); + } + return map; } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { + + /** + * 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) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead - zzStartRead); + + /* translate stored positions */ + zzEndRead -= zzStartRead; + zzCurrentPos -= zzStartRead; + zzMarkedPos -= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos * 2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length - zzEndRead); + + if (numRead > 0) { + zzEndRead += numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } } - // numRead < 0 - return true; - } - - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - 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. - * - * @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; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - } - - - /** - * 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]; - } - - throw new Error(message); - } - - - /** - * 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); - - zzMarkedPos -= number; - } - - - /** - * 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, ParseException { - int zzInput; - int zzAction; - - // 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; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - 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 = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + if (zzReader != null) { + zzReader.close(); } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 27: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); - } - case 128: break; - case 58: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); - } - case 129: break; - case 60: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); - } - case 130: break; - case 102: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); - } - case 131: break; - case 106: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); - } - case 132: break; - case 20: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); - } - case 133: break; - case 42: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); - } - case 134: break; - case 11: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); - } - case 135: break; - case 97: - { string.append( yytext() ); - String endtagname=yytext(); - endtagname=endtagname.substring(2,endtagname.length()-1); - if(endtagname.equals(xmlTagName)){ - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML, string.toString()); - } - } - case 136: break; - case 51: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); - } - case 137: break; - case 83: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); - } - case 138: break; - case 5: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); - } - case 139: break; - case 126: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); - } - case 140: break; - case 52: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); - } - case 141: break; - case 122: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); - } - case 142: break; - case 117: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); - } - case 143: break; - case 22: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); - } - case 144: break; - case 96: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); - } - case 145: break; - case 84: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); - } - case 146: break; - case 3: - { /*ignore*/ - } - case 147: break; - case 120: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); - } - case 148: break; - case 92: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NULL,yytext()); - } - case 149: break; - case 72: - { string.append( '\t' ); - } - case 150: break; - case 66: - { char val = (char) Integer.parseInt(yytext().substring(1),8); - string.append( val ); - } - case 151: break; - case 127: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); - } - case 152: break; - case 49: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); - } - case 153: break; - case 18: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); - } - case 154: break; - case 64: - { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); - } - case 155: break; - case 59: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); - } - case 156: break; - case 10: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); - } - case 157: break; - case 34: - { yybegin(YYINITIAL); yyline++; - } - case 158: break; - case 103: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); - } - case 159: break; - case 95: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); - } - case 160: break; - case 75: - { string.setLength(0); - yybegin(XML); - String s=yytext(); - s=s.substring(1,s.length()-1); - if(s.contains(" ")){ - s=s.substring(0,s.indexOf(" ")); - } - xmlTagName = s; - string.append(yytext()); - } - case 161: break; - case 13: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); - } - case 162: break; - case 15: - { string.setLength(0); - yybegin(CHARLITERAL); - } - case 163: break; - case 54: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); - } - case 164: break; - case 53: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); - } - case 165: break; - case 80: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); - } - case 166: break; - case 29: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); - } - case 167: break; - case 21: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); - } - case 168: break; - case 100: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); - } - case 169: break; - case 71: - { string.append( '\n' ); - } - case 170: break; - case 76: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); - } - case 171: break; - case 43: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); - } - case 172: break; - case 56: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); - } - case 173: break; - case 41: - { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); - } - case 174: break; - case 86: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); - } - case 175: break; - case 35: - { yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); - } - case 176: break; - case 125: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); - } - case 177: break; - case 111: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); - } - case 178: break; - case 91: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); - } - case 179: break; - case 104: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); - } - case 180: break; - case 4: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); - } - case 181: break; - case 40: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); - } - case 182: break; - case 17: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); - } - case 183: break; - case 31: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); - } - case 184: break; - case 115: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); - } - case 185: break; - case 90: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); - } - case 186: break; - case 113: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); - } - case 187: break; - case 107: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); - } - case 188: break; - case 14: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); - } - case 189: break; - case 81: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); - } - case 190: break; - case 19: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); - } - case 191: break; - case 89: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); - } - case 192: break; - case 28: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); - } - case 193: break; - case 110: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); - } - case 194: break; - case 70: - { string.append( '\r' ); - } - case 195: break; - case 26: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); - } - case 196: break; - case 2: - { yyline++; - } - case 197: break; - case 85: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); - } - case 198: break; - case 69: - { string.append( '\b' ); - } - case 199: break; - case 82: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); - } - case 200: break; - case 46: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); - } - case 201: break; - case 62: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); - } - case 202: break; - case 99: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); - } - case 203: break; - case 65: - { string.append( '\"' ); - } - case 204: break; - case 8: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); - } - case 205: break; - case 30: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); - } - case 206: break; - case 9: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); - } - case 207: break; - case 78: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); - } - case 208: break; - case 50: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); - } - case 209: break; - case 68: - { string.append( '\'' ); - } - case 210: break; - case 67: - { string.append( '\\' ); - } - case 211: break; - case 124: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); - } - case 212: break; - case 112: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); - } - case 213: break; - case 105: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); - } - case 214: break; - case 38: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); - } - case 215: break; - case 118: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); - } - case 216: break; - case 109: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); - } - case 217: break; - case 63: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); - } - case 218: break; - case 108: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); - } - case 219: break; - case 77: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); - } - case 220: break; - case 121: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); - } - case 221: break; - case 37: - { yybegin(XML); string.append( yytext() ); - } - case 222: break; - case 114: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); - } - case 223: break; - case 32: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); - } - case 224: break; - case 16: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); - } - case 225: break; - case 44: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); - } - case 226: break; - case 101: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); - } - case 227: break; - case 73: - { string.append( '\f' ); - } - case 228: break; - case 88: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); - } - case 229: break; - case 39: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); - } - case 230: break; - case 79: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); - } - case 231: break; - case 93: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); - } - case 232: break; - case 23: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); - } - case 233: break; - case 74: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); - } - case 234: break; - case 61: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); - } - case 235: break; - case 47: - { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); - } - case 236: break; - case 33: - { string.append( yytext() ); - } - case 237: break; - case 12: - { string.setLength(0); - yybegin(STRING); - } - case 238: break; - case 98: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); - } - case 239: break; - case 57: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); - } - case 240: break; - case 7: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); - } - case 241: break; - case 123: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); - } - case 242: break; - case 119: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); - } - case 243: break; - case 6: - { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); - } - case 244: break; - case 116: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); - } - case 245: break; - case 87: - { String t=yytext(); return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,t.substring(2,t.length()-1)); - } - case 246: break; - case 24: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); - } - case 247: break; - case 25: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); - } - case 248: break; - case 45: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); - } - case 249: break; - case 48: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); - } - case 250: break; - case 55: - { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); - } - case 251: break; - case 36: - { string.append( yytext() ); yyline++; - } - case 252: break; - case 94: - { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); - } - case 253: break; - case 1: - { - } - case 254: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } } - } + + /** + * 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. + * + * @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; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + } + + /** + * 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]; + } + + throw new Error(message); + } + + /** + * 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); + } + + zzMarkedPos -= number; + } + + /** + * 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, ParseException { + int zzInput; + int zzAction; + + // 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; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar += zzMarkedPosL - zzStartRead; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + zzForAction: + { + while (true) { + + if (zzCurrentPosL < zzEndReadL) { + zzInput = zzBufferL[zzCurrentPosL++]; + } 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 = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; + if (zzNext == -1) { + break zzForAction; + } + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ((zzAttributes & 1) == 1) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ((zzAttributes & 8) == 8) { + break zzForAction; + } + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 27: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); + } + case 128: + break; + case 58: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); + } + case 129: + break; + case 60: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); + } + case 130: + break; + case 102: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); + } + case 131: + break; + case 106: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); + } + case 132: + break; + case 20: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); + } + case 133: + break; + case 42: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); + } + case 134: + break; + case 11: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); + } + case 135: + break; + case 97: { + string.append(yytext()); + String endtagname = yytext(); + endtagname = endtagname.substring(2, endtagname.length() - 1); + if (endtagname.equals(xmlTagName)) { + yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML, string.toString()); + } + } + case 136: + break; + case 51: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); + } + case 137: + break; + case 83: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); + } + case 138: + break; + case 5: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); + } + case 139: + break; + case 126: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); + } + case 140: + break; + case 52: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); + } + case 141: + break; + case 122: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); + } + case 142: + break; + case 117: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); + } + case 143: + break; + case 22: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); + } + case 144: + break; + case 96: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); + } + case 145: + break; + case 84: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); + } + case 146: + break; + case 3: { /*ignore*/ + + } + case 147: + break; + case 120: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); + } + case 148: + break; + case 92: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NULL, yytext()); + } + case 149: + break; + case 72: { + string.append('\t'); + } + case 150: + break; + case 66: { + char val = (char) Integer.parseInt(yytext().substring(1), 8); + string.append(val); + } + case 151: + break; + case 127: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); + } + case 152: + break; + case 49: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); + } + case 153: + break; + case 18: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); + } + case 154: + break; + case 64: { + throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 155: + break; + case 59: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); + } + case 156: + break; + case 10: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); + } + case 157: + break; + case 34: { + yybegin(YYINITIAL); + yyline++; + } + case 158: + break; + case 103: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); + } + case 159: + break; + case 95: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); + } + case 160: + break; + case 75: { + string.setLength(0); + yybegin(XML); + String s = yytext(); + s = s.substring(1, s.length() - 1); + if (s.contains(" ")) { + s = s.substring(0, s.indexOf(" ")); + } + xmlTagName = s; + string.append(yytext()); + } + case 161: + break; + case 13: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong((yytext())))); + } + case 162: + break; + case 15: { + string.setLength(0); + yybegin(CHARLITERAL); + } + case 163: + break; + case 54: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); + } + case 164: + break; + case 53: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); + } + case 165: + break; + case 80: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); + } + case 166: + break; + case 29: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); + } + case 167: + break; + case 21: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); + } + case 168: + break; + case 100: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); + } + case 169: + break; + case 71: { + string.append('\n'); + } + case 170: + break; + case 76: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); + } + case 171: + break; + case 43: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); + } + case 172: + break; + case 56: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); + } + case 173: + break; + case 41: { + return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new Double(Double.parseDouble((yytext())))); + } + case 174: + break; + case 86: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); + } + case 175: + break; + case 35: { + yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); + } + case 176: + break; + case 125: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); + } + case 177: + break; + case 111: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); + } + case 178: + break; + case 91: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); + } + case 179: + break; + case 104: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); + } + case 180: + break; + case 4: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); + } + case 181: + break; + case 40: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); + } + case 182: + break; + case 17: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); + } + case 183: + break; + case 31: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); + } + case 184: + break; + case 115: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); + } + case 185: + break; + case 90: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); + } + case 186: + break; + case 113: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); + } + case 187: + break; + case 107: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); + } + case 188: + break; + case 14: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); + } + case 189: + break; + case 81: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); + } + case 190: + break; + case 19: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); + } + case 191: + break; + case 89: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); + } + case 192: + break; + case 28: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); + } + case 193: + break; + case 110: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); + } + case 194: + break; + case 70: { + string.append('\r'); + } + case 195: + break; + case 26: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); + } + case 196: + break; + case 2: { + yyline++; + } + case 197: + break; + case 85: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); + } + case 198: + break; + case 69: { + string.append('\b'); + } + case 199: + break; + case 82: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); + } + case 200: + break; + case 46: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); + } + case 201: + break; + case 62: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); + } + case 202: + break; + case 99: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); + } + case 203: + break; + case 65: { + string.append('\"'); + } + case 204: + break; + case 8: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); + } + case 205: + break; + case 30: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); + } + case 206: + break; + case 9: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); + } + case 207: + break; + case 78: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); + } + case 208: + break; + case 50: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); + } + case 209: + break; + case 68: { + string.append('\''); + } + case 210: + break; + case 67: { + string.append('\\'); + } + case 211: + break; + case 124: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); + } + case 212: + break; + case 112: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); + } + case 213: + break; + case 105: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); + } + case 214: + break; + case 38: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); + } + case 215: + break; + case 118: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); + } + case 216: + break; + case 109: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); + } + case 217: + break; + case 63: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); + } + case 218: + break; + case 108: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); + } + case 219: + break; + case 77: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); + } + case 220: + break; + case 121: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); + } + case 221: + break; + case 37: { + yybegin(XML); + string.append(yytext()); + } + case 222: + break; + case 114: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); + } + case 223: + break; + case 32: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); + } + case 224: + break; + case 16: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); + } + case 225: + break; + case 44: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); + } + case 226: + break; + case 101: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); + } + case 227: + break; + case 73: { + string.append('\f'); + } + case 228: + break; + case 88: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); + } + case 229: + break; + case 39: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); + } + case 230: + break; + case 79: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext().substring(2), 16))); + } + case 231: + break; + case 93: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); + } + case 232: + break; + case 23: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); + } + case 233: + break; + case 74: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); + } + case 234: + break; + case 61: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); + } + case 235: + break; + case 47: { + return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, new Long(Long.parseLong(yytext(), 8))); + } + case 236: + break; + case 33: { + string.append(yytext()); + } + case 237: + break; + case 12: { + string.setLength(0); + yybegin(STRING); + } + case 238: + break; + case 98: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); + } + case 239: + break; + case 57: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); + } + case 240: + break; + case 7: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); + } + case 241: + break; + case 123: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); + } + case 242: + break; + case 119: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); + } + case 243: + break; + case 6: { + return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); + } + case 244: + break; + case 116: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); + } + case 245: + break; + case 87: { + String t = yytext(); + return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, t.substring(2, t.length() - 1)); + } + case 246: + break; + case 24: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); + } + case 247: + break; + case 25: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); + } + case 248: + break; + case 45: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); + } + case 249: + break; + case 48: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); + } + case 250: + break; + case 55: { + return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); + } + case 251: + break; + case 36: { + string.append(yytext()); + yyline++; + } + case 252: + break; + case 94: { + return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); + } + case 253: + break; + case 1: { + } + case 254: + break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return null; + } + } else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java index 41b280a5e..5c8a9cde6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ActionScriptParser.java @@ -36,7 +36,6 @@ import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.DO; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.INCREMENT; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.PARENT_OPEN; import static com.jpexs.decompiler.flash.action.parser.script.SymbolType.SWITCH; -import com.jpexs.decompiler.flash.action.swf3.ActionPlay; import com.jpexs.decompiler.flash.action.swf4.*; import com.jpexs.decompiler.flash.action.swf5.*; import com.jpexs.decompiler.flash.action.swf6.ActionGreater; @@ -48,7 +47,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; -import java.util.AbstractList; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; @@ -333,20 +331,20 @@ public class ActionScriptParser { } } - - if(!isInterface){ - ifbody.add(new ActionPush((Long)1L)); + + if (!isInterface) { + ifbody.add(new ActionPush((Long) 1L)); ifbody.add(new ActionPush(new Null())); ifbody.addAll(typeToActions(globalClassTypeStr, false)); ifbody.add(new ActionPush("prototype")); ifbody.add(new ActionGetMember()); - ifbody.add(new ActionPush((Long)3L)); + ifbody.add(new ActionPush((Long) 3L)); ifbody.add(new ActionPush("ASSetPropFlags")); ifbody.add(new ActionCallFunction()); } - - if(constr.isEmpty()){ - constr.add(new ActionDefineFunction(null,new ArrayList(),0,SWF.DEFAULT_VERSION)); + + if (constr.isEmpty()) { + constr.add(new ActionDefineFunction(null, new ArrayList(), 0, SWF.DEFAULT_VERSION)); constr.add(new ActionStoreRegister(1)); constr.addAll(typeToActions(globalClassTypeStr, true)); } @@ -370,7 +368,7 @@ public class ActionScriptParser { constr.add(new ActionImplementsOp()); } ifbody.addAll(0, constr); - + ret.addAll(typeToActions(globalClassTypeStr, false)); ret.add(new ActionNot()); ret.add(new ActionNot()); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ParsedSymbol.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ParsedSymbol.java index f788650a6..014999386 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ParsedSymbol.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/ParsedSymbol.java @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - package com.jpexs.decompiler.flash.action.parser.script; /** @@ -22,16 +21,18 @@ package com.jpexs.decompiler.flash.action.parser.script; * @author JPEXS */ public class ParsedSymbol { + public SymbolGroup group; public Object value; public SymbolType type; - public ParsedSymbol(SymbolGroup group,SymbolType type){ + public ParsedSymbol(SymbolGroup group, SymbolType type) { this.group = group; this.type = type; this.value = null; } - public ParsedSymbol(SymbolGroup group,SymbolType type, Object value) { + + public ParsedSymbol(SymbolGroup group, SymbolType type, Object value) { this.group = group; this.type = type; this.value = value; @@ -39,16 +40,15 @@ public class ParsedSymbol { @Override public String toString() { - return group.toString()+" "+type.toString()+" "+(value!=null?value.toString():""); + return group.toString() + " " + type.toString() + " " + (value != null ? value.toString() : ""); } - public boolean isType(SymbolType... types){ - for(SymbolType t:types){ - if(type==t){ + + public boolean isType(SymbolType... types) { + for (SymbolType t : types) { + if (type == t) { return true; } } return false; } - - } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java index 713d7b61a..365a237f9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolGroup.java @@ -21,6 +21,7 @@ package com.jpexs.decompiler.flash.action.parser.script; * @author JPEXS */ public enum SymbolGroup { + OPERATOR, KEYWORD, STRING, diff --git a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java index ba398dbe0..49de21171 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/parser/script/SymbolType.java @@ -22,6 +22,7 @@ package com.jpexs.decompiler.flash.action.parser.script; */ public enum SymbolType { //Keywords + BREAK, CASE, CONTINUE, @@ -130,5 +131,4 @@ public enum SymbolType { INTEGER, DOUBLE, TYPENAME - } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java index 256dbb416..a8e2dc2bb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPop.java @@ -20,6 +20,8 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.treemodel.CallFunctionTreeItem; import com.jpexs.decompiler.flash.action.treemodel.CallMethodTreeItem; import com.jpexs.decompiler.flash.action.treemodel.NewMethodTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PopTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.SetTypeTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.util.HashMap; import java.util.List; @@ -44,6 +46,10 @@ public class ActionPop extends Action { GraphTargetItem val = stack.pop(); if ((val instanceof CallFunctionTreeItem) || (val instanceof CallMethodTreeItem) || (val instanceof NewMethodTreeItem)) { output.add(val); + } else if (val instanceof SetTypeTreeItem) { + output.add(val); + } else { + output.add(new PopTreeItem(this)); } /*if (!(val instanceof DirectValueTreeItem)) { output.add(new VoidTreeItem(this, val)); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index 3b7f1a55a..550fed0c2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -22,9 +22,13 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.parser.ParseException; import com.jpexs.decompiler.flash.action.parser.pcode.ASMParsedSymbol; import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer; +import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.DirectValueTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.SetTypeTreeItem; import com.jpexs.decompiler.flash.action.treemodel.StoreRegisterTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.operations.PreDecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.operations.PreIncrementTreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Helper; @@ -208,6 +212,36 @@ public class ActionPush extends Action { return ts; } + public String toStringNoQ(int i) { + String ret = ""; + if (values.get(i) instanceof ConstantIndex) { + ((ConstantIndex) values.get(i)).constantPool = constantPool; + ret += ((ConstantIndex) values.get(i)).toStringNoQ(); + } else if (values.get(i) instanceof String) { + ret += (String) values.get(i); + } else if (values.get(i) instanceof RegisterNumber) { + ret += ((RegisterNumber) values.get(i)).toStringNoName(); + } else { + ret += values.get(i).toString(); + } + return ret; + } + + public String toString(int i) { + String ret = ""; + if (values.get(i) instanceof ConstantIndex) { + ((ConstantIndex) values.get(i)).constantPool = constantPool; + ret += ((ConstantIndex) values.get(i)).toString(); + } else if (values.get(i) instanceof String) { + ret += "\"" + Helper.escapeString((String) values.get(i)) + "\""; + } else if (values.get(i) instanceof RegisterNumber) { + ret += ((RegisterNumber) values.get(i)).toStringNoName(); + } else { + ret += values.get(i).toString(); + } + return ret; + } + @Override public String toString() { String ret = "Push "; @@ -220,16 +254,7 @@ public class ActionPush extends Action { ret += " "; } pos++; - if (values.get(i) instanceof ConstantIndex) { - ((ConstantIndex) values.get(i)).constantPool = constantPool; - ret += ((ConstantIndex) values.get(i)).toString(); - } else if (values.get(i) instanceof String) { - ret += "\"" + Helper.escapeString((String) values.get(i)) + "\""; - } else if (values.get(i) instanceof RegisterNumber) { - ret += ((RegisterNumber) values.get(i)).toStringNoName(); - } else { - ret += values.get(i).toString(); - } + ret += toString(i); } return ret; } @@ -251,21 +276,30 @@ public class ActionPush extends Action { } if (o instanceof RegisterNumber) { if (regNames.containsKey(((RegisterNumber) o).number)) { - ((RegisterNumber) o).name = regNames.get(((RegisterNumber) o).number); - }else if(output.size()>=2){ //chained assignments: - GraphTargetItem last=output.get(output.size()-1); - GraphTargetItem prev=output.get(output.size()-2); - if(last instanceof SetTypeTreeItem ){ - if(prev instanceof StoreRegisterTreeItem){ - StoreRegisterTreeItem str=(StoreRegisterTreeItem)prev; - if(str.register.number==((RegisterNumber) o).number){ - stack.push(output.remove(output.size()-1)); - output.remove(output.size()-1); + ((RegisterNumber) o).name = regNames.get(((RegisterNumber) o).number); + } else if (output.size() >= 2) { //chained assignments:, ignore for class prototype assignment + GraphTargetItem last = output.get(output.size() - 1); + GraphTargetItem prev = output.get(output.size() - 2); + if (last instanceof SetTypeTreeItem) { + if (prev instanceof StoreRegisterTreeItem) { + StoreRegisterTreeItem str = (StoreRegisterTreeItem) prev; + if (str.register.number == ((RegisterNumber) o).number) { + SetTypeTreeItem stt = (SetTypeTreeItem) last; + stt.setTempRegister(((RegisterNumber) o).number); + if ((stt.getValue() instanceof IncrementTreeItem) && (((IncrementTreeItem) stt.getValue()).object.equals(stt.getObject()))) { + stack.push(new PreIncrementTreeItem(this, stt.getObject())); + } else if ((stt.getValue() instanceof DecrementTreeItem) && (((DecrementTreeItem) stt.getValue()).object.equals(stt.getObject()))) { + stack.push(new PreDecrementTreeItem(this, stt.getObject())); + } else { + stack.push(last); + } + output.remove(output.size() - 1); + output.remove(output.size() - 1); pos++; continue; } } - } + } } } DirectValueTreeItem dvt = new DirectValueTreeItem(this, pos, o, constantPool); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java index d7877b9b7..da2abf482 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java @@ -17,7 +17,11 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.DirectValueTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostDecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostIncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.SetPropertyTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.util.HashMap; @@ -46,6 +50,26 @@ public class ActionSetProperty extends Action { indexInt = (int) (long) (Long) ((DirectValueTreeItem) index).value; } } + if (value instanceof IncrementTreeItem) { + GraphTargetItem obj = ((IncrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostIncrementTreeItem(this, obj)); + return; + } + } + } + if (value instanceof DecrementTreeItem) { + GraphTargetItem obj = ((DecrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostDecrementTreeItem(this, obj)); + return; + } + } + } output.add(new SetPropertyTreeItem(this, target, indexInt, value)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index ad4ec879c..4182ffff9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -18,6 +18,10 @@ package com.jpexs.decompiler.flash.action.swf4; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.treemodel.ConstantPool; +import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostDecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostIncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.SetVariableTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.helpers.Highlighting; @@ -40,8 +44,28 @@ public class ActionSetVariable extends Action { public void translate(Stack stack, List output, java.util.HashMap regNames, HashMap variables, HashMap functions) { GraphTargetItem value = stack.pop(); GraphTargetItem name = stack.pop(); - SetVariableTreeItem svt = new SetVariableTreeItem(this, name, value); variables.put(Highlighting.stripHilights(name.toStringNoQuotes((ConstantPool) null)), value); + if (value instanceof IncrementTreeItem) { + GraphTargetItem obj = ((IncrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostIncrementTreeItem(this, obj)); + return; + } + } + } + if (value instanceof DecrementTreeItem) { + GraphTargetItem obj = ((DecrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostDecrementTreeItem(this, obj)); + return; + } + } + } + SetVariableTreeItem svt = new SetVariableTreeItem(this, name, value); output.add(svt); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ConstantIndex.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ConstantIndex.java index 94563eed2..6837af76b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ConstantIndex.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ConstantIndex.java @@ -36,6 +36,17 @@ public class ConstantIndex { this.constantPool = constantPool; } + public String toStringNoQ() { + if (Main.RESOLVE_CONSTANTS) { + if (constantPool != null) { + if (index < constantPool.size()) { + return constantPool.get(index); + } + } + } + return "constant" + index; + } + @Override public String toString() { if (Main.RESOLVE_CONSTANTS) { diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java index 9a2392bab..6ab6b9973 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionDefineFunction.java @@ -52,10 +52,8 @@ public class ActionDefineFunction extends Action implements GraphSourceItemConta this.functionName = functionName; this.codeSize = codeSize; this.version = version; - this.paramNames=paramNames; + this.paramNames = paramNames; } - - public ActionDefineFunction(int actionLength, SWFInputStream sis, ReReadableInputStream rri, int version) throws IOException { super(0x9B, actionLength); @@ -165,7 +163,7 @@ public class ActionDefineFunction extends Action implements GraphSourceItemConta paramStr += " "; } - return "DefineFunction \"" + Helper.escapeString(functionName) + "\" " + paramNames.size() + " " + paramStr + " {"+(codeSize==0?"\r\n}":"");// + "\r\n" +Action.actionsToString(getAddress() + getHeaderLength(),getItems(container) , knownAddreses, constantPool, version, hex, getFileAddress() + hdrSize) + "}"; + return "DefineFunction \"" + Helper.escapeString(functionName) + "\" " + paramNames.size() + " " + paramStr + " {" + (codeSize == 0 ? "\r\n}" : "");// + "\r\n" +Action.actionsToString(getAddress() + getHeaderLength(),getItems(container) , knownAddreses, constantPool, version, hex, getFileAddress() + hdrSize) + "}"; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index b22b320b9..4d0006fcd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -17,6 +17,10 @@ package com.jpexs.decompiler.flash.action.swf5; import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.treemodel.DecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.IncrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostDecrementTreeItem; +import com.jpexs.decompiler.flash.action.treemodel.PostIncrementTreeItem; import com.jpexs.decompiler.flash.action.treemodel.SetMemberTreeItem; import com.jpexs.decompiler.flash.graph.GraphTargetItem; import java.util.HashMap; @@ -39,6 +43,26 @@ public class ActionSetMember extends Action { GraphTargetItem value = stack.pop(); GraphTargetItem objectName = stack.pop(); GraphTargetItem object = stack.pop(); + if (value instanceof IncrementTreeItem) { + GraphTargetItem obj = ((IncrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostIncrementTreeItem(this, obj)); + return; + } + } + } + if (value instanceof DecrementTreeItem) { + GraphTargetItem obj = ((DecrementTreeItem) value).object; + if (!stack.isEmpty()) { + if (stack.peek().equals(obj)) { + stack.pop(); + stack.push(new PostDecrementTreeItem(this, obj)); + return; + } + } + } output.add(new SetMemberTreeItem(this, object, objectName, value)); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java index c2f4e4138..6a55408b1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf7/ActionDefineFunction2.java @@ -267,7 +267,7 @@ public class ActionDefineFunction2 extends Action implements GraphSourceItemCont + " " + preloadArgumentsFlag + " " + suppressThisFlag + " " + preloadThisFlag - + " " + preloadGlobalFlag).trim() + " " + paramStr + " {"+(codeSize==0?"\r\n}":"");// + "\r\n" + Action.actionsToString(getAddress() + getHeaderLength(), getItems(container), knownAddreses, constantPool, version, hex, getFileAddress() + hdrSize) + "}"; + + " " + preloadGlobalFlag).trim() + " " + paramStr + " {" + (codeSize == 0 ? "\r\n}" : "");// + "\r\n" + Action.actionsToString(getAddress() + getHeaderLength(), getItems(container), knownAddreses, constantPool, version, hex, getFileAddress() + hdrSize) + "}"; } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/CallFunctionTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/CallFunctionTreeItem.java index 6c7dd0c8b..308c7dc4e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/CallFunctionTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/CallFunctionTreeItem.java @@ -77,4 +77,30 @@ public class CallFunctionTreeItem extends TreeItem { } return calculatedFunction.toNumber(); } + + @Override + public int hashCode() { + int hash = 3; + hash = 37 * hash + (this.functionName != null ? this.functionName.hashCode() : 0); + hash = 37 * hash + (this.arguments != null ? this.arguments.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final CallFunctionTreeItem other = (CallFunctionTreeItem) obj; + if (this.functionName != other.functionName && (this.functionName == null || !this.functionName.equals(other.functionName))) { + return false; + } + if (this.arguments != other.arguments && (this.arguments == null || !this.arguments.equals(other.arguments))) { + return false; + } + return true; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DefineLocalTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DefineLocalTreeItem.java index 3b6bb0959..b375cb43b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DefineLocalTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DefineLocalTreeItem.java @@ -24,6 +24,27 @@ public class DefineLocalTreeItem extends TreeItem implements SetTypeTreeItem { public GraphTargetItem name; public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } public DefineLocalTreeItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { super(instruction, PRECEDENCE_PRIMARY); diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DirectValueTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DirectValueTreeItem.java index 9c9a1fcd3..f2f41d3eb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DirectValueTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/DirectValueTreeItem.java @@ -190,4 +190,26 @@ public class DirectValueTreeItem extends TreeItem { return (value instanceof Double) || (value instanceof Float) || (value instanceof Boolean) || (value instanceof Long) || (value instanceof Null) || (computedRegValue != null && computedRegValue.isCompileTime()) //||(value instanceof String) || (value instanceof ConstantIndex) ; } + + @Override + public int hashCode() { + int hash = 7; + hash = 97 * hash + (this.value != null ? this.value.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final DirectValueTreeItem other = (DirectValueTreeItem) obj; + if (this.value != other.value && (this.value == null || !this.value.equals(other.value))) { + return false; + } + return true; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetMemberTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetMemberTreeItem.java index ac9f7b273..009745dd7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetMemberTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetMemberTreeItem.java @@ -47,4 +47,30 @@ public class GetMemberTreeItem extends TreeItem { ret.addAll(memberName.getNeededSources()); return ret; } + + @Override + public int hashCode() { + int hash = 5; + hash = 47 * hash + (this.object != null ? this.object.hashCode() : 0); + hash = 47 * hash + (this.memberName != null ? this.memberName.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final GetMemberTreeItem other = (GetMemberTreeItem) obj; + if (this.object != other.object && (this.object == null || !this.object.equals(other.object))) { + return false; + } + if (this.memberName != other.memberName && (this.memberName == null || !this.memberName.equals(other.memberName))) { + return false; + } + return true; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetVariableTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetVariableTreeItem.java index 8dd0f52f5..505dc85e1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetVariableTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/GetVariableTreeItem.java @@ -88,4 +88,26 @@ public class GetVariableTreeItem extends TreeItem { computedVariableComputed = computedValue.isVariableComputed(); } } + + @Override + public int hashCode() { + int hash = 3; + hash = 13 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final GetVariableTreeItem other = (GetVariableTreeItem) obj; + if (this.name != other.name && (this.name == null || !this.name.equals(other.name))) { + return false; + } + return true; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PopTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PopTreeItem.java new file mode 100644 index 000000000..330af5ad0 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PopTreeItem.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.treemodel; + +import com.jpexs.decompiler.flash.graph.GraphSourceItem; + +/** + * + * @author JPEXS + */ +public class PopTreeItem extends TreeItem { + + public PopTreeItem(GraphSourceItem instruction) { + super(instruction, NOPRECEDENCE); + } + + @Override + public String toString(ConstantPool constants) { + return ""; + } + + @Override + public boolean needsSemicolon() { + return false; + } +} diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostDecrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostDecrementTreeItem.java new file mode 100644 index 000000000..71b110b64 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostDecrementTreeItem.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2010-2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.treemodel; + +import com.jpexs.decompiler.flash.graph.GraphSourceItem; +import com.jpexs.decompiler.flash.graph.GraphTargetItem; + +public class PostDecrementTreeItem extends TreeItem { + + public GraphTargetItem object; + + public PostDecrementTreeItem(GraphSourceItem instruction, GraphTargetItem object) { + super(instruction, PRECEDENCE_POSTFIX); + this.object = object; + } + + @Override + public String toString(ConstantPool constants) { + return object.toString(constants) + hilight("--"); + } + + @Override + public boolean hasSideEffect() { + return true; + } +} diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostIncrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostIncrementTreeItem.java new file mode 100644 index 000000000..ea59fed1a --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/PostIncrementTreeItem.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2010-2013 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.action.treemodel; + +import com.jpexs.decompiler.flash.graph.GraphSourceItem; +import com.jpexs.decompiler.flash.graph.GraphTargetItem; + +public class PostIncrementTreeItem extends TreeItem { + + public GraphTargetItem object; + + public PostIncrementTreeItem(GraphSourceItem instruction, GraphTargetItem object) { + super(instruction, PRECEDENCE_POSTFIX); + this.object = object; + } + + @Override + public String toString(ConstantPool constants) { + return object.toString(constants) + hilight("++"); + } + + @Override + public boolean hasSideEffect() { + return true; + } +} diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java index 8f03f0dc7..17df7f2cc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetMemberTreeItem.java @@ -26,6 +26,27 @@ public class SetMemberTreeItem extends TreeItem implements SetTypeTreeItem { public GraphTargetItem object; public GraphTargetItem objectName; public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } public SetMemberTreeItem(GraphSourceItem instruction, GraphTargetItem object, GraphTargetItem objectName, GraphTargetItem value) { super(instruction, PRECEDENCE_ASSIGMENT); @@ -56,7 +77,7 @@ public class SetMemberTreeItem extends TreeItem implements SetTypeTreeItem { ret.addAll(value.getNeededSources()); return ret; } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetPropertyTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetPropertyTreeItem.java index ef7e4420a..e8eb0dbf7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetPropertyTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetPropertyTreeItem.java @@ -28,6 +28,27 @@ public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem { public int propertyIndex; public GraphTargetItem value; + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + private int tempRegister = -1; + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } + public SetPropertyTreeItem(GraphSourceItem instruction, GraphTargetItem target, int propertyIndex, GraphTargetItem value) { super(instruction, PRECEDENCE_ASSIGMENT); this.target = target; @@ -55,7 +76,7 @@ public class SetPropertyTreeItem extends TreeItem implements SetTypeTreeItem { ret.addAll(value.getNeededSources()); return ret; } - + @Override public boolean hasSideEffect() { return true; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetTypeTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetTypeTreeItem.java index 89d39451c..ac7cbcff3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetTypeTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetTypeTreeItem.java @@ -25,4 +25,12 @@ import com.jpexs.decompiler.flash.graph.GraphTargetItem; public interface SetTypeTreeItem { public GraphTargetItem getObject(); + + public GraphTargetItem getValue(); + + public void setTempRegister(int regIndex); + + public int getTempRegister(); + + public void setValue(GraphTargetItem value); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetVariableTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetVariableTreeItem.java index cd6327848..c3d0dbbea 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetVariableTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/SetVariableTreeItem.java @@ -25,6 +25,27 @@ public class SetVariableTreeItem extends TreeItem implements SetTypeTreeItem { public GraphTargetItem name; public GraphTargetItem value; + private int tempRegister = -1; + + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } public SetVariableTreeItem(GraphSourceItem instruction, GraphTargetItem name, GraphTargetItem value) { super(instruction, PRECEDENCE_ASSIGMENT); @@ -39,7 +60,7 @@ public class SetVariableTreeItem extends TreeItem implements SetTypeTreeItem { @Override public GraphTargetItem getObject() { - return new GetVariableTreeItem(src, value); + return new GetVariableTreeItem(src, name); } @Override @@ -59,6 +80,4 @@ public class SetVariableTreeItem extends TreeItem implements SetTypeTreeItem { public boolean hasSideEffect() { return true; } - - } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/StoreRegisterTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/StoreRegisterTreeItem.java index aef779f38..38a2cb125 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/StoreRegisterTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/StoreRegisterTreeItem.java @@ -26,6 +26,27 @@ public class StoreRegisterTreeItem extends TreeItem implements SetTypeTreeItem { public RegisterNumber register; public GraphTargetItem value; + @Override + public void setValue(GraphTargetItem value) { + this.value = value; + } + private int tempRegister = -1; + + @Override + public int getTempRegister() { + return tempRegister; + } + + @Override + public void setTempRegister(int tempRegister) { + this.tempRegister = tempRegister; + } + + @Override + public GraphTargetItem getValue() { + return value; + } + public StoreRegisterTreeItem(GraphSourceItem instruction, RegisterNumber register, GraphTargetItem value) { super(instruction, PRECEDENCE_PRIMARY); this.value = value; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreDecrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreDecrementTreeItem.java index bc7cf95ed..1ff7c4fac 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreDecrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreDecrementTreeItem.java @@ -16,13 +16,13 @@ */ package com.jpexs.decompiler.flash.action.treemodel.operations; -import com.jpexs.decompiler.flash.action.treemodel.TreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; +import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.graph.UnaryOpItem; public class PreDecrementTreeItem extends UnaryOpItem { - public PreDecrementTreeItem(GraphSourceItem instruction, TreeItem object) { + public PreDecrementTreeItem(GraphSourceItem instruction, GraphTargetItem object) { super(instruction, PRECEDENCE_UNARY, object, "--"); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreIncrementTreeItem.java b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreIncrementTreeItem.java index c59dcf2d4..7a0ca835c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreIncrementTreeItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/treemodel/operations/PreIncrementTreeItem.java @@ -16,13 +16,13 @@ */ package com.jpexs.decompiler.flash.action.treemodel.operations; -import com.jpexs.decompiler.flash.action.treemodel.TreeItem; import com.jpexs.decompiler.flash.graph.GraphSourceItem; +import com.jpexs.decompiler.flash.graph.GraphTargetItem; import com.jpexs.decompiler.flash.graph.UnaryOpItem; public class PreIncrementTreeItem extends UnaryOpItem { - public PreIncrementTreeItem(GraphSourceItem instruction, TreeItem object) { + public PreIncrementTreeItem(GraphSourceItem instruction, GraphTargetItem object) { super(instruction, PRECEDENCE_UNARY, object, "++"); } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/BinaryOpItem.java b/trunk/src/com/jpexs/decompiler/flash/graph/BinaryOpItem.java index a5b97ae41..cf0d6c8ff 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/BinaryOpItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/BinaryOpItem.java @@ -65,9 +65,39 @@ public abstract class BinaryOpItem extends GraphTargetItem { public boolean isVariableComputed() { return leftSide.isVariableComputed() || rightSide.isVariableComputed(); } - + @Override public boolean hasSideEffect() { - return leftSide.hasSideEffect()||rightSide.hasSideEffect(); + return leftSide.hasSideEffect() || rightSide.hasSideEffect(); + } + + @Override + public int hashCode() { + int hash = 7; + hash = 71 * hash + (this.leftSide != null ? this.leftSide.hashCode() : 0); + hash = 71 * hash + (this.rightSide != null ? this.rightSide.hashCode() : 0); + hash = 71 * hash + (this.operator != null ? this.operator.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final BinaryOpItem other = (BinaryOpItem) obj; + if (this.leftSide != other.leftSide && (this.leftSide == null || !this.leftSide.equals(other.leftSide))) { + return false; + } + if (this.rightSide != other.rightSide && (this.rightSide == null || !this.rightSide.equals(other.rightSide))) { + return false; + } + if ((this.operator == null) ? (other.operator != null) : !this.operator.equals(other.operator)) { + return false; + } + return true; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/GraphTargetItem.java b/trunk/src/com/jpexs/decompiler/flash/graph/GraphTargetItem.java index de8354b8a..def8dbc8f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/GraphTargetItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/GraphTargetItem.java @@ -89,9 +89,8 @@ public abstract class GraphTargetItem { public boolean isCompileTime() { return false; } - - public boolean hasSideEffect() - { + + public boolean hasSideEffect() { return false; } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/UnaryOpItem.java b/trunk/src/com/jpexs/decompiler/flash/graph/UnaryOpItem.java index 68576076d..0f032fea8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/UnaryOpItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/UnaryOpItem.java @@ -56,7 +56,7 @@ public abstract class UnaryOpItem extends GraphTargetItem { ret.addAll(value.getNeededSources()); return ret; } - + @Override public boolean hasSideEffect() { return value.hasSideEffect(); diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index 34fffa586..14a2a1c5b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -30,6 +30,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitClass; import com.jpexs.decompiler.flash.action.gui.ActionPanel; import com.jpexs.decompiler.flash.gui.player.FlashPlayerPanel; import com.jpexs.decompiler.flash.helpers.Helper; +import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG2Tag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG4Tag; @@ -54,7 +55,6 @@ import com.jpexs.decompiler.flash.tags.DefineSpriteTag; import com.jpexs.decompiler.flash.tags.DefineText2Tag; import com.jpexs.decompiler.flash.tags.DefineTextTag; import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.flash.tags.EndTag; import com.jpexs.decompiler.flash.tags.ExportAssetsTag; import com.jpexs.decompiler.flash.tags.JPEGTablesTag; diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/ABCContainerTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/ABCContainerTag.java index 978e976f0..7b1255657 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/ABCContainerTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/ABCContainerTag.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.ABC; * * @author JPEXS */ -public interface ABCContainerTag extends Comparable{ +public interface ABCContainerTag extends Comparable { + public ABC getABC(); } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java index 55c68cd76..90d6a41ec 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DoABCDefineTag.java @@ -28,11 +28,10 @@ import java.io.*; */ public class DoABCDefineTag extends Tag implements ABCContainerTag { + @Override public ABC getABC() { return abc; } - - /** * ActionScript 3 bytecodes */ @@ -97,8 +96,8 @@ public class DoABCDefineTag extends Tag implements ABCContainerTag { @Override public int compareTo(ABCContainerTag o) { - if(o instanceof DoABCDefineTag){ - DoABCDefineTag n=(DoABCDefineTag)o; + if (o instanceof DoABCDefineTag) { + DoABCDefineTag n = (DoABCDefineTag) o; int lastCmp = name.compareTo(n.name); return (lastCmp != 0 ? lastCmp : name.compareTo(n.name)); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DoABCTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DoABCTag.java index dc9d75f3b..30ece5454 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DoABCTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DoABCTag.java @@ -17,7 +17,6 @@ package com.jpexs.decompiler.flash.tags; import com.jpexs.decompiler.flash.Main; -import com.jpexs.decompiler.flash.SWFInputStream; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.CopyOutputStream; @@ -38,7 +37,6 @@ public class DoABCTag extends Tag implements ABCContainerTag { return abc; } - @Override public String getName() { return "DoABC"; @@ -80,7 +78,6 @@ public class DoABCTag extends Tag implements ABCContainerTag { return new byte[0]; } - @Override public int compareTo(ABCContainerTag o) { return 0; diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java index 418f3b614..1bb485864 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -126,9 +126,9 @@ public class Tag { public Set getDeepNeededCharacters(HashMap characters) { Set ret = new HashSet(); - Set needed = getNeededCharacters(); + Set needed = getNeededCharacters(); for (int ch : needed) { - if(!characters.containsKey(ch)){ //TODO: use Import tag (?) + if (!characters.containsKey(ch)) { //TODO: use Import tag (?) continue; } ret.add(ch);