AS1/2 ActionTry fix

AS1/2 Infinity
This commit is contained in:
Jindra Pet��k
2013-04-04 21:34:23 +02:00
parent 11da7d8c68
commit c5edeeb3fb
21 changed files with 1039 additions and 958 deletions
@@ -19,17 +19,18 @@ package com.jpexs.decompiler.flash.action.parser;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.flashlite.ActionFSCommand2;
import com.jpexs.decompiler.flash.action.flashlite.ActionStrictMode;
import com.jpexs.decompiler.flash.graph.GraphSourceItemContainer;
import com.jpexs.decompiler.flash.action.special.ActionNop;
import com.jpexs.decompiler.flash.action.swf3.*;
import com.jpexs.decompiler.flash.action.swf4.*;
import com.jpexs.decompiler.flash.action.swf5.*;
import com.jpexs.decompiler.flash.action.swf6.*;
import com.jpexs.decompiler.flash.action.swf7.*;
import com.jpexs.decompiler.flash.graph.GraphSourceItemContainer;
import com.jpexs.decompiler.flash.helpers.Helper;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Stack;
import java.util.logging.Level;
@@ -39,7 +40,8 @@ public class ASMParser {
public static List<Action> parse(long containerSWFOffset, boolean ignoreNops, List<Label> labels, long address, FlasmLexer lexer, List<String> constantPool, int version) throws IOException, ParseException {
List<Action> list = new ArrayList<Action>();
Stack<GraphSourceItemContainer> containers=new Stack<GraphSourceItemContainer>();
Stack<GraphSourceItemContainer> containers = new Stack<GraphSourceItemContainer>();
HashMap<GraphSourceItemContainer, Integer> containerPos = new HashMap<GraphSourceItemContainer, Integer>();
while (true) {
ParsedSymbol symb = lexer.yylex();
if (symb.type == ParsedSymbol.TYPE_LABEL) {
@@ -54,248 +56,253 @@ public class ASMParser {
}
}
}
} else if(symb.type == ParsedSymbol.TYPE_BLOCK_END){
if(containers.isEmpty()){
} else if (symb.type == ParsedSymbol.TYPE_BLOCK_END) {
if (containers.isEmpty()) {
throw new ParseException("Block end without start", lexer.yyline());
}
GraphSourceItemContainer a=containers.pop();
a.setEndAddress(address);
}else if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) {
GraphSourceItemContainer a = containers.peek();
int pos = containerPos.get(a);
containerPos.put(a, pos);
if (!a.parseDivision(pos, address, lexer)) {
containers.pop();
}
} else if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) {
String instructionName = ((String) symb.value).toLowerCase();
Action a =null;
Action a = null;
if (instructionName.equals("GetURL".toLowerCase())) {
a=new ActionGetURL(lexer);
a = new ActionGetURL(lexer);
} else if (instructionName.equals("GoToLabel".toLowerCase())) {
a=(new ActionGoToLabel(lexer));
a = (new ActionGoToLabel(lexer));
} else if (instructionName.equals("GotoFrame".toLowerCase())) {
a=(new ActionGotoFrame(lexer));
a = (new ActionGotoFrame(lexer));
} else if (instructionName.equals("NextFrame".toLowerCase())) {
a=(new ActionNextFrame());
a = (new ActionNextFrame());
} else if (instructionName.equals("Play".toLowerCase())) {
a=(new ActionPlay());
a = (new ActionPlay());
} else if (instructionName.equals("PrevFrame".toLowerCase())) {
a=(new ActionPrevFrame());
a = (new ActionPrevFrame());
} else if (instructionName.equals("SetTarget".toLowerCase())) {
a=(new ActionSetTarget(lexer));
a = (new ActionSetTarget(lexer));
} else if (instructionName.equals("Stop".toLowerCase())) {
a=(new ActionStop());
a = (new ActionStop());
} else if (instructionName.equals("StopSounds".toLowerCase())) {
a=(new ActionStopSounds());
a = (new ActionStopSounds());
} else if (instructionName.equals("ToggleQuality".toLowerCase())) {
a=(new ActionToggleQuality());
a = (new ActionToggleQuality());
} else if (instructionName.equals("WaitForFrame".toLowerCase())) {
a=(new ActionWaitForFrame(lexer));
a = (new ActionWaitForFrame(lexer));
} else if (instructionName.equals("Add".toLowerCase())) {
a=(new ActionAdd());
a = (new ActionAdd());
} else if (instructionName.equals("And".toLowerCase())) {
a=(new ActionAnd());
a = (new ActionAnd());
} else if (instructionName.equals("AsciiToChar".toLowerCase())) {
a=(new ActionAsciiToChar());
a = (new ActionAsciiToChar());
} else if (instructionName.equals("Call".toLowerCase())) {
a=(new ActionCall());
a = (new ActionCall());
} else if (instructionName.equals("CharToAscii".toLowerCase())) {
a=(new ActionCharToAscii());
a = (new ActionCharToAscii());
} else if (instructionName.equals("CloneSprite".toLowerCase())) {
a=(new ActionCloneSprite());
a = (new ActionCloneSprite());
} else if (instructionName.equals("Divide".toLowerCase())) {
a=(new ActionDivide());
a = (new ActionDivide());
} else if (instructionName.equals("EndDrag".toLowerCase())) {
a=(new ActionEndDrag());
a = (new ActionEndDrag());
} else if (instructionName.equals("Equals".toLowerCase())) {
a=(new ActionEquals());
a = (new ActionEquals());
} else if (instructionName.equals("GetProperty".toLowerCase())) {
a=(new ActionGetProperty());
a = (new ActionGetProperty());
} else if (instructionName.equals("GetTime".toLowerCase())) {
a=(new ActionGetTime());
a = (new ActionGetTime());
} else if (instructionName.equals("GetURL2".toLowerCase())) {
a=(new ActionGetURL2(lexer));
a = (new ActionGetURL2(lexer));
} else if (instructionName.equals("GetVariable".toLowerCase())) {
a=(new ActionGetVariable());
a = (new ActionGetVariable());
} else if (instructionName.equals("GotoFrame2".toLowerCase())) {
a=(new ActionGotoFrame2(lexer));
a = (new ActionGotoFrame2(lexer));
} else if (instructionName.equals("If".toLowerCase())) {
a=(new ActionIf(lexer));
a = (new ActionIf(lexer));
} else if (instructionName.equals("Jump".toLowerCase())) {
a=(new ActionJump(lexer));
a = (new ActionJump(lexer));
} else if (instructionName.equals("Less".toLowerCase())) {
a=(new ActionLess());
a = (new ActionLess());
} else if (instructionName.equals("MBAsciiToChar".toLowerCase())) {
a=(new ActionMBAsciiToChar());
a = (new ActionMBAsciiToChar());
} else if (instructionName.equals("MBCharToAscii".toLowerCase())) {
a=(new ActionMBCharToAscii());
a = (new ActionMBCharToAscii());
} else if (instructionName.equals("MBStringExtract".toLowerCase())) {
a=(new ActionMBStringExtract());
a = (new ActionMBStringExtract());
} else if (instructionName.equals("MBStringLength".toLowerCase())) {
a=(new ActionMBStringLength());
a = (new ActionMBStringLength());
} else if (instructionName.equals("Multiply".toLowerCase())) {
a=(new ActionMultiply());
a = (new ActionMultiply());
} else if (instructionName.equals("Not".toLowerCase())) {
a=(new ActionNot());
a = (new ActionNot());
} else if (instructionName.equals("Or".toLowerCase())) {
a=(new ActionOr());
a = (new ActionOr());
} else if (instructionName.equals("Pop".toLowerCase())) {
a=(new ActionPop());
a = (new ActionPop());
} else if (instructionName.equals("Push".toLowerCase())) {
a=(new ActionPush(lexer, constantPool));
a = (new ActionPush(lexer, constantPool));
} else if (instructionName.equals("RandomNumber".toLowerCase())) {
a=(new ActionRandomNumber());
a = (new ActionRandomNumber());
} else if (instructionName.equals("RemoveSprite".toLowerCase())) {
a=(new ActionRemoveSprite());
a = (new ActionRemoveSprite());
} else if (instructionName.equals("SetProperty".toLowerCase())) {
a=(new ActionSetProperty());
a = (new ActionSetProperty());
} else if (instructionName.equals("SetTarget2".toLowerCase())) {
a=(new ActionSetTarget2());
a = (new ActionSetTarget2());
} else if (instructionName.equals("SetVariable".toLowerCase())) {
a=(new ActionSetVariable());
a = (new ActionSetVariable());
} else if (instructionName.equals("StartDrag".toLowerCase())) {
a=(new ActionStartDrag());
a = (new ActionStartDrag());
} else if (instructionName.equals("StringAdd".toLowerCase())) {
a=(new ActionStringAdd());
a = (new ActionStringAdd());
} else if (instructionName.equals("StringEquals".toLowerCase())) {
a=(new ActionStringEquals());
a = (new ActionStringEquals());
} else if (instructionName.equals("StringExtract".toLowerCase())) {
a=(new ActionStringExtract());
a = (new ActionStringExtract());
} else if (instructionName.equals("StringLength".toLowerCase())) {
a=(new ActionStringLength());
a = (new ActionStringLength());
} else if (instructionName.equals("StringLess".toLowerCase())) {
a=(new ActionStringLess());
a = (new ActionStringLess());
} else if (instructionName.equals("Subtract".toLowerCase())) {
a=(new ActionSubtract());
a = (new ActionSubtract());
} else if (instructionName.equals("ToInteger".toLowerCase())) {
a=(new ActionToInteger());
a = (new ActionToInteger());
} else if (instructionName.equals("Trace".toLowerCase())) {
a=(new ActionTrace());
a = (new ActionTrace());
} else if (instructionName.equals("WaitForFrame2".toLowerCase())) {
a=(new ActionWaitForFrame2(lexer));
a = (new ActionWaitForFrame2(lexer));
} else if (instructionName.equals("Add2".toLowerCase())) {
a=(new ActionAdd2());
a = (new ActionAdd2());
} else if (instructionName.equals("BitAnd".toLowerCase())) {
a=(new ActionBitAnd());
a = (new ActionBitAnd());
} else if (instructionName.equals("BitLShift".toLowerCase())) {
a=(new ActionBitLShift());
a = (new ActionBitLShift());
} else if (instructionName.equals("BitOr".toLowerCase())) {
a=(new ActionBitOr());
a = (new ActionBitOr());
} else if (instructionName.equals("BitRShift".toLowerCase())) {
a=(new ActionBitRShift());
a = (new ActionBitRShift());
} else if (instructionName.equals("BitURShift".toLowerCase())) {
a=(new ActionBitURShift());
a = (new ActionBitURShift());
} else if (instructionName.equals("BitXor".toLowerCase())) {
a=(new ActionBitXor());
a = (new ActionBitXor());
} else if (instructionName.equals("CallFunction".toLowerCase())) {
a=(new ActionCallFunction());
a = (new ActionCallFunction());
} else if (instructionName.equals("CallMethod".toLowerCase())) {
a=(new ActionCallMethod());
a = (new ActionCallMethod());
} else if (instructionName.equals("ConstantPool".toLowerCase())) {
ActionConstantPool acp = new ActionConstantPool(lexer);
constantPool = acp.constantPool;
a=(acp);
a = (acp);
} else if (instructionName.equals("Decrement".toLowerCase())) {
a=(new ActionDecrement());
a = (new ActionDecrement());
} else if (instructionName.equals("DefineFunction".toLowerCase())) {
a=(new ActionDefineFunction(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
a = (new ActionDefineFunction(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
} else if (instructionName.equals("DefineLocal".toLowerCase())) {
a=(new ActionDefineLocal());
a = (new ActionDefineLocal());
} else if (instructionName.equals("DefineLocal2".toLowerCase())) {
a=(new ActionDefineLocal2());
a = (new ActionDefineLocal2());
} else if (instructionName.equals("Delete".toLowerCase())) {
a=(new ActionDelete());
a = (new ActionDelete());
} else if (instructionName.equals("Delete2".toLowerCase())) {
a=(new ActionDelete2());
a = (new ActionDelete2());
} else if (instructionName.equals("Enumerate".toLowerCase())) {
a=(new ActionEnumerate());
a = (new ActionEnumerate());
} else if (instructionName.equals("Equals2".toLowerCase())) {
a=(new ActionEquals2());
a = (new ActionEquals2());
} else if (instructionName.equals("GetMember".toLowerCase())) {
a=(new ActionGetMember());
a = (new ActionGetMember());
} else if (instructionName.equals("Increment".toLowerCase())) {
a=(new ActionIncrement());
a = (new ActionIncrement());
} else if (instructionName.equals("InitArray".toLowerCase())) {
a=(new ActionInitArray());
a = (new ActionInitArray());
} else if (instructionName.equals("InitObject".toLowerCase())) {
a=(new ActionInitObject());
a = (new ActionInitObject());
} else if (instructionName.equals("Less2".toLowerCase())) {
a=(new ActionLess2());
a = (new ActionLess2());
} else if (instructionName.equals("Modulo".toLowerCase())) {
a=(new ActionModulo());
a = (new ActionModulo());
} else if (instructionName.equals("NewMethod".toLowerCase())) {
a=(new ActionNewMethod());
a = (new ActionNewMethod());
} else if (instructionName.equals("NewObject".toLowerCase())) {
a=(new ActionNewObject());
a = (new ActionNewObject());
} else if (instructionName.equals("PushDuplicate".toLowerCase())) {
a=(new ActionPushDuplicate());
a = (new ActionPushDuplicate());
} else if (instructionName.equals("Return".toLowerCase())) {
a=(new ActionReturn());
a = (new ActionReturn());
} else if (instructionName.equals("SetMember".toLowerCase())) {
a=(new ActionSetMember());
a = (new ActionSetMember());
} else if (instructionName.equals("StackSwap".toLowerCase())) {
a=(new ActionStackSwap());
a = (new ActionStackSwap());
} else if (instructionName.equals("StoreRegister".toLowerCase())) {
a=(new ActionStoreRegister(lexer));
a = (new ActionStoreRegister(lexer));
} else if (instructionName.equals("TargetPath".toLowerCase())) {
a=(new ActionTargetPath());
a = (new ActionTargetPath());
} else if (instructionName.equals("ToNumber".toLowerCase())) {
a=(new ActionToNumber());
a = (new ActionToNumber());
} else if (instructionName.equals("ToString".toLowerCase())) {
a=(new ActionToString());
a = (new ActionToString());
} else if (instructionName.equals("TypeOf".toLowerCase())) {
a=(new ActionTypeOf());
a = (new ActionTypeOf());
} else if (instructionName.equals("With".toLowerCase())) {
a=(new ActionWith(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
a = (new ActionWith(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
} else if (instructionName.equals("Enumerate2".toLowerCase())) {
a=(new ActionEnumerate2());
a = (new ActionEnumerate2());
} else if (instructionName.equals("Greater".toLowerCase())) {
a=(new ActionGreater());
a = (new ActionGreater());
} else if (instructionName.equals("InstanceOf".toLowerCase())) {
a=(new ActionInstanceOf());
a = (new ActionInstanceOf());
} else if (instructionName.equals("StrictEquals".toLowerCase())) {
a=(new ActionStrictEquals());
a = (new ActionStrictEquals());
} else if (instructionName.equals("StringGreater".toLowerCase())) {
a=(new ActionStringGreater());
a = (new ActionStringGreater());
} else if (instructionName.equals("CastOp".toLowerCase())) {
a=(new ActionCastOp());
a = (new ActionCastOp());
} else if (instructionName.equals("DefineFunction2".toLowerCase())) {
a=(new ActionDefineFunction2(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
a = (new ActionDefineFunction2(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
} else if (instructionName.equals("Extends".toLowerCase())) {
a=(new ActionExtends());
a = (new ActionExtends());
} else if (instructionName.equals("ImplementsOp".toLowerCase())) {
a=(new ActionImplementsOp());
a = (new ActionImplementsOp());
} else if (instructionName.equals("Throw".toLowerCase())) {
a=(new ActionThrow());
a = (new ActionThrow());
} else if (instructionName.equals("Try".toLowerCase())) {
a=(new ActionTry(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
a = (new ActionTry(containerSWFOffset + address, ignoreNops, labels, address, lexer, constantPool, version));
} else if (instructionName.equals("FSCommand2".toLowerCase())) {
a=(new ActionFSCommand2());
a = (new ActionFSCommand2());
} else if (instructionName.equals("StrictMode".toLowerCase())) {
a=(new ActionStrictMode(lexer));
a = (new ActionStrictMode(lexer));
} else if (instructionName.equals("Nop".toLowerCase())) {
if (!ignoreNops) {
a=(new ActionNop());
a = (new ActionNop());
}
}/* else if(instructionName.startsWith("ofs")) {
continue;
}*/ else {
throw new ParseException("Unknown instruction name :" + instructionName, lexer.yyline());
}
if (a instanceof ActionNop) {
a.containerSWFOffset = containerSWFOffset;
a.setAddress(address, version, false);
address += 1;
} else if(a!=null) {
if (a instanceof ActionNop) {
a.containerSWFOffset = containerSWFOffset;
a.setAddress(address, version, false);
address += 1;
} else if (a != null) {
a.containerSWFOffset = containerSWFOffset;
a.setAddress(address, version, false);
address += a.getBytes(version).length;
}
if(a instanceof GraphSourceItemContainer){
containers.push((GraphSourceItemContainer)a);
if (a instanceof GraphSourceItemContainer) {
containers.push((GraphSourceItemContainer) a);
containerPos.put((GraphSourceItemContainer) a, 0);
}
if(a!=null){
if (a != null) {
list.add(a);
}
} else if (symb.type == ParsedSymbol.TYPE_EOL) {
} else if ((symb.type == ParsedSymbol.TYPE_BLOCK_END) || (symb.type == ParsedSymbol.TYPE_EOF)) {
return list;
} else {
throw new ParseException("Label or Instruction name expected, found:" + symb.type, lexer.yyline());
throw new ParseException("Label or Instruction name expected, found:" + symb.type + " " + symb.value, lexer.yyline());
}
}
}
@@ -1,4 +1,4 @@
/* The following code was generated by JFlex 1.4.3 on 9.3.13 17:48 */
/* The following code was generated by JFlex 1.4.3 on 3.4.13 22:09 */
/* Flash assembler language lexer specification */
package com.jpexs.decompiler.flash.action.parser;
@@ -9,8 +9,9 @@ import com.jpexs.decompiler.flash.action.swf4.RegisterNumber;
import com.jpexs.decompiler.flash.action.swf4.Undefined;
/**
* This class is a scanner generated by <a href="http://www.jflex.de/">JFlex</a>
* 1.4.3 on 9.3.13 17:48 from the specification file
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.4.3 on 3.4.13 22:09 from the
* specification file
* <tt>D:/Dokumenty/Programovani/JavaSE/FFDec/trunk/src/com/jpexs/decompiler/flash/action/parser/flasm.flex</tt>
*/
public final class FlasmLexer {
@@ -42,92 +43,116 @@ public final class FlasmLexer {
*/
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\42\1\0\1\5\2\0\1\44\3\0\1\34\1\0\1\31\1\32"
+ "\1\0\1\30\3\45\4\35\2\11\1\12\1\3\5\0\4\7\1\33"
+ "\25\7\1\0\1\36\2\0\1\10\1\0\1\22\1\43\1\40\1\26"
+ "\1\20\1\21\1\37\1\7\1\27\2\7\1\23\1\7\1\25\1\41"
+ "\2\7\1\16\1\24\1\15\1\17\5\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\u013f\5\31\0\162\5\4\0"
+ "\14\5\16\0\5\5\11\0\1\5\21\0\130\6\5\0\23\6\12\0"
+ "\1\5\13\0\1\5\1\0\3\5\1\0\1\5\1\0\24\5\1\0"
+ "\54\5\1\0\46\5\1\0\5\5\4\0\202\5\1\0\4\6\3\0"
+ "\105\5\1\0\46\5\2\0\2\5\6\0\20\5\41\0\46\5\2\0"
+ "\1\5\7\0\47\5\11\0\21\6\1\0\27\6\1\0\3\6\1\0"
+ "\1\6\1\0\2\6\1\0\1\6\13\0\33\5\5\0\3\5\15\0"
+ "\4\6\14\0\6\6\13\0\32\5\5\0\13\5\16\6\7\0\12\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\3\5\60\0\46\5\13\6\1\5"
+ "\u014f\0\3\6\66\5\2\0\1\6\1\5\20\6\2\0\1\5\4\6"
+ "\3\0\12\5\2\6\2\0\12\6\21\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\11\0\1\6\4\0"
+ "\2\5\1\0\3\5\2\6\2\0\12\6\4\5\15\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\13\0\4\5\1\0\1\5\7\0\14\6\3\5\14\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\6\6\3\0\2\6\2\0"
+ "\3\6\10\0\2\6\4\0\2\5\1\0\3\5\4\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\10\5\1\0\3\5\4\0\5\6\3\0\3\6\1\0\4\6"
+ "\11\0\1\6\17\0\11\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\4\0\7\6"
+ "\1\0\3\6\1\0\4\6\7\0\2\6\11\0\2\5\4\0\12\6"
+ "\1\44\1\0\1\5\2\0\1\46\3\0\1\36\1\0\1\30\1\34"
+ "\1\0\1\33\3\47\4\37\2\11\1\12\1\3\5\0\4\7\1\35"
+ "\3\7\1\31\21\7\1\0\1\40\2\0\1\10\1\0\1\22\1\45"
+ "\1\42\1\26\1\20\1\21\1\41\1\7\1\27\2\7\1\23\1\7"
+ "\1\25\1\43\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\4\0\12\6\22\0\2\6"
+ "\1\0\10\5\1\0\3\5\1\0\27\5\1\0\20\5\4\0\6\6"
+ "\2\0\3\6\1\0\4\6\11\0\1\6\10\0\2\5\4\0\12\6"
+ "\22\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\42\5\6\0"
+ "\24\6\1\0\2\6\4\5\4\0\10\6\1\0\44\6\11\0\1\6"
+ "\71\0\42\5\1\0\5\5\1\0\2\5\1\0\7\6\3\0\4\6"
+ "\6\0\12\6\6\0\6\5\4\6\106\0\46\5\12\0\51\5\7\0"
+ "\132\5\5\0\104\5\5\0\122\5\6\0\7\5\1\0\77\5\1\0"
+ "\1\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0"
+ "\47\5\1\0\1\5\1\0\4\5\2\0\37\5\1\0\1\5\1\0"
+ "\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0\7\5\1\0"
+ "\7\5\1\0\27\5\1\0\37\5\1\0\1\5\1\0\4\5\2\0"
+ "\7\5\1\0\47\5\1\0\23\5\16\0\11\6\56\0\125\5\14\0"
+ "\u026c\5\2\0\10\5\12\0\32\5\5\0\113\5\3\0\3\5\17\0"
+ "\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\126\0\35\5\3\0\14\6\4\0"
+ "\14\6\12\0\12\6\36\5\2\0\5\5\u038b\0\154\5\224\0\234\5"
+ "\4\0\132\5\6\0\26\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"
+ "\17\0\4\6\32\0\5\6\20\0\2\5\23\0\1\5\13\0\4\6"
+ "\6\0\6\6\1\0\1\5\15\0\1\5\40\0\22\5\36\0\15\6"
+ "\4\0\1\6\3\0\6\6\27\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\3\5\1\0\7\5\3\0\3\5\5\0\5\5"
+ "\26\0\44\5\u0e81\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\137\5\5\0"
+ "\50\5\4\0\136\5\21\0\30\5\70\0\20\5\u0200\0\u19b6\5\112\0"
+ "\u51a6\5\132\0\u048d\5\u0773\0\u2ba4\5\u215c\0\u012e\5\2\0\73\5\225\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"
+ "\4\6\17\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\12\0\132\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";
+ "\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
*/
@@ -138,15 +163,17 @@ public final class FlasmLexer {
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\12\2\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\30\2\12\1\11\1\23\1\30\1\0\6\11"
+ "\1\31\3\11\1\32\3\11\1\33\12\11\2\34\1\35"
+ "\2\36";
+ "\2\7\1\10\1\11\1\12\1\13\5\11\1\1\1\11"
+ "\1\12\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"
+ "\1\11\1\23\1\30\1\0\5\11\1\0\2\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\30\1\11\2\34\1\35"
+ "\1\30\2\36";
private static int[] zzUnpackAction() {
int[] result = new int[86];
int[] result = new int[102];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -170,20 +197,22 @@ public final class FlasmLexer {
*/
private static final int[] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\46\0\114\0\162\0\230\0\276\0\344\0\162"
+ "\0\u010a\0\u0130\0\162\0\u0156\0\162\0\u017c\0\162\0\u01a2"
+ "\0\u01c8\0\u01ee\0\162\0\u0214\0\u023a\0\u0260\0\u0286\0\u02ac"
+ "\0\u02d2\0\u02f8\0\u031e\0\u0344\0\162\0\276\0\162\0\162"
+ "\0\162\0\162\0\162\0\162\0\u036a\0\u0390\0\162\0\162"
+ "\0\162\0\162\0\u03b6\0\u03dc\0\u0402\0\u0428\0\u044e\0\u0474"
+ "\0\u049a\0\u02d2\0\u04c0\0\162\0\u04e6\0\162\0\u050c\0\u050c"
+ "\0\u0532\0\u0558\0\u057e\0\u05a4\0\u05ca\0\u05f0\0\u01c8\0\u0616"
+ "\0\u063c\0\u0662\0\u01c8\0\u0688\0\u06ae\0\u06d4\0\u01c8\0\u06fa"
+ "\0\u0720\0\u0746\0\u076c\0\u0792\0\u07b8\0\u07de\0\u0804\0\u082a"
+ "\0\u0850\0\u0876\0\u01c8\0\u01c8\0\u089c\0\u01c8";
"\0\0\0\50\0\120\0\170\0\240\0\310\0\360\0\170"
+ "\0\u0118\0\u0140\0\170\0\u0168\0\170\0\u0190\0\170\0\u01b8"
+ "\0\u01e0\0\u0208\0\170\0\u0230\0\u0258\0\u0280\0\u02a8\0\u02d0"
+ "\0\u02f8\0\u0320\0\u0348\0\u0370\0\u0398\0\170\0\310\0\170"
+ "\0\170\0\170\0\170\0\170\0\170\0\u03c0\0\u03e8\0\170"
+ "\0\170\0\170\0\170\0\u0410\0\u0438\0\u0460\0\u0488\0\u04b0"
+ "\0\u04d8\0\u0500\0\u0528\0\u0550\0\170\0\u0578\0\u0348\0\u05a0"
+ "\0\170\0\u05c8\0\u05c8\0\u05f0\0\u0618\0\u0640\0\u0668\0\u0690"
+ "\0\u06b8\0\u06e0\0\u0708\0\u01e0\0\u0730\0\u0758\0\u0780\0\u01e0"
+ "\0\u07a8\0\u07d0\0\u07f8\0\u0820\0\u0848\0\u01e0\0\u0870\0\u0898"
+ "\0\u08c0\0\u08e8\0\u0910\0\u0938\0\u0960\0\u0988\0\u09b0\0\u09d8"
+ "\0\u0a00\0\u0a28\0\u0a50\0\u0a78\0\u0aa0\0\u0ac8\0\u01e0\0\u0af0"
+ "\0\u0b18\0\u01e0\0\u01e0\0\170\0\u0b40\0\u01e0";
private static int[] zzUnpackRowMap() {
int[] result = new int[86];
int[] result = new int[102];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -205,109 +234,136 @@ public final class FlasmLexer {
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\3\4\1\7\3\4\3\7\1\4\1\7\2\4"
+ "\1\11\1\12\1\13\33\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\33\1\21"
+ "\1\4\1\22\1\4\1\21\1\34\1\21\1\35\1\21"
+ "\1\4\1\22\52\0\1\5\46\0\5\36\1\37\2\0"
+ "\14\36\2\0\1\36\1\0\1\36\1\0\3\36\1\0"
+ "\1\36\1\0\1\36\5\0\2\36\3\7\1\37\2\0"
+ "\14\7\2\0\1\7\1\0\1\7\1\0\3\7\1\0"
+ "\1\7\1\0\1\7\1\11\2\0\33\11\1\0\3\11"
+ "\1\0\3\11\2\0\1\13\43\0\2\40\1\0\12\40"
+ "\1\41\1\42\2\40\1\43\3\40\1\44\2\40\1\45"
+ "\4\40\1\46\1\47\3\40\1\50\1\51\1\52\1\45"
+ "\2\0\1\17\43\0\1\20\2\0\43\20\5\0\5\21"
+ "\3\0\14\21\2\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\53"
+ "\7\0\1\22\1\0\1\54\1\53\1\0\1\22\7\0"
+ "\1\22\5\0\5\21\3\0\1\21\1\55\12\21\2\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\56\10\21\2\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\57\3\21\2\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\60\6\21\2\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\61\11\21\2\0"
+ "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"
+ "\1\21\11\0\1\62\6\0\1\53\7\0\1\62\1\0"
+ "\1\54\1\53\1\0\1\62\7\0\1\62\11\0\1\63"
+ "\16\0\1\64\4\0\1\63\7\0\1\63\11\0\1\54"
+ "\16\0\1\54\4\0\1\54\7\0\1\54\5\0\5\21"
+ "\3\0\14\21\2\0\1\21\1\0\1\21\1\0\2\21"
+ "\1\65\1\0\1\21\1\0\1\21\30\0\1\46\4\0"
+ "\1\46\7\0\1\46\30\0\1\66\4\0\1\66\7\0"
+ "\1\66\11\0\1\67\16\0\1\67\1\70\2\0\1\70"
+ "\1\67\7\0\1\67\11\0\1\54\6\0\1\53\7\0"
+ "\1\54\2\0\1\53\1\0\1\54\7\0\1\54\5\0"
+ "\5\21\3\0\2\21\1\71\11\21\2\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\14\21\2\0\1\21\1\0\1\21\1\0"
+ "\1\72\2\21\1\0\1\21\1\0\1\21\5\0\5\21"
+ "\3\0\11\21\1\73\2\21\2\0\1\21\1\0\1\21"
+ "\13\7\1\4\2\7\2\4\1\7\3\4\3\7\1\4"
+ "\1\7\2\4\1\11\1\12\1\13\35\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\21\1\4\1\22\1\4\1\21"
+ "\1\35\1\21\1\36\1\21\1\4\1\22\54\0\1\5"
+ "\50\0\5\37\1\40\2\0\13\37\1\0\3\37\1\0"
+ "\1\37\1\0\1\37\1\0\3\37\1\0\1\37\1\0"
+ "\1\37\5\0\2\37\3\7\1\40\2\0\13\7\1\0"
+ "\3\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\35\11\1\0\3\11"
+ "\1\0\3\11\2\0\1\13\45\0\2\41\1\0\12\41"
+ "\1\42\1\43\2\41\1\44\3\41\1\45\5\41\1\46"
+ "\3\41\1\47\1\50\3\41\1\51\1\52\1\53\1\46"
+ "\2\0\1\17\45\0\1\20\2\0\45\20\5\0\5\21"
+ "\3\0\13\21\1\0\3\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\54\12\0\1\22\1\55\1\54\1\0\1\22"
+ "\7\0\1\22\5\0\5\21\3\0\1\21\1\56\11\21"
+ "\1\0\3\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\57\7\21\1\0\3\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\74\5\21\2\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\75\5\21\2\0\1\21\1\0\1\21"
+ "\1\0\3\21\1\0\1\21\1\0\1\21\11\0\1\63"
+ "\16\0\1\63\4\0\1\63\7\0\1\63\5\0\5\21"
+ "\3\0\10\21\1\76\3\21\2\0\1\21\1\0\1\21"
+ "\1\0\3\21\1\0\1\21\1\0\1\21\11\0\1\67"
+ "\16\0\1\67\4\0\1\67\7\0\1\67\5\0\5\21"
+ "\3\0\3\21\1\77\10\21\2\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\100\1\21\2\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\101\10\21\2\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\102\4\21\2\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\103\5\21\2\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\104\4\21\2\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\105\4\21\2\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\106\7\21\2\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\107\10\21\2\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\110\13\21\2\0\1\21\1\0\1\21\1\0"
+ "\3\0\10\21\1\60\2\21\1\0\3\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\61\5\21\1\0\3\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\62\10\21"
+ "\1\0\3\21\1\0\1\21\1\0\1\21\1\0\3\21"
+ "\1\0\1\21\1\0\1\21\11\0\1\63\17\0\1\64"
+ "\1\0\1\65\3\0\1\63\7\0\1\63\5\0\5\21"
+ "\3\0\10\21\1\66\2\21\1\0\3\21\1\0\1\21"
+ "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"
+ "\11\0\1\67\6\0\1\54\12\0\1\67\1\55\1\54"
+ "\1\0\1\67\7\0\1\67\11\0\1\55\21\0\1\55"
+ "\3\0\1\55\7\0\1\55\5\0\5\21\3\0\13\21"
+ "\1\0\3\21\1\0\1\21\1\0\1\21\1\0\2\21"
+ "\1\70\1\0\1\21\1\0\1\21\33\0\1\47\3\0"
+ "\1\47\7\0\1\47\33\0\1\71\3\0\1\71\7\0"
+ "\1\71\11\0\1\72\16\0\1\73\2\0\1\72\2\0"
+ "\1\73\1\72\7\0\1\72\11\0\1\55\6\0\1\54"
+ "\12\0\1\55\1\0\1\54\1\0\1\55\7\0\1\55"
+ "\5\0\5\21\3\0\2\21\1\74\10\21\1\0\3\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\0\1\21\1\0\1\21\1\0\1\75\2\21\1\0"
+ "\1\21\1\0\1\21\5\0\5\21\3\0\11\21\1\76"
+ "\1\21\1\0\3\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\111\13\21\2\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\112\1\21\2\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\113\6\21\2\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\114\10\21\2\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\115\3\21\2\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\116\3\21\2\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\117\12\21\2\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\120\10\21\2\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\121"
+ "\13\21\2\0\1\21\1\0\1\21\1\0\3\21\1\0"
+ "\1\21\1\0\1\21\5\0\4\21\1\122\3\0\13\21"
+ "\1\123\2\0\1\21\1\0\1\122\1\0\3\21\1\0"
+ "\1\21\1\0\1\122\5\0\5\21\3\0\11\21\1\124"
+ "\2\21\2\0\1\21\1\0\1\21\1\0\3\21\1\0"
+ "\1\21\1\0\1\21\5\0\4\21\1\125\3\0\13\21"
+ "\1\126\2\0\1\21\1\0\1\125\1\0\3\21\1\0"
+ "\1\21\1\0\1\125\5\0\4\21\1\122\3\0\13\21"
+ "\1\122\2\0\1\21\1\0\1\122\1\0\3\21\1\0"
+ "\1\21\1\0\1\122\5\0\4\21\1\125\3\0\13\21"
+ "\1\125\2\0\1\21\1\0\1\125\1\0\3\21\1\0"
+ "\1\21\1\0\1\125";
+ "\6\21\1\77\4\21\1\0\3\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\100\4\21\1\0\3\21\1\0"
+ "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0"
+ "\1\21\11\0\1\63\21\0\1\63\3\0\1\63\7\0"
+ "\1\63\25\0\1\101\27\0\5\21\3\0\4\21\1\102"
+ "\6\21\1\0\3\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\103\2\21\1\0\3\21\1\0\1\21\1\0"
+ "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\11\0"
+ "\1\72\21\0\1\72\3\0\1\72\7\0\1\72\5\0"
+ "\5\21\3\0\3\21\1\104\7\21\1\0\3\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\105\1\0\3\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\106\7\21"
+ "\1\0\3\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\107\3\21\1\0\3\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\110\4\21\1\0\3\21\1\0\1\21"
+ "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21"
+ "\21\0\1\111\33\0\5\21\3\0\12\21\1\112\1\0"
+ "\3\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\113"
+ "\3\21\1\0\3\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\114\3\21\1\0\3\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\115\6\21\1\0\3\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\116\7\21\1\0"
+ "\3\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"
+ "\1\21\1\0\1\21\27\0\1\117\25\0\5\21\3\0"
+ "\10\21\1\120\2\21\1\0\3\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\121\12\21\1\0\3\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\122\12\21\1\0\3\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\123\1\0\3\21"
+ "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21"
+ "\1\0\1\21\25\0\1\124\27\0\5\21\3\0\12\21"
+ "\1\125\1\0\3\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\126\5\21\1\0\3\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\127\7\21\1\0\3\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\130\2\21\1\0"
+ "\3\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0"
+ "\1\21\1\0\1\21\27\0\1\131\25\0\5\21\3\0"
+ "\1\132\12\21\1\0\3\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\3\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\134\11\21\1\0\3\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\135\7\21"
+ "\1\0\3\21\1\0\1\21\1\0\1\21\1\0\3\21"
+ "\1\0\1\21\1\0\1\21\15\0\1\136\37\0\5\21"
+ "\3\0\13\21\1\0\1\21\1\137\1\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\140\12\21\1\0\3\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\141\3\0\13\21\1\0\2\21"
+ "\1\142\1\0\1\21\1\0\1\141\1\0\3\21\1\0"
+ "\1\21\1\0\1\141\5\0\5\21\3\0\11\21\1\143"
+ "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\1\0"
+ "\3\21\1\0\1\21\1\0\1\21\32\0\1\144\22\0"
+ "\4\21\1\145\3\0\13\21\1\0\2\21\1\146\1\0"
+ "\1\21\1\0\1\145\1\0\3\21\1\0\1\21\1\0"
+ "\1\145\5\0\4\21\1\141\3\0\13\21\1\0\2\21"
+ "\1\141\1\0\1\21\1\0\1\141\1\0\3\21\1\0"
+ "\1\21\1\0\1\141\5\0\4\21\1\145\3\0\13\21"
+ "\1\0\2\21\1\145\1\0\1\21\1\0\1\145\1\0"
+ "\3\21\1\0\1\21\1\0\1\145";
private static int[] zzUnpackTrans() {
int[] result = new int[2242];
int[] result = new int[2920];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -345,12 +401,14 @@ public final class FlasmLexer {
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\11\1\1\11\1\0\6\11"
+ "\2\1\4\11\1\0\10\1\1\11\1\1\1\11\1\1"
+ "\1\0\36\1";
+ "\1\1\1\11\3\1\1\11\12\1\1\11\1\0\6\11"
+ "\2\1\4\11\1\0\7\1\1\0\1\11\3\1\1\11"
+ "\1\1\1\0\5\1\1\0\7\1\1\0\5\1\1\0"
+ "\4\1\1\0\4\1\1\0\4\1\1\0\5\1\1\11"
+ "\2\1";
private static int[] zzUnpackAttribute() {
int[] result = new int[86];
int[] result = new int[102];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -477,7 +535,7 @@ public final class FlasmLexer {
char[] map = new char[0x10000];
int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */
while (i < 1740) {
while (i < 2202) {
int count = packed.charAt(i++);
char value = packed.charAt(i++);
do {
@@ -556,9 +614,9 @@ public final class FlasmLexer {
* 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 <b>cannot</b> be
* reused (internal buffer is discarded and lost). Lexical state is set to
* <tt>ZZ_INITIAL</tt>.
* All internal variables are reset, the old input stream
* <b>cannot</b> be reused (internal buffer is discarded and lost). Lexical
* state is set to <tt>ZZ_INITIAL</tt>.
*
* @param reader the new input stream
*/
@@ -880,29 +938,30 @@ public final class FlasmLexer {
}
case 46:
break;
case 11: {
yybegin(YYINITIAL);
return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START);
}
case 47:
break;
case 15: {
string.append('\t');
}
case 47:
case 48:
break;
case 28: {
return new ParsedSymbol(ParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8))));
}
case 48:
case 49:
break;
case 24: {
return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, new Double(Double.parseDouble((yytext()))));
}
case 49:
case 50:
break;
case 25: {
return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE);
}
case 50:
break;
case 11: {
return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START);
}
case 51:
break;
case 26: {
@@ -68,6 +68,7 @@ False = "false"
Null = "null"
Undefined = "undefined"
Infinity = -? "Infinity"
/* integer literals */
PositiveNumberLiteral = 0 | [1-9][0-9]*
@@ -76,7 +77,7 @@ NegativeNumberLiteral = - {PositiveNumberLiteral}
NumberLiteral = {PositiveNumberLiteral}|{NegativeNumberLiteral}
/* floating point literals */
FloatLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}?
FloatLiteral = {Infinity} | (({FLit1}|{FLit2}|{FLit3}) {Exponent}?)
FLit1 = [0-9]+ \. [0-9]*
FLit2 = \. [0-9]+
@@ -126,7 +127,7 @@ Constant= constant{PositiveNumberLiteral}
{FloatLiteral} { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); }
{LineTerminator} {yybegin(YYINITIAL); return new ParsedSymbol(ParsedSymbol.TYPE_EOL); }
{Comment} {return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT,yytext().substring(1));}
{StartOfBlock} { return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START); }
{StartOfBlock} { yybegin(YYINITIAL); return new ParsedSymbol(ParsedSymbol.TYPE_BLOCK_START); }
{True} {return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN,Boolean.TRUE);}
{False} {return new ParsedSymbol(ParsedSymbol.TYPE_BOOLEAN,Boolean.FALSE);}
{Null} {return new ParsedSymbol(ParsedSymbol.TYPE_NULL,new Null());}