From c2194031db3962a69cfe01c2eb944c7722b80abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sun, 19 Sep 2010 13:58:21 +0200 Subject: [PATCH] AS3: Editing exceptions --- trunk/lib/jsyntaxpane-0.9.5.jar | Bin 524914 -> 432526 bytes trunk/libsrc/jpproxy/manifest.mf | 3 + trunk/libsrc/jpproxy/nbbuild.xml | 74 + trunk/libsrc/jpproxy/nbproject/build-impl.xml | 880 +++++++++ .../jpproxy/nbproject/genfiles.properties | 8 + .../jpproxy/nbproject/project.properties | 74 + trunk/libsrc/jpproxy/nbproject/project.xml | 13 + .../main/jflex/jsyntaxpane/lexers/flasm3.flex | 18 +- .../jflex/jsyntaxpane/lexers/Flasm3Lexer.java | 367 ++-- .../jsyntaxpane/target/jsyntaxpane-0.9.5.jar | Bin 524914 -> 432526 bytes trunk/manifest.mf | 3 + trunk/nbbuild.xml | 74 + trunk/nbproject/build-impl.xml | 891 +++++++++ trunk/nbproject/configs/Basic_run.properties | 2 + trunk/nbproject/configs/Proxy.properties | 1 + trunk/nbproject/configs/as3.properties | 1 + .../configs/as3_secure.swf.properties | 1 + trunk/nbproject/genfiles.properties | 8 + trunk/nbproject/project.properties | 85 + trunk/nbproject/project.xml | 15 + .../com/jpexs/asdec/abc/avm2/AVM2Code.java | 17 +- .../asdec/abc/avm2/parser/ASM3Parser.java | 260 +-- .../asdec/abc/avm2/parser/Flasm3Lexer.java | 1743 +++++++++-------- .../asdec/abc/avm2/parser/ParsedSymbol.java | 3 + .../jpexs/asdec/abc/avm2/parser/flasm3.flex | 18 + .../asdec/abc/gui/ASMSourceEditorPane.java | 11 +- trunk/testdata/as2.fla | Bin 0 -> 64512 bytes trunk/testdata/as2.html | 318 +++ trunk/testdata/as2.swf | Bin 0 -> 1108 bytes trunk/testdata/as3.fla | Bin 0 -> 29696 bytes trunk/testdata/as3.html | 318 +++ trunk/testdata/as3.swf | Bin 0 -> 2586 bytes trunk/testdata/classes/Test.as | 313 +++ trunk/testdata/classes/TestClass1.as | 5 + 34 files changed, 4322 insertions(+), 1202 deletions(-) create mode 100644 trunk/libsrc/jpproxy/manifest.mf create mode 100644 trunk/libsrc/jpproxy/nbbuild.xml create mode 100644 trunk/libsrc/jpproxy/nbproject/build-impl.xml create mode 100644 trunk/libsrc/jpproxy/nbproject/genfiles.properties create mode 100644 trunk/libsrc/jpproxy/nbproject/project.properties create mode 100644 trunk/libsrc/jpproxy/nbproject/project.xml create mode 100644 trunk/manifest.mf create mode 100644 trunk/nbbuild.xml create mode 100644 trunk/nbproject/build-impl.xml create mode 100644 trunk/nbproject/configs/Basic_run.properties create mode 100644 trunk/nbproject/configs/Proxy.properties create mode 100644 trunk/nbproject/configs/as3.properties create mode 100644 trunk/nbproject/configs/as3_secure.swf.properties create mode 100644 trunk/nbproject/genfiles.properties create mode 100644 trunk/nbproject/project.properties create mode 100644 trunk/nbproject/project.xml create mode 100644 trunk/testdata/as2.fla create mode 100644 trunk/testdata/as2.html create mode 100644 trunk/testdata/as2.swf create mode 100644 trunk/testdata/as3.fla create mode 100644 trunk/testdata/as3.html create mode 100644 trunk/testdata/as3.swf create mode 100644 trunk/testdata/classes/Test.as create mode 100644 trunk/testdata/classes/TestClass1.as diff --git a/trunk/lib/jsyntaxpane-0.9.5.jar b/trunk/lib/jsyntaxpane-0.9.5.jar index e20d1fafe27544f7c06cd64ab750b2f625d2426b..911a4c945b949a190dbd4990a761ac6f27362736 100644 GIT binary patch delta 25566 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 SIYlZ(YScFgi9bqmK>0sKSDp3% diff --git a/trunk/libsrc/jpproxy/manifest.mf b/trunk/libsrc/jpproxy/manifest.mf new file mode 100644 index 000000000..1574df4a2 --- /dev/null +++ b/trunk/libsrc/jpproxy/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/trunk/libsrc/jpproxy/nbbuild.xml b/trunk/libsrc/jpproxy/nbbuild.xml new file mode 100644 index 000000000..6579262e5 --- /dev/null +++ b/trunk/libsrc/jpproxy/nbbuild.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project JPProxy. + + + diff --git a/trunk/libsrc/jpproxy/nbproject/build-impl.xml b/trunk/libsrc/jpproxy/nbproject/build-impl.xml new file mode 100644 index 000000000..0531152f7 --- /dev/null +++ b/trunk/libsrc/jpproxy/nbproject/build-impl.xml @@ -0,0 +1,880 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/trunk/libsrc/jpproxy/nbproject/genfiles.properties b/trunk/libsrc/jpproxy/nbproject/genfiles.properties new file mode 100644 index 000000000..595e665fc --- /dev/null +++ b/trunk/libsrc/jpproxy/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +nbbuild.xml.data.CRC32=0a5363c8 +nbbuild.xml.script.CRC32=e4148738 +nbbuild.xml.stylesheet.CRC32=28e38971@1.38.2.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=0a5363c8 +nbproject/build-impl.xml.script.CRC32=dee28151 +nbproject/build-impl.xml.stylesheet.CRC32=f33e10ff@1.38.2.45 diff --git a/trunk/libsrc/jpproxy/nbproject/project.properties b/trunk/libsrc/jpproxy/nbproject/project.properties new file mode 100644 index 000000000..a546f0851 --- /dev/null +++ b/trunk/libsrc/jpproxy/nbproject/project.properties @@ -0,0 +1,74 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=JPProxy +application.vendor=JPEXS +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +buildfile=nbbuild.xml +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/JPProxy.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.jpproxy-src=src +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath}:\ + ${libs.junit_4.classpath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=com.jpexs.proxy.Main +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=${file.reference.jpproxy-src} diff --git a/trunk/libsrc/jpproxy/nbproject/project.xml b/trunk/libsrc/jpproxy/nbproject/project.xml new file mode 100644 index 000000000..ba3b6b9e1 --- /dev/null +++ b/trunk/libsrc/jpproxy/nbproject/project.xml @@ -0,0 +1,13 @@ + + + org.netbeans.modules.java.j2seproject + + + JPProxy + + + + + + + diff --git a/trunk/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex b/trunk/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex index 3b309ce76..f55c34079 100644 --- a/trunk/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex +++ b/trunk/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex @@ -56,7 +56,8 @@ Label = {Identifier}: /* integer literals */ NumberLiteral = 0 | -?[1-9][0-9]* - +PositiveNumberLiteral = 0 | [1-9][0-9]* + /* floating point literals */ FloatLiteral = -?({FLit1}|{FLit2}|{FLit3}) {Exponent}? @@ -73,6 +74,10 @@ Comment = ";" {InputCharacter}* {LineTerminator}? /* string and character literals */ StringCharacter = [^\r\n\"\\] +ExceptionStart = "exceptionstart"{PositiveNumberLiteral}":" +ExceptionEnd = "exceptionend "{PositiveNumberLiteral}":" +ExceptionTarget = "exceptiontarget "{PositiveNumberLiteral}":" + %state STRING,PARAMETERS %% @@ -83,6 +88,17 @@ StringCharacter = [^\r\n\"\\] /* whitespace */ {WhiteSpace} { } + {ExceptionStart} { + return token(TokenType.KEYWORD); + } + {ExceptionEnd} { + return token(TokenType.KEYWORD); + } + {ExceptionTarget} { + return token(TokenType.KEYWORD); + } + + {Label} {return token(TokenType.IDENTIFIER,yychar,yylength()-1); } /* identifiers */ diff --git a/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/generated-sources/jflex/jsyntaxpane/lexers/Flasm3Lexer.java b/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/generated-sources/jflex/jsyntaxpane/lexers/Flasm3Lexer.java index c85450b06..7e3cc070e 100644 --- a/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/generated-sources/jflex/jsyntaxpane/lexers/Flasm3Lexer.java +++ b/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/generated-sources/jflex/jsyntaxpane/lexers/Flasm3Lexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 18.8.10 12:21 */ +/* The following code was generated by JFlex 1.4.3 on 19.9.10 13:44 */ /* Flash assembler language lexer specification */ @@ -12,7 +12,7 @@ import jsyntaxpane.TokenType; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 18.8.10 12:21 from the specification file + * on 19.9.10 13:44 from the specification file * D:/Dokumenty/Programovani/JavaSE/ASDec/trunk/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex */ public final class Flasm3Lexer extends DefaultJFlexLexer { @@ -42,92 +42,93 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = - "\11\11\1\3\1\2\1\0\1\3\1\1\16\11\4\0\1\3\1\0"+ - "\1\26\1\0\1\10\6\0\1\22\1\0\1\16\1\17\1\0\1\15"+ - "\3\15\4\23\2\6\1\14\1\24\5\0\4\10\1\20\25\10\1\5"+ - "\1\25\1\7\1\0\1\13\1\0\4\12\1\21\7\12\1\4\15\12"+ - "\4\0\41\11\2\0\4\10\4\0\1\10\2\0\1\11\7\0\1\10"+ - "\4\0\1\10\5\0\27\10\1\0\37\10\1\0\u013f\10\31\0\162\10"+ - "\4\0\14\10\16\0\5\10\11\0\1\10\21\0\130\11\5\0\23\11"+ - "\12\0\1\10\13\0\1\10\1\0\3\10\1\0\1\10\1\0\24\10"+ - "\1\0\54\10\1\0\46\10\1\0\5\10\4\0\202\10\1\0\4\11"+ - "\3\0\105\10\1\0\46\10\2\0\2\10\6\0\20\10\41\0\46\10"+ - "\2\0\1\10\7\0\47\10\11\0\21\11\1\0\27\11\1\0\3\11"+ - "\1\0\1\11\1\0\2\11\1\0\1\11\13\0\33\10\5\0\3\10"+ - "\15\0\4\11\14\0\6\11\13\0\32\10\5\0\13\10\16\11\7\0"+ - "\12\11\4\0\2\10\1\11\143\10\1\0\1\10\10\11\1\0\6\11"+ - "\2\10\2\11\1\0\4\11\2\10\12\11\3\10\2\0\1\10\17\0"+ - "\1\11\1\10\1\11\36\10\33\11\2\0\3\10\60\0\46\10\13\11"+ - "\1\10\u014f\0\3\11\66\10\2\0\1\11\1\10\20\11\2\0\1\10"+ - "\4\11\3\0\12\10\2\11\2\0\12\11\21\0\3\11\1\0\10\10"+ - "\2\0\2\10\2\0\26\10\1\0\7\10\1\0\1\10\3\0\4\10"+ - "\2\0\1\11\1\10\7\11\2\0\2\11\2\0\3\11\11\0\1\11"+ - "\4\0\2\10\1\0\3\10\2\11\2\0\12\11\4\10\15\0\3\11"+ - "\1\0\6\10\4\0\2\10\2\0\26\10\1\0\7\10\1\0\2\10"+ - "\1\0\2\10\1\0\2\10\2\0\1\11\1\0\5\11\4\0\2\11"+ - "\2\0\3\11\13\0\4\10\1\0\1\10\7\0\14\11\3\10\14\0"+ - "\3\11\1\0\11\10\1\0\3\10\1\0\26\10\1\0\7\10\1\0"+ - "\2\10\1\0\5\10\2\0\1\11\1\10\10\11\1\0\3\11\1\0"+ - "\3\11\2\0\1\10\17\0\2\10\2\11\2\0\12\11\1\0\1\10"+ - "\17\0\3\11\1\0\10\10\2\0\2\10\2\0\26\10\1\0\7\10"+ - "\1\0\2\10\1\0\5\10\2\0\1\11\1\10\6\11\3\0\2\11"+ - "\2\0\3\11\10\0\2\11\4\0\2\10\1\0\3\10\4\0\12\11"+ - "\1\0\1\10\20\0\1\11\1\10\1\0\6\10\3\0\3\10\1\0"+ - "\4\10\3\0\2\10\1\0\1\10\1\0\2\10\3\0\2\10\3\0"+ - "\3\10\3\0\10\10\1\0\3\10\4\0\5\11\3\0\3\11\1\0"+ - "\4\11\11\0\1\11\17\0\11\11\11\0\1\10\7\0\3\11\1\0"+ - "\10\10\1\0\3\10\1\0\27\10\1\0\12\10\1\0\5\10\4\0"+ - "\7\11\1\0\3\11\1\0\4\11\7\0\2\11\11\0\2\10\4\0"+ - "\12\11\22\0\2\11\1\0\10\10\1\0\3\10\1\0\27\10\1\0"+ - "\12\10\1\0\5\10\2\0\1\11\1\10\7\11\1\0\3\11\1\0"+ - "\4\11\7\0\2\11\7\0\1\10\1\0\2\10\4\0\12\11\22\0"+ - "\2\11\1\0\10\10\1\0\3\10\1\0\27\10\1\0\20\10\4\0"+ - "\6\11\2\0\3\11\1\0\4\11\11\0\1\11\10\0\2\10\4\0"+ - "\12\11\22\0\2\11\1\0\22\10\3\0\30\10\1\0\11\10\1\0"+ - "\1\10\2\0\7\10\3\0\1\11\4\0\6\11\1\0\1\11\1\0"+ - "\10\11\22\0\2\11\15\0\60\10\1\11\2\10\7\11\4\0\10\10"+ - "\10\11\1\0\12\11\47\0\2\10\1\0\1\10\2\0\2\10\1\0"+ - "\1\10\2\0\1\10\6\0\4\10\1\0\7\10\1\0\3\10\1\0"+ - "\1\10\1\0\1\10\2\0\2\10\1\0\4\10\1\11\2\10\6\11"+ - "\1\0\2\11\1\10\2\0\5\10\1\0\1\10\1\0\6\11\2\0"+ - "\12\11\2\0\2\10\42\0\1\10\27\0\2\11\6\0\12\11\13\0"+ - "\1\11\1\0\1\11\1\0\1\11\4\0\2\11\10\10\1\0\42\10"+ - "\6\0\24\11\1\0\2\11\4\10\4\0\10\11\1\0\44\11\11\0"+ - "\1\11\71\0\42\10\1\0\5\10\1\0\2\10\1\0\7\11\3\0"+ - "\4\11\6\0\12\11\6\0\6\10\4\11\106\0\46\10\12\0\51\10"+ - "\7\0\132\10\5\0\104\10\5\0\122\10\6\0\7\10\1\0\77\10"+ - "\1\0\1\10\1\0\4\10\2\0\7\10\1\0\1\10\1\0\4\10"+ - "\2\0\47\10\1\0\1\10\1\0\4\10\2\0\37\10\1\0\1\10"+ - "\1\0\4\10\2\0\7\10\1\0\1\10\1\0\4\10\2\0\7\10"+ - "\1\0\7\10\1\0\27\10\1\0\37\10\1\0\1\10\1\0\4\10"+ - "\2\0\7\10\1\0\47\10\1\0\23\10\16\0\11\11\56\0\125\10"+ - "\14\0\u026c\10\2\0\10\10\12\0\32\10\5\0\113\10\3\0\3\10"+ - "\17\0\15\10\1\0\4\10\3\11\13\0\22\10\3\11\13\0\22\10"+ - "\2\11\14\0\15\10\1\0\3\10\1\0\2\11\14\0\64\10\40\11"+ - "\3\0\1\10\3\0\2\10\1\11\2\0\12\11\41\0\3\11\2\0"+ - "\12\11\6\0\130\10\10\0\51\10\1\11\126\0\35\10\3\0\14\11"+ - "\4\0\14\11\12\0\12\11\36\10\2\0\5\10\u038b\0\154\10\224\0"+ - "\234\10\4\0\132\10\6\0\26\10\2\0\6\10\2\0\46\10\2\0"+ - "\6\10\2\0\10\10\1\0\1\10\1\0\1\10\1\0\1\10\1\0"+ - "\37\10\2\0\65\10\1\0\7\10\1\0\1\10\3\0\3\10\1\0"+ - "\7\10\3\0\4\10\2\0\6\10\4\0\15\10\5\0\3\10\1\0"+ - "\7\10\17\0\4\11\32\0\5\11\20\0\2\10\23\0\1\10\13\0"+ - "\4\11\6\0\6\11\1\0\1\10\15\0\1\10\40\0\22\10\36\0"+ - "\15\11\4\0\1\11\3\0\6\11\27\0\1\10\4\0\1\10\2\0"+ - "\12\10\1\0\1\10\3\0\5\10\6\0\1\10\1\0\1\10\1\0"+ - "\1\10\1\0\4\10\1\0\3\10\1\0\7\10\3\0\3\10\5\0"+ - "\5\10\26\0\44\10\u0e81\0\3\10\31\0\11\10\6\11\1\0\5\10"+ - "\2\0\5\10\4\0\126\10\2\0\2\11\2\0\3\10\1\0\137\10"+ - "\5\0\50\10\4\0\136\10\21\0\30\10\70\0\20\10\u0200\0\u19b6\10"+ - "\112\0\u51a6\10\132\0\u048d\10\u0773\0\u2ba4\10\u215c\0\u012e\10\2\0\73\10"+ - "\225\0\7\10\14\0\5\10\5\0\1\10\1\11\12\10\1\0\15\10"+ - "\1\0\5\10\1\0\1\10\1\0\2\10\1\0\2\10\1\0\154\10"+ - "\41\0\u016b\10\22\0\100\10\2\0\66\10\50\0\15\10\3\0\20\11"+ - "\20\0\4\11\17\0\2\10\30\0\3\10\31\0\1\10\6\0\5\10"+ - "\1\0\207\10\2\0\1\11\4\0\1\10\13\0\12\11\7\0\32\10"+ - "\4\0\1\10\1\0\32\10\12\0\132\10\3\0\6\10\2\0\6\10"+ - "\2\0\6\10\2\0\3\10\3\0\2\10\3\0\2\10\22\0\3\11"+ - "\4\0"; + "\11\11\1\3\1\2\1\0\1\3\1\1\16\11\4\0\1\41\1\0"+ + "\1\43\1\0\1\10\6\0\1\22\1\0\1\16\1\17\1\0\1\15"+ + "\3\44\4\23\2\6\1\14\1\24\5\0\4\10\1\20\25\10\1\5"+ + "\1\25\1\7\1\0\1\13\1\0\1\36\1\12\1\27\1\40\1\21"+ + "\1\12\1\42\1\12\1\32\3\12\1\4\1\34\1\33\1\30\1\12"+ + "\1\37\1\35\1\31\3\12\1\26\2\12\4\0\41\11\2\0\4\10"+ + "\4\0\1\10\2\0\1\11\7\0\1\10\4\0\1\10\5\0\27\10"+ + "\1\0\37\10\1\0\u013f\10\31\0\162\10\4\0\14\10\16\0\5\10"+ + "\11\0\1\10\21\0\130\11\5\0\23\11\12\0\1\10\13\0\1\10"+ + "\1\0\3\10\1\0\1\10\1\0\24\10\1\0\54\10\1\0\46\10"+ + "\1\0\5\10\4\0\202\10\1\0\4\11\3\0\105\10\1\0\46\10"+ + "\2\0\2\10\6\0\20\10\41\0\46\10\2\0\1\10\7\0\47\10"+ + "\11\0\21\11\1\0\27\11\1\0\3\11\1\0\1\11\1\0\2\11"+ + "\1\0\1\11\13\0\33\10\5\0\3\10\15\0\4\11\14\0\6\11"+ + "\13\0\32\10\5\0\13\10\16\11\7\0\12\11\4\0\2\10\1\11"+ + "\143\10\1\0\1\10\10\11\1\0\6\11\2\10\2\11\1\0\4\11"+ + "\2\10\12\11\3\10\2\0\1\10\17\0\1\11\1\10\1\11\36\10"+ + "\33\11\2\0\3\10\60\0\46\10\13\11\1\10\u014f\0\3\11\66\10"+ + "\2\0\1\11\1\10\20\11\2\0\1\10\4\11\3\0\12\10\2\11"+ + "\2\0\12\11\21\0\3\11\1\0\10\10\2\0\2\10\2\0\26\10"+ + "\1\0\7\10\1\0\1\10\3\0\4\10\2\0\1\11\1\10\7\11"+ + "\2\0\2\11\2\0\3\11\11\0\1\11\4\0\2\10\1\0\3\10"+ + "\2\11\2\0\12\11\4\10\15\0\3\11\1\0\6\10\4\0\2\10"+ + "\2\0\26\10\1\0\7\10\1\0\2\10\1\0\2\10\1\0\2\10"+ + "\2\0\1\11\1\0\5\11\4\0\2\11\2\0\3\11\13\0\4\10"+ + "\1\0\1\10\7\0\14\11\3\10\14\0\3\11\1\0\11\10\1\0"+ + "\3\10\1\0\26\10\1\0\7\10\1\0\2\10\1\0\5\10\2\0"+ + "\1\11\1\10\10\11\1\0\3\11\1\0\3\11\2\0\1\10\17\0"+ + "\2\10\2\11\2\0\12\11\1\0\1\10\17\0\3\11\1\0\10\10"+ + "\2\0\2\10\2\0\26\10\1\0\7\10\1\0\2\10\1\0\5\10"+ + "\2\0\1\11\1\10\6\11\3\0\2\11\2\0\3\11\10\0\2\11"+ + "\4\0\2\10\1\0\3\10\4\0\12\11\1\0\1\10\20\0\1\11"+ + "\1\10\1\0\6\10\3\0\3\10\1\0\4\10\3\0\2\10\1\0"+ + "\1\10\1\0\2\10\3\0\2\10\3\0\3\10\3\0\10\10\1\0"+ + "\3\10\4\0\5\11\3\0\3\11\1\0\4\11\11\0\1\11\17\0"+ + "\11\11\11\0\1\10\7\0\3\11\1\0\10\10\1\0\3\10\1\0"+ + "\27\10\1\0\12\10\1\0\5\10\4\0\7\11\1\0\3\11\1\0"+ + "\4\11\7\0\2\11\11\0\2\10\4\0\12\11\22\0\2\11\1\0"+ + "\10\10\1\0\3\10\1\0\27\10\1\0\12\10\1\0\5\10\2\0"+ + "\1\11\1\10\7\11\1\0\3\11\1\0\4\11\7\0\2\11\7\0"+ + "\1\10\1\0\2\10\4\0\12\11\22\0\2\11\1\0\10\10\1\0"+ + "\3\10\1\0\27\10\1\0\20\10\4\0\6\11\2\0\3\11\1\0"+ + "\4\11\11\0\1\11\10\0\2\10\4\0\12\11\22\0\2\11\1\0"+ + "\22\10\3\0\30\10\1\0\11\10\1\0\1\10\2\0\7\10\3\0"+ + "\1\11\4\0\6\11\1\0\1\11\1\0\10\11\22\0\2\11\15\0"+ + "\60\10\1\11\2\10\7\11\4\0\10\10\10\11\1\0\12\11\47\0"+ + "\2\10\1\0\1\10\2\0\2\10\1\0\1\10\2\0\1\10\6\0"+ + "\4\10\1\0\7\10\1\0\3\10\1\0\1\10\1\0\1\10\2\0"+ + "\2\10\1\0\4\10\1\11\2\10\6\11\1\0\2\11\1\10\2\0"+ + "\5\10\1\0\1\10\1\0\6\11\2\0\12\11\2\0\2\10\42\0"+ + "\1\10\27\0\2\11\6\0\12\11\13\0\1\11\1\0\1\11\1\0"+ + "\1\11\4\0\2\11\10\10\1\0\42\10\6\0\24\11\1\0\2\11"+ + "\4\10\4\0\10\11\1\0\44\11\11\0\1\11\71\0\42\10\1\0"+ + "\5\10\1\0\2\10\1\0\7\11\3\0\4\11\6\0\12\11\6\0"+ + "\6\10\4\11\106\0\46\10\12\0\51\10\7\0\132\10\5\0\104\10"+ + "\5\0\122\10\6\0\7\10\1\0\77\10\1\0\1\10\1\0\4\10"+ + "\2\0\7\10\1\0\1\10\1\0\4\10\2\0\47\10\1\0\1\10"+ + "\1\0\4\10\2\0\37\10\1\0\1\10\1\0\4\10\2\0\7\10"+ + "\1\0\1\10\1\0\4\10\2\0\7\10\1\0\7\10\1\0\27\10"+ + "\1\0\37\10\1\0\1\10\1\0\4\10\2\0\7\10\1\0\47\10"+ + "\1\0\23\10\16\0\11\11\56\0\125\10\14\0\u026c\10\2\0\10\10"+ + "\12\0\32\10\5\0\113\10\3\0\3\10\17\0\15\10\1\0\4\10"+ + "\3\11\13\0\22\10\3\11\13\0\22\10\2\11\14\0\15\10\1\0"+ + "\3\10\1\0\2\11\14\0\64\10\40\11\3\0\1\10\3\0\2\10"+ + "\1\11\2\0\12\11\41\0\3\11\2\0\12\11\6\0\130\10\10\0"+ + "\51\10\1\11\126\0\35\10\3\0\14\11\4\0\14\11\12\0\12\11"+ + "\36\10\2\0\5\10\u038b\0\154\10\224\0\234\10\4\0\132\10\6\0"+ + "\26\10\2\0\6\10\2\0\46\10\2\0\6\10\2\0\10\10\1\0"+ + "\1\10\1\0\1\10\1\0\1\10\1\0\37\10\2\0\65\10\1\0"+ + "\7\10\1\0\1\10\3\0\3\10\1\0\7\10\3\0\4\10\2\0"+ + "\6\10\4\0\15\10\5\0\3\10\1\0\7\10\17\0\4\11\32\0"+ + "\5\11\20\0\2\10\23\0\1\10\13\0\4\11\6\0\6\11\1\0"+ + "\1\10\15\0\1\10\40\0\22\10\36\0\15\11\4\0\1\11\3\0"+ + "\6\11\27\0\1\10\4\0\1\10\2\0\12\10\1\0\1\10\3\0"+ + "\5\10\6\0\1\10\1\0\1\10\1\0\1\10\1\0\4\10\1\0"+ + "\3\10\1\0\7\10\3\0\3\10\5\0\5\10\26\0\44\10\u0e81\0"+ + "\3\10\31\0\11\10\6\11\1\0\5\10\2\0\5\10\4\0\126\10"+ + "\2\0\2\11\2\0\3\10\1\0\137\10\5\0\50\10\4\0\136\10"+ + "\21\0\30\10\70\0\20\10\u0200\0\u19b6\10\112\0\u51a6\10\132\0\u048d\10"+ + "\u0773\0\u2ba4\10\u215c\0\u012e\10\2\0\73\10\225\0\7\10\14\0\5\10"+ + "\5\0\1\10\1\11\12\10\1\0\15\10\1\0\5\10\1\0\1\10"+ + "\1\0\2\10\1\0\2\10\1\0\154\10\41\0\u016b\10\22\0\100\10"+ + "\2\0\66\10\50\0\15\10\3\0\20\11\20\0\4\11\17\0\2\10"+ + "\30\0\3\10\31\0\1\10\6\0\5\10\1\0\207\10\2\0\1\11"+ + "\4\0\1\10\13\0\12\11\7\0\32\10\4\0\1\10\1\0\32\10"+ + "\12\0\132\10\3\0\6\10\2\0\6\10\2\0\6\10\2\0\3\10"+ + "\3\0\2\10\3\0\2\10\22\0\3\11\4\0"; /** * Translates characters to character classes @@ -140,13 +141,15 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\3\0\2\1\1\2\1\1\1\3\2\4\1\1\1\5"+ - "\2\6\1\7\1\10\1\7\2\1\1\11\1\12\1\0"+ - "\1\13\1\14\2\3\1\0\1\10\2\0\2\11\1\3"+ - "\1\0\1\10\2\0\1\15"; + "\3\0\2\1\1\2\1\1\1\2\1\3\2\4\1\1"+ + "\1\5\2\6\1\7\1\10\1\7\2\1\1\11\1\12"+ + "\1\0\1\13\1\2\1\14\2\3\1\0\1\10\2\0"+ + "\2\11\1\2\1\3\1\0\1\10\1\0\1\2\1\0"+ + "\1\2\1\15\15\2\1\0\2\2\2\0\2\2\1\16"+ + "\2\2"; private static int [] zzUnpackAction() { - int [] result = new int[38]; + int [] result = new int[66]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -171,14 +174,18 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\27\0\56\0\105\0\134\0\163\0\212\0\241"+ - "\0\270\0\105\0\317\0\105\0\346\0\105\0\375\0\u0114"+ - "\0\u012b\0\u0142\0\u0159\0\u0170\0\105\0\212\0\105\0\105"+ - "\0\u0187\0\u019e\0\u01b5\0\u01cc\0\u01e3\0\u0159\0\u01fa\0\105"+ - "\0\105\0\u0211\0\u0228\0\u0228\0\u023f\0\105"; + "\0\0\0\45\0\112\0\157\0\224\0\271\0\336\0\u0103"+ + "\0\u0128\0\u014d\0\157\0\u0172\0\157\0\u0197\0\157\0\u01bc"+ + "\0\u01e1\0\u0206\0\u022b\0\u0250\0\u0275\0\157\0\336\0\157"+ + "\0\u029a\0\157\0\u02bf\0\u02e4\0\u0309\0\u032e\0\u0353\0\u0250"+ + "\0\u0378\0\157\0\u039d\0\157\0\u03c2\0\u03e7\0\u03e7\0\u040c"+ + "\0\u0431\0\u0456\0\157\0\u047b\0\u04a0\0\u04c5\0\u04ea\0\u050f"+ + "\0\u0534\0\u0559\0\u057e\0\u05a3\0\u05c8\0\u05ed\0\u0612\0\u0637"+ + "\0\u065c\0\u0681\0\u06a6\0\u06cb\0\u06f0\0\u0715\0\u073a\0\157"+ + "\0\u075f\0\u0784"; private static int [] zzUnpackRowMap() { - int [] result = new int[38]; + int [] result = new int[66]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -202,31 +209,105 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { private static final String ZZ_TRANS_PACKED_0 = "\3\4\1\5\1\6\3\4\1\7\1\4\1\6\1\7"+ - "\4\4\1\7\1\6\5\4\1\10\1\11\1\12\22\10"+ - "\1\13\1\14\1\4\1\15\1\16\1\4\1\17\1\4"+ - "\1\20\1\4\1\21\1\4\2\21\1\4\1\20\1\22"+ - "\1\23\2\21\1\4\1\20\1\24\1\4\1\25\32\0"+ - "\1\5\27\0\1\6\1\0\1\6\1\0\2\26\2\6"+ - "\1\27\1\6\2\0\1\26\1\6\1\0\1\6\7\0"+ - "\1\26\1\0\1\26\1\0\4\26\1\27\1\26\2\0"+ - "\2\26\1\0\1\26\3\0\1\10\2\0\22\10\4\0"+ - "\1\12\24\0\2\30\1\0\12\30\1\31\5\30\1\32"+ - "\3\30\2\0\1\16\30\0\1\21\1\33\1\21\1\0"+ - "\4\21\1\0\1\21\2\0\2\21\1\0\1\21\11\0"+ - "\1\20\6\0\1\20\1\0\1\34\2\35\1\0\1\20"+ - "\7\0\1\21\1\0\1\21\1\0\4\21\1\0\1\21"+ - "\2\0\2\21\1\0\1\21\11\0\1\20\6\0\1\20"+ - "\1\0\1\36\3\0\1\20\11\0\1\34\6\0\1\34"+ - "\5\0\1\34\3\0\1\24\1\37\1\40\24\24\15\0"+ - "\1\32\5\0\1\32\20\0\1\41\5\0\1\41\11\0"+ - "\1\42\6\0\1\42\5\0\1\42\11\0\1\34\6\0"+ - "\1\34\2\0\2\35\1\0\1\34\11\0\1\43\6\0"+ - "\1\43\1\44\3\0\1\44\1\43\5\0\1\40\32\0"+ - "\1\42\1\45\5\0\1\42\5\0\1\42\11\0\1\43"+ - "\6\0\1\43\5\0\1\43\31\0\1\46"; + "\4\4\1\7\1\10\4\4\13\6\1\5\1\6\2\4"+ + "\1\11\1\12\1\13\22\11\1\14\15\11\1\15\1\11"+ + "\1\4\1\16\1\17\1\4\1\20\1\4\1\21\1\4"+ + "\1\22\1\4\2\22\1\4\1\21\1\23\1\24\2\22"+ + "\1\4\1\21\1\25\1\4\13\22\1\4\1\22\1\26"+ + "\1\21\50\0\1\5\35\0\1\5\7\0\1\6\1\0"+ + "\1\6\1\0\2\27\2\6\1\30\1\6\2\0\1\27"+ + "\1\6\1\0\1\6\2\0\13\6\1\0\1\6\1\0"+ + "\1\6\4\0\1\27\1\0\1\27\1\0\4\27\1\30"+ + "\1\27\2\0\2\27\1\0\1\27\2\0\13\27\1\0"+ + "\1\27\1\0\1\27\4\0\1\6\1\0\1\6\1\0"+ + "\2\27\2\6\1\30\1\6\2\0\1\27\1\6\1\0"+ + "\1\6\2\0\1\31\12\6\1\0\1\6\1\0\1\6"+ + "\1\11\2\0\22\11\1\0\15\11\1\0\1\11\2\0"+ + "\1\13\42\0\2\32\1\0\12\32\1\33\5\32\1\34"+ + "\20\32\1\33\2\0\1\17\46\0\1\22\1\35\1\22"+ + "\1\0\4\22\1\0\1\22\2\0\2\22\1\0\1\22"+ + "\2\0\13\22\1\0\1\22\1\0\1\22\6\0\1\21"+ + "\6\0\1\21\1\0\1\36\2\37\1\0\1\21\20\0"+ + "\1\21\4\0\1\22\1\0\1\22\1\0\4\22\1\0"+ + "\1\22\2\0\2\22\1\0\1\22\2\0\13\22\1\0"+ + "\1\22\1\0\1\22\6\0\1\21\6\0\1\21\1\0"+ + "\1\40\3\0\1\21\20\0\1\21\6\0\1\36\6\0"+ + "\1\36\5\0\1\36\20\0\1\36\1\25\1\41\1\42"+ + "\42\25\4\0\1\6\1\0\1\6\1\0\2\27\2\6"+ + "\1\30\1\6\2\0\1\27\1\6\1\0\1\6\2\0"+ + "\1\6\1\43\11\6\1\0\1\6\1\0\1\6\15\0"+ + "\1\34\5\0\1\34\20\0\1\34\15\0\1\44\5\0"+ + "\1\44\20\0\1\44\6\0\1\45\6\0\1\45\5\0"+ + "\1\45\20\0\1\45\6\0\1\36\6\0\1\36\2\0"+ + "\2\37\1\0\1\36\20\0\1\36\6\0\1\46\6\0"+ + "\1\46\1\47\3\0\1\47\1\46\20\0\1\46\2\0"+ + "\1\42\46\0\1\6\1\0\1\6\1\0\2\27\2\6"+ + "\1\30\1\6\2\0\1\27\1\50\1\0\1\6\2\0"+ + "\13\6\1\0\1\6\1\0\1\6\6\0\1\45\1\51"+ + "\5\0\1\45\5\0\1\45\20\0\1\45\6\0\1\46"+ + "\6\0\1\46\5\0\1\46\20\0\1\46\4\0\1\6"+ + "\1\0\1\6\1\0\2\27\2\6\1\30\1\6\2\0"+ + "\1\27\1\6\1\0\1\6\2\0\2\6\1\52\10\6"+ + "\1\0\1\6\1\0\1\6\43\0\1\53\5\0\1\6"+ + "\1\0\1\6\1\0\2\27\2\6\1\30\1\6\2\0"+ + "\1\27\1\6\1\0\1\6\2\0\3\6\1\54\7\6"+ + "\1\0\1\6\1\0\1\6\4\0\1\6\1\0\1\6"+ + "\1\0\2\27\2\6\1\30\1\6\2\0\1\27\1\6"+ + "\1\0\1\6\2\0\4\6\1\55\6\6\1\0\1\6"+ + "\1\0\1\6\4\0\1\6\1\0\1\6\1\0\2\27"+ + "\2\6\1\30\1\6\2\0\1\27\1\6\1\0\1\6"+ + "\2\0\5\6\1\56\5\6\1\0\1\6\1\0\1\6"+ + "\4\0\1\6\1\0\1\6\1\0\2\27\2\6\1\30"+ + "\1\6\2\0\1\27\1\6\1\0\1\6\2\0\6\6"+ + "\1\57\4\6\1\0\1\6\1\0\1\6\4\0\1\6"+ + "\1\0\1\6\1\0\2\27\2\6\1\30\1\6\2\0"+ + "\1\27\1\60\1\0\1\6\2\0\3\6\1\61\3\6"+ + "\1\62\3\6\1\0\1\6\1\0\1\6\4\0\1\6"+ + "\1\0\1\6\1\0\2\27\2\6\1\30\1\6\2\0"+ + "\1\27\1\6\1\0\1\6\2\0\6\6\1\63\4\6"+ + "\1\0\1\6\1\0\1\6\4\0\1\6\1\0\1\6"+ + "\1\0\2\27\2\6\1\30\1\6\2\0\1\27\1\6"+ + "\1\0\1\6\2\0\10\6\1\64\2\6\1\0\1\6"+ + "\1\0\1\6\4\0\1\6\1\0\1\6\1\0\2\27"+ + "\2\6\1\30\1\6\2\0\1\27\1\6\1\0\1\6"+ + "\2\0\3\6\1\65\7\6\1\0\1\6\1\0\1\6"+ + "\4\0\1\6\1\0\1\6\1\0\2\27\2\6\1\30"+ + "\1\6\2\0\1\27\1\6\1\0\1\6\2\0\12\6"+ + "\1\66\1\0\1\6\1\0\1\6\4\0\1\6\1\0"+ + "\1\6\1\0\2\27\2\6\1\30\1\6\2\0\1\27"+ + "\1\6\1\0\1\6\2\0\11\6\1\67\1\6\1\0"+ + "\1\6\1\0\1\6\4\0\1\6\1\0\1\6\1\0"+ + "\2\27\2\6\1\30\1\6\2\0\1\27\1\6\1\0"+ + "\1\6\2\0\10\6\1\70\2\6\1\0\1\6\1\0"+ + "\1\6\4\0\1\6\1\0\1\6\1\0\2\27\2\6"+ + "\1\30\1\6\2\0\1\27\1\6\1\0\1\6\2\0"+ + "\13\6\1\71\1\6\1\0\1\6\4\0\1\6\1\0"+ + "\1\6\1\0\2\27\2\6\1\30\1\6\2\0\1\27"+ + "\1\6\1\0\1\6\2\0\13\6\1\0\1\72\1\0"+ + "\1\6\4\0\1\6\1\0\1\6\1\0\2\27\2\6"+ + "\1\30\1\6\2\0\1\27\1\6\1\0\1\6\2\0"+ + "\11\6\1\73\1\6\1\0\1\6\1\0\1\6\6\0"+ + "\1\74\6\0\1\75\5\0\1\74\20\0\1\74\4\0"+ + "\1\6\1\0\1\6\1\0\2\27\2\6\1\30\1\6"+ + "\2\0\1\27\1\76\1\0\1\6\2\0\13\6\1\0"+ + "\1\6\1\0\1\6\4\0\1\6\1\0\1\6\1\0"+ + "\2\27\2\6\1\30\1\6\2\0\1\27\1\6\1\0"+ + "\1\6\2\0\3\6\1\77\7\6\1\0\1\6\1\0"+ + "\1\6\6\0\1\74\5\0\1\100\1\74\5\0\1\74"+ + "\20\0\1\74\14\0\1\100\34\0\1\6\1\0\1\6"+ + "\1\0\2\27\2\6\1\30\1\6\2\0\1\27\1\6"+ + "\1\0\1\6\2\0\3\6\1\66\7\6\1\0\1\6"+ + "\1\0\1\6\4\0\1\6\1\0\1\101\1\0\2\27"+ + "\2\6\1\30\1\102\2\0\1\27\1\6\1\0\1\101"+ + "\2\0\13\6\1\0\1\6\1\0\1\101\4\0\1\6"+ + "\1\0\1\101\1\0\2\27\2\6\1\100\1\101\2\0"+ + "\1\27\1\6\1\0\1\101\2\0\13\6\1\0\1\6"+ + "\1\0\1\101\4\0\1\6\1\0\1\6\1\0\2\27"+ + "\2\6\1\100\1\6\2\0\1\27\1\6\1\0\1\6"+ + "\2\0\13\6\1\0\1\6\1\0\1\6"; private static int [] zzUnpackTrans() { - int [] result = new int[598]; + int [] result = new int[1961]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -264,12 +345,14 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\5\1\1\11\1\1\1\11\1\1\1\11"+ - "\6\1\1\11\1\0\2\11\2\1\1\0\1\1\2\0"+ - "\1\1\2\11\1\0\1\1\2\0\1\11"; + "\3\0\1\11\6\1\1\11\1\1\1\11\1\1\1\11"+ + "\6\1\1\11\1\0\1\11\1\1\1\11\2\1\1\0"+ + "\1\1\2\0\1\1\1\11\1\1\1\11\1\0\1\1"+ + "\1\0\1\1\1\0\1\1\1\11\15\1\1\0\2\1"+ + "\2\0\2\1\1\11\2\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[38]; + int [] result = new int[66]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -387,7 +470,7 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 1702) { + while (i < 1734) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -665,63 +748,67 @@ public final class Flasm3Lexer extends DefaultJFlexLexer { return token(TokenType.STRING, tokenStart, tokenLength + 1); } } - case 14: break; + case 15: break; case 9: { yybegin(YYINITIAL); return token(TokenType.COMMENT); } - case 15: break; + case 16: break; case 4: { yybegin(YYINITIAL); return token(TokenType.ERROR,tokenStart, tokenLength); } - case 16: break; + case 17: break; + case 14: + { return token(TokenType.KEYWORD); + } + case 18: break; case 11: { return token(TokenType.IDENTIFIER,yychar,yylength()-1); } - case 17: break; + case 19: break; case 10: { yybegin(STRING); tokenStart = yychar; tokenLength = 1; isMultiname=false; } - case 18: break; + case 20: break; case 13: { isMultiname=true; yybegin(STRING); tokenStart = yychar; tokenLength = yylength(); } - case 19: break; + case 21: break; case 12: { tokenLength += 2; } - case 20: break; + case 22: break; case 7: { return token(TokenType.IDENTIFIER); } - case 21: break; + case 23: break; case 2: { yybegin(PARAMETERS); return token(TokenType.KEYWORD); } - case 22: break; + case 24: break; case 8: { return token(TokenType.NUMBER); } - case 23: break; + case 25: break; case 6: { yybegin(YYINITIAL); } - case 24: break; + case 26: break; case 1: { } - case 25: break; + case 27: break; case 3: { tokenLength += yylength(); } - case 26: break; + case 28: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/jsyntaxpane-0.9.5.jar b/trunk/libsrc/jsyntaxpane/jsyntaxpane/target/jsyntaxpane-0.9.5.jar index e20d1fafe27544f7c06cd64ab750b2f625d2426b..911a4c945b949a190dbd4990a761ac6f27362736 100644 GIT binary patch delta 25566 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 SIYlZ(YScFgi9bqmK>0sKSDp3% diff --git a/trunk/manifest.mf b/trunk/manifest.mf new file mode 100644 index 000000000..1574df4a2 --- /dev/null +++ b/trunk/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/trunk/nbbuild.xml b/trunk/nbbuild.xml new file mode 100644 index 000000000..8c5c8b9df --- /dev/null +++ b/trunk/nbbuild.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project ASDec. + + + diff --git a/trunk/nbproject/build-impl.xml b/trunk/nbproject/build-impl.xml new file mode 100644 index 000000000..ca54e3081 --- /dev/null +++ b/trunk/nbproject/build-impl.xml @@ -0,0 +1,891 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/trunk/nbproject/configs/Basic_run.properties b/trunk/nbproject/configs/Basic_run.properties new file mode 100644 index 000000000..61ccf4161 --- /dev/null +++ b/trunk/nbproject/configs/Basic_run.properties @@ -0,0 +1,2 @@ +$label=Basic run +main.class=com.jpexs.asdec.Main diff --git a/trunk/nbproject/configs/Proxy.properties b/trunk/nbproject/configs/Proxy.properties new file mode 100644 index 000000000..b7ea418bf --- /dev/null +++ b/trunk/nbproject/configs/Proxy.properties @@ -0,0 +1 @@ +main.class=com.jpexs.asdec.Main diff --git a/trunk/nbproject/configs/as3.properties b/trunk/nbproject/configs/as3.properties new file mode 100644 index 000000000..b7ea418bf --- /dev/null +++ b/trunk/nbproject/configs/as3.properties @@ -0,0 +1 @@ +main.class=com.jpexs.asdec.Main diff --git a/trunk/nbproject/configs/as3_secure.swf.properties b/trunk/nbproject/configs/as3_secure.swf.properties new file mode 100644 index 000000000..b7ea418bf --- /dev/null +++ b/trunk/nbproject/configs/as3_secure.swf.properties @@ -0,0 +1 @@ +main.class=com.jpexs.asdec.Main diff --git a/trunk/nbproject/genfiles.properties b/trunk/nbproject/genfiles.properties new file mode 100644 index 000000000..6735c9257 --- /dev/null +++ b/trunk/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +nbbuild.xml.data.CRC32=6767af7d +nbbuild.xml.script.CRC32=36cc2633 +nbbuild.xml.stylesheet.CRC32=28e38971@1.38.2.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6767af7d +nbproject/build-impl.xml.script.CRC32=94147f4c +nbproject/build-impl.xml.stylesheet.CRC32=f33e10ff@1.38.2.45 diff --git a/trunk/nbproject/project.properties b/trunk/nbproject/project.properties new file mode 100644 index 000000000..f1339e47c --- /dev/null +++ b/trunk/nbproject/project.properties @@ -0,0 +1,85 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=ASDec +application.vendor=JPEXS +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +buildfile=nbbuild.xml +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/ASDec.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +file.reference.emma.jar=testlib\\emma.jar +file.reference.emma_ant.jar=testlib\\emma_ant.jar +file.reference.jpproxy.jar=lib\\jpproxy.jar +file.reference.jsyntaxpane-0.9.5.jar=lib\\jsyntaxpane-0.9.5.jar +file.reference.junit-4.8.2.jar=testlib\\junit-4.8.2.jar +file.reference.trunk-src=src +file.reference.trunk-test=test +includes=** +jar.compress=false +javac.classpath=\ + ${file.reference.jpproxy.jar}:\ + ${file.reference.jsyntaxpane-0.9.5.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${file.reference.emma.jar}:\ + ${file.reference.emma_ant.jar}:\ + ${file.reference.junit-4.8.2.jar} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=${file.reference.trunk-src} +test.src.dir=${file.reference.trunk-test} +project.license=gpl20 \ No newline at end of file diff --git a/trunk/nbproject/project.xml b/trunk/nbproject/project.xml new file mode 100644 index 000000000..5d8f89fff --- /dev/null +++ b/trunk/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + ASDec + + + + + + + + + diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java index d43756d28..6a1b958af 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/AVM2Code.java @@ -337,8 +337,12 @@ public class AVM2Code { return null; } - public String toASMSource(ConstantPool constants) { + public String toASMSource(ConstantPool constants,MethodBody body) { String ret = ""; + for(int e=0;e offsets = new ArrayList(); for (AVM2Instruction ins : code) { offsets.addAll(ins.getOffsets()); @@ -348,6 +352,17 @@ public class AVM2Code { if (offsets.contains(ofs)) { ret += "ofs" + Helper.formatAddress(ofs) + ":"; } + for(int e=0;e offsetItems = new ArrayList(); List labelItems = new ArrayList(); + List exceptions=new ArrayList(); + List exceptionIndices=new ArrayList(); int offset = 0; Flasm3Lexer lexer = new Flasm3Lexer(is); @@ -79,6 +83,33 @@ public class ASM3Parser { AVM2Instruction lastIns = null; do { symb = lexer.yylex(); + if (symb.type == ParsedSymbol.TYPE_EXCEPTION_START){ + int exIndex=(Integer)symb.value; + int listIndex=exceptionIndices.indexOf(exIndex); + if(listIndex==-1){ + throw new ParseException("Undefinex exception index", lexer.yyline()); + } + exceptions.get(listIndex).start=offset; + continue; + } + if (symb.type == ParsedSymbol.TYPE_EXCEPTION_END){ + int exIndex=(Integer)symb.value; + int listIndex=exceptionIndices.indexOf(exIndex); + if(listIndex==-1){ + throw new ParseException("Undefinex exception index", lexer.yyline()); + } + exceptions.get(listIndex).end=offset; + continue; + } + if (symb.type == ParsedSymbol.TYPE_EXCEPTION_TARGET){ + int exIndex=(Integer)symb.value; + int listIndex=exceptionIndices.indexOf(exIndex); + if(listIndex==-1){ + throw new ParseException("Undefinex exception index", lexer.yyline()); + } + exceptions.get(listIndex).target=offset; + continue; + } if (symb.type == ParsedSymbol.TYPE_EOF) break; if (symb.type == ParsedSymbol.TYPE_COMMENT) { if (lastIns != null) { @@ -87,6 +118,26 @@ public class ASM3Parser { continue; } if (symb.type == ParsedSymbol.TYPE_INSTRUCTION_NAME) { + if(((String)symb.value).toLowerCase().equals("exception")){ + ParsedSymbol exIndex = lexer.yylex(); + if (exIndex.type != ParsedSymbol.TYPE_INTEGER) { + throw new ParseException("Index expected", lexer.yyline()); + } + ParsedSymbol exName = lexer.yylex(); + if (exName.type != ParsedSymbol.TYPE_MULTINAME) { + throw new ParseException("Multiname expected", lexer.yyline()); + } + ParsedSymbol exType = lexer.yylex(); + if (exType.type != ParsedSymbol.TYPE_MULTINAME) { + throw new ParseException("Multiname expected", lexer.yyline()); + } + ABCException ex=new ABCException(); + ex.name_index=(int) (long) (Long)exName.value; + ex.type_index=(int) (long) (Long)exType.value; + exceptions.add(ex); + exceptionIndices.add((int)(long)(Long)exIndex.value); + continue; + } boolean insFound = false; for (InstructionDefinition def : AVM2Code.instructionSet) { if (def.instructionName.equals((String) symb.value)) { @@ -251,207 +302,10 @@ public class ASM3Parser { } } } - - /* BufferedReader br = new BufferedReader(new InputStreamReader(is)); - String s = ""; - Pattern patInsName = Pattern.compile("^([a-z0-9_]+) "); - Pattern patLabelName = Pattern.compile("^([a-zA-Z_0-9]+): "); - Pattern patInt = Pattern.compile("^([+-]?[0-9]+) "); - Pattern patDouble = Pattern.compile("^([+-]?[0-9e.]+) "); - Pattern patMultiname = Pattern.compile("^m\\[([0-9]+)\\]\"[^\"]*\" "); - Pattern patString = Pattern.compile("\"([^\"]*)\" "); - Pattern patofs = Pattern.compile("^([a-zA-Z_0-9]+) "); - - - long line = 0; - - while ((s = br.readLine()) != null) { - line++; - s += " "; - Matcher m = patInsName.matcher(s); - if (m.find()) { - String insName = m.group(1); - boolean insFound = false; - for (InstructionDefinition def : AVM2Code.instructionSet) { - if (def.instructionName.equals(insName)) { - insFound = true; - s = s.substring(insName.length() + 1); - List operandsList = new ArrayList(); - - for (int i = 0; i < def.operands.length; i++) { - switch (def.operands[i]) { - case AVM2Code.DAT_MULTINAME_INDEX: - m = patMultiname.matcher(s); - if (m.find()) { - operandsList.add(Integer.parseInt(m.group(1))); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid multiname", line); - } - break; - case AVM2Code.DAT_STRING_INDEX: - m = patString.matcher(s); - if (m.find()) { - String str = m.group(1); - int sid = constants.getStringId(str); - if (sid == 0) { - if((missingHandler!=null)&&(missingHandler.missingString(str))){ - sid=constants.addString(str); - }else{ - throw new ParseException("Unknown String", line); - } - } - operandsList.add(sid); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid String", line); - } - break; - case AVM2Code.DAT_INT_INDEX: - m = patInt.matcher(s); - if (m.find()) { - long intVal=Integer.parseInt(m.group(1)); - int iid = constants.getIntId(intVal); - if (iid == 0) { - if((missingHandler!=null)&&(missingHandler.missingInt(intVal))){ - iid=constants.addInt(intVal); - }else{ - throw new ParseException("Unknown int", line); - } - } - operandsList.add(iid); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid int value", line); - } - break; - case AVM2Code.DAT_UINT_INDEX: - m = patInt.matcher(s); - if (m.find()) { - long intVal=Integer.parseInt(m.group(1)); - int iid = constants.getUIntId(intVal); - if (iid == 0) { - if((missingHandler!=null)&&(missingHandler.missingUInt(intVal))){ - iid=constants.addUInt(intVal); - }else{ - throw new ParseException("Unknown uint", line); - } - } - operandsList.add(iid); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid uint value", line); - } - break; - case AVM2Code.DAT_DOUBLE_INDEX: - m = patDouble.matcher(s); - if (m.find()) { - double doubleVal=Double.parseDouble(m.group(1)); - int did = constants.getDoubleId(doubleVal); - if (did == 0) { - if((missingHandler!=null)&&(missingHandler.missingDouble(doubleVal))){ - did=constants.addDouble(doubleVal); - }else{ - throw new ParseException("Unknown double", line); - } - } - operandsList.add(did); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid double value", line); - } - break; - case AVM2Code.DAT_OFFSET: - m = patofs.matcher(s); - if (m.find()) { - offsetItems.add(new OffsetItem(m.group(1), code.code.size(), i)); - operandsList.add(0); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid offset value", line); - } - break; - case AVM2Code.DAT_CASE_BASEOFFSET: - m = patofs.matcher(s); - if (m.find()) { - offsetItems.add(new CaseOffsetItem(m.group(1), code.code.size(), i)); - operandsList.add(0); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid offset value", line); - } - break; - case AVM2Code.OPT_CASE_OFFSETS: - m = patInt.matcher(s); - if (m.find()) { - int patCount = Integer.parseInt(m.group(1)); - operandsList.add(patCount); - s = s.substring(m.group(0).length()); - m = patofs.matcher(s); - int k = 1; - for (int c = 0; c <= patCount; c++) { - if (m.find()) { - offsetItems.add(new CaseOffsetItem(m.group(1), code.code.size(), i + k)); - operandsList.add(0); - s = s.substring(m.group(0).length()); - m = patofs.matcher(s); - k++; - } else { - throw new ParseException("Invalid case count", line); - } - } - } else { - throw new ParseException("Invalid case count", line); - } - break; - default: - m = patInt.matcher(s); - if (m.find()) { - operandsList.add(Integer.parseInt(m.group(1))); - s = s.substring(m.group(0).length()); - } else { - throw new ParseException("Invalid value", line); - } - } - } - - int operands[] = new int[operandsList.size()]; - for (int i = 0; i < operandsList.size(); i++) { - operands[i] = operandsList.get(i); - } - AVM2Instruction ins = new AVM2Instruction(offset, def, operands, new byte[0]); - code.code.add(ins); - offset += ins.getBytes().length; - break; - } - } - if (!insFound) { - throw new ParseException("Invalid instruction name:" + insName, line); - } - } else { - m = patLabelName.matcher(s); - if (m.find()) { - labelItems.add(new LabelItem(m.group(1), offset)); - } else { - throw new ParseException("Invalid instruction name", line); - } - } + body.exceptions=new ABCException[exceptions.size()]; + for(int e=0;eJFlex 1.4.3 - * on 18.8.10 12:17 from the specification file + * on 19.9.10 10:36 from the specification file * D:/Dokumenty/Programovani/JavaSE/ASDec/trunk/src/com/jpexs/asdec/abc/avm2/parser/flasm3.flex */ public final class Flasm3Lexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int STRING = 2; - public static final int YYINITIAL = 0; - public static final int PARAMETERS = 4; + /** 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 - }; + /** + * 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\12\1\4\1\2\1\0\1\4\1\1\16\12\4\0\1\4\1\0" + - "\1\26\1\0\1\11\2\0\1\34\3\0\1\23\1\0\1\17\1\20" + - "\1\0\1\16\3\35\4\24\2\7\1\15\1\3\5\0\4\11\1\21" + - "\25\11\1\6\1\25\1\10\1\0\1\14\1\0\1\13\1\27\2\13" + - "\1\22\1\32\6\13\1\5\1\31\3\13\1\33\1\13\1\30\6\13" + - "\4\0\41\12\2\0\4\11\4\0\1\11\2\0\1\12\7\0\1\11" + - "\4\0\1\11\5\0\27\11\1\0\37\11\1\0\u013f\11\31\0\162\11" + - "\4\0\14\11\16\0\5\11\11\0\1\11\21\0\130\12\5\0\23\12" + - "\12\0\1\11\13\0\1\11\1\0\3\11\1\0\1\11\1\0\24\11" + - "\1\0\54\11\1\0\46\11\1\0\5\11\4\0\202\11\1\0\4\12" + - "\3\0\105\11\1\0\46\11\2\0\2\11\6\0\20\11\41\0\46\11" + - "\2\0\1\11\7\0\47\11\11\0\21\12\1\0\27\12\1\0\3\12" + - "\1\0\1\12\1\0\2\12\1\0\1\12\13\0\33\11\5\0\3\11" + - "\15\0\4\12\14\0\6\12\13\0\32\11\5\0\13\11\16\12\7\0" + - "\12\12\4\0\2\11\1\12\143\11\1\0\1\11\10\12\1\0\6\12" + - "\2\11\2\12\1\0\4\12\2\11\12\12\3\11\2\0\1\11\17\0" + - "\1\12\1\11\1\12\36\11\33\12\2\0\3\11\60\0\46\11\13\12" + - "\1\11\u014f\0\3\12\66\11\2\0\1\12\1\11\20\12\2\0\1\11" + - "\4\12\3\0\12\11\2\12\2\0\12\12\21\0\3\12\1\0\10\11" + - "\2\0\2\11\2\0\26\11\1\0\7\11\1\0\1\11\3\0\4\11" + - "\2\0\1\12\1\11\7\12\2\0\2\12\2\0\3\12\11\0\1\12" + - "\4\0\2\11\1\0\3\11\2\12\2\0\12\12\4\11\15\0\3\12" + - "\1\0\6\11\4\0\2\11\2\0\26\11\1\0\7\11\1\0\2\11" + - "\1\0\2\11\1\0\2\11\2\0\1\12\1\0\5\12\4\0\2\12" + - "\2\0\3\12\13\0\4\11\1\0\1\11\7\0\14\12\3\11\14\0" + - "\3\12\1\0\11\11\1\0\3\11\1\0\26\11\1\0\7\11\1\0" + - "\2\11\1\0\5\11\2\0\1\12\1\11\10\12\1\0\3\12\1\0" + - "\3\12\2\0\1\11\17\0\2\11\2\12\2\0\12\12\1\0\1\11" + - "\17\0\3\12\1\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11" + - "\1\0\2\11\1\0\5\11\2\0\1\12\1\11\6\12\3\0\2\12" + - "\2\0\3\12\10\0\2\12\4\0\2\11\1\0\3\11\4\0\12\12" + - "\1\0\1\11\20\0\1\12\1\11\1\0\6\11\3\0\3\11\1\0" + - "\4\11\3\0\2\11\1\0\1\11\1\0\2\11\3\0\2\11\3\0" + - "\3\11\3\0\10\11\1\0\3\11\4\0\5\12\3\0\3\12\1\0" + - "\4\12\11\0\1\12\17\0\11\12\11\0\1\11\7\0\3\12\1\0" + - "\10\11\1\0\3\11\1\0\27\11\1\0\12\11\1\0\5\11\4\0" + - "\7\12\1\0\3\12\1\0\4\12\7\0\2\12\11\0\2\11\4\0" + - "\12\12\22\0\2\12\1\0\10\11\1\0\3\11\1\0\27\11\1\0" + - "\12\11\1\0\5\11\2\0\1\12\1\11\7\12\1\0\3\12\1\0" + - "\4\12\7\0\2\12\7\0\1\11\1\0\2\11\4\0\12\12\22\0" + - "\2\12\1\0\10\11\1\0\3\11\1\0\27\11\1\0\20\11\4\0" + - "\6\12\2\0\3\12\1\0\4\12\11\0\1\12\10\0\2\11\4\0" + - "\12\12\22\0\2\12\1\0\22\11\3\0\30\11\1\0\11\11\1\0" + - "\1\11\2\0\7\11\3\0\1\12\4\0\6\12\1\0\1\12\1\0" + - "\10\12\22\0\2\12\15\0\60\11\1\12\2\11\7\12\4\0\10\11" + - "\10\12\1\0\12\12\47\0\2\11\1\0\1\11\2\0\2\11\1\0" + - "\1\11\2\0\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0" + - "\1\11\1\0\1\11\2\0\2\11\1\0\4\11\1\12\2\11\6\12" + - "\1\0\2\12\1\11\2\0\5\11\1\0\1\11\1\0\6\12\2\0" + - "\12\12\2\0\2\11\42\0\1\11\27\0\2\12\6\0\12\12\13\0" + - "\1\12\1\0\1\12\1\0\1\12\4\0\2\12\10\11\1\0\42\11" + - "\6\0\24\12\1\0\2\12\4\11\4\0\10\12\1\0\44\12\11\0" + - "\1\12\71\0\42\11\1\0\5\11\1\0\2\11\1\0\7\12\3\0" + - "\4\12\6\0\12\12\6\0\6\11\4\12\106\0\46\11\12\0\51\11" + - "\7\0\132\11\5\0\104\11\5\0\122\11\6\0\7\11\1\0\77\11" + - "\1\0\1\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11" + - "\2\0\47\11\1\0\1\11\1\0\4\11\2\0\37\11\1\0\1\11" + - "\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\7\11" + - "\1\0\7\11\1\0\27\11\1\0\37\11\1\0\1\11\1\0\4\11" + - "\2\0\7\11\1\0\47\11\1\0\23\11\16\0\11\12\56\0\125\11" + - "\14\0\u026c\11\2\0\10\11\12\0\32\11\5\0\113\11\3\0\3\11" + - "\17\0\15\11\1\0\4\11\3\12\13\0\22\11\3\12\13\0\22\11" + - "\2\12\14\0\15\11\1\0\3\11\1\0\2\12\14\0\64\11\40\12" + - "\3\0\1\11\3\0\2\11\1\12\2\0\12\12\41\0\3\12\2\0" + - "\12\12\6\0\130\11\10\0\51\11\1\12\126\0\35\11\3\0\14\12" + - "\4\0\14\12\12\0\12\12\36\11\2\0\5\11\u038b\0\154\11\224\0" + - "\234\11\4\0\132\11\6\0\26\11\2\0\6\11\2\0\46\11\2\0" + - "\6\11\2\0\10\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0" + - "\37\11\2\0\65\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0" + - "\7\11\3\0\4\11\2\0\6\11\4\0\15\11\5\0\3\11\1\0" + - "\7\11\17\0\4\12\32\0\5\12\20\0\2\11\23\0\1\11\13\0" + - "\4\12\6\0\6\12\1\0\1\11\15\0\1\11\40\0\22\11\36\0" + - "\15\12\4\0\1\12\3\0\6\12\27\0\1\11\4\0\1\11\2\0" + - "\12\11\1\0\1\11\3\0\5\11\6\0\1\11\1\0\1\11\1\0" + - "\1\11\1\0\4\11\1\0\3\11\1\0\7\11\3\0\3\11\5\0" + - "\5\11\26\0\44\11\u0e81\0\3\11\31\0\11\11\6\12\1\0\5\11" + - "\2\0\5\11\4\0\126\11\2\0\2\12\2\0\3\11\1\0\137\11" + - "\5\0\50\11\4\0\136\11\21\0\30\11\70\0\20\11\u0200\0\u19b6\11" + - "\112\0\u51a6\11\132\0\u048d\11\u0773\0\u2ba4\11\u215c\0\u012e\11\2\0\73\11" + - "\225\0\7\11\14\0\5\11\5\0\1\11\1\12\12\11\1\0\15\11" + - "\1\0\5\11\1\0\1\11\1\0\2\11\1\0\2\11\1\0\154\11" + - "\41\0\u016b\11\22\0\100\11\2\0\66\11\50\0\15\11\3\0\20\12" + - "\20\0\4\12\17\0\2\11\30\0\3\11\31\0\1\11\6\0\5\11" + - "\1\0\207\11\2\0\1\12\4\0\1\11\13\0\12\12\7\0\32\11" + - "\4\0\1\11\1\0\32\11\12\0\132\11\3\0\6\11\2\0\6\11" + - "\2\0\6\11\2\0\3\11\3\0\2\11\3\0\2\11\22\0\3\12" + - "\4\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\12\1\4\1\2\1\0\1\4\1\1\16\12\4\0\1\40\1\0"+ + "\1\43\1\0\1\11\2\0\1\46\3\0\1\23\1\0\1\17\1\20"+ + "\1\0\1\16\3\47\4\24\2\7\1\15\1\3\5\0\4\11\1\21"+ + "\25\11\1\6\1\25\1\10\1\0\1\14\1\0\1\36\1\44\1\27"+ + "\1\41\1\22\1\45\1\42\1\13\1\32\3\13\1\5\1\34\1\33"+ + "\1\30\1\13\1\37\1\35\1\31\3\13\1\26\2\13\4\0\41\12"+ + "\2\0\4\11\4\0\1\11\2\0\1\12\7\0\1\11\4\0\1\11"+ + "\5\0\27\11\1\0\37\11\1\0\u013f\11\31\0\162\11\4\0\14\11"+ + "\16\0\5\11\11\0\1\11\21\0\130\12\5\0\23\12\12\0\1\11"+ + "\13\0\1\11\1\0\3\11\1\0\1\11\1\0\24\11\1\0\54\11"+ + "\1\0\46\11\1\0\5\11\4\0\202\11\1\0\4\12\3\0\105\11"+ + "\1\0\46\11\2\0\2\11\6\0\20\11\41\0\46\11\2\0\1\11"+ + "\7\0\47\11\11\0\21\12\1\0\27\12\1\0\3\12\1\0\1\12"+ + "\1\0\2\12\1\0\1\12\13\0\33\11\5\0\3\11\15\0\4\12"+ + "\14\0\6\12\13\0\32\11\5\0\13\11\16\12\7\0\12\12\4\0"+ + "\2\11\1\12\143\11\1\0\1\11\10\12\1\0\6\12\2\11\2\12"+ + "\1\0\4\12\2\11\12\12\3\11\2\0\1\11\17\0\1\12\1\11"+ + "\1\12\36\11\33\12\2\0\3\11\60\0\46\11\13\12\1\11\u014f\0"+ + "\3\12\66\11\2\0\1\12\1\11\20\12\2\0\1\11\4\12\3\0"+ + "\12\11\2\12\2\0\12\12\21\0\3\12\1\0\10\11\2\0\2\11"+ + "\2\0\26\11\1\0\7\11\1\0\1\11\3\0\4\11\2\0\1\12"+ + "\1\11\7\12\2\0\2\12\2\0\3\12\11\0\1\12\4\0\2\11"+ + "\1\0\3\11\2\12\2\0\12\12\4\11\15\0\3\12\1\0\6\11"+ + "\4\0\2\11\2\0\26\11\1\0\7\11\1\0\2\11\1\0\2\11"+ + "\1\0\2\11\2\0\1\12\1\0\5\12\4\0\2\12\2\0\3\12"+ + "\13\0\4\11\1\0\1\11\7\0\14\12\3\11\14\0\3\12\1\0"+ + "\11\11\1\0\3\11\1\0\26\11\1\0\7\11\1\0\2\11\1\0"+ + "\5\11\2\0\1\12\1\11\10\12\1\0\3\12\1\0\3\12\2\0"+ + "\1\11\17\0\2\11\2\12\2\0\12\12\1\0\1\11\17\0\3\12"+ + "\1\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0\2\11"+ + "\1\0\5\11\2\0\1\12\1\11\6\12\3\0\2\12\2\0\3\12"+ + "\10\0\2\12\4\0\2\11\1\0\3\11\4\0\12\12\1\0\1\11"+ + "\20\0\1\12\1\11\1\0\6\11\3\0\3\11\1\0\4\11\3\0"+ + "\2\11\1\0\1\11\1\0\2\11\3\0\2\11\3\0\3\11\3\0"+ + "\10\11\1\0\3\11\4\0\5\12\3\0\3\12\1\0\4\12\11\0"+ + "\1\12\17\0\11\12\11\0\1\11\7\0\3\12\1\0\10\11\1\0"+ + "\3\11\1\0\27\11\1\0\12\11\1\0\5\11\4\0\7\12\1\0"+ + "\3\12\1\0\4\12\7\0\2\12\11\0\2\11\4\0\12\12\22\0"+ + "\2\12\1\0\10\11\1\0\3\11\1\0\27\11\1\0\12\11\1\0"+ + "\5\11\2\0\1\12\1\11\7\12\1\0\3\12\1\0\4\12\7\0"+ + "\2\12\7\0\1\11\1\0\2\11\4\0\12\12\22\0\2\12\1\0"+ + "\10\11\1\0\3\11\1\0\27\11\1\0\20\11\4\0\6\12\2\0"+ + "\3\12\1\0\4\12\11\0\1\12\10\0\2\11\4\0\12\12\22\0"+ + "\2\12\1\0\22\11\3\0\30\11\1\0\11\11\1\0\1\11\2\0"+ + "\7\11\3\0\1\12\4\0\6\12\1\0\1\12\1\0\10\12\22\0"+ + "\2\12\15\0\60\11\1\12\2\11\7\12\4\0\10\11\10\12\1\0"+ + "\12\12\47\0\2\11\1\0\1\11\2\0\2\11\1\0\1\11\2\0"+ + "\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0\1\11\1\0"+ + "\1\11\2\0\2\11\1\0\4\11\1\12\2\11\6\12\1\0\2\12"+ + "\1\11\2\0\5\11\1\0\1\11\1\0\6\12\2\0\12\12\2\0"+ + "\2\11\42\0\1\11\27\0\2\12\6\0\12\12\13\0\1\12\1\0"+ + "\1\12\1\0\1\12\4\0\2\12\10\11\1\0\42\11\6\0\24\12"+ + "\1\0\2\12\4\11\4\0\10\12\1\0\44\12\11\0\1\12\71\0"+ + "\42\11\1\0\5\11\1\0\2\11\1\0\7\12\3\0\4\12\6\0"+ + "\12\12\6\0\6\11\4\12\106\0\46\11\12\0\51\11\7\0\132\11"+ + "\5\0\104\11\5\0\122\11\6\0\7\11\1\0\77\11\1\0\1\11"+ + "\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\47\11"+ + "\1\0\1\11\1\0\4\11\2\0\37\11\1\0\1\11\1\0\4\11"+ + "\2\0\7\11\1\0\1\11\1\0\4\11\2\0\7\11\1\0\7\11"+ + "\1\0\27\11\1\0\37\11\1\0\1\11\1\0\4\11\2\0\7\11"+ + "\1\0\47\11\1\0\23\11\16\0\11\12\56\0\125\11\14\0\u026c\11"+ + "\2\0\10\11\12\0\32\11\5\0\113\11\3\0\3\11\17\0\15\11"+ + "\1\0\4\11\3\12\13\0\22\11\3\12\13\0\22\11\2\12\14\0"+ + "\15\11\1\0\3\11\1\0\2\12\14\0\64\11\40\12\3\0\1\11"+ + "\3\0\2\11\1\12\2\0\12\12\41\0\3\12\2\0\12\12\6\0"+ + "\130\11\10\0\51\11\1\12\126\0\35\11\3\0\14\12\4\0\14\12"+ + "\12\0\12\12\36\11\2\0\5\11\u038b\0\154\11\224\0\234\11\4\0"+ + "\132\11\6\0\26\11\2\0\6\11\2\0\46\11\2\0\6\11\2\0"+ + "\10\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\37\11\2\0"+ + "\65\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0\7\11\3\0"+ + "\4\11\2\0\6\11\4\0\15\11\5\0\3\11\1\0\7\11\17\0"+ + "\4\12\32\0\5\12\20\0\2\11\23\0\1\11\13\0\4\12\6\0"+ + "\6\12\1\0\1\11\15\0\1\11\40\0\22\11\36\0\15\12\4\0"+ + "\1\12\3\0\6\12\27\0\1\11\4\0\1\11\2\0\12\11\1\0"+ + "\1\11\3\0\5\11\6\0\1\11\1\0\1\11\1\0\1\11\1\0"+ + "\4\11\1\0\3\11\1\0\7\11\3\0\3\11\5\0\5\11\26\0"+ + "\44\11\u0e81\0\3\11\31\0\11\11\6\12\1\0\5\11\2\0\5\11"+ + "\4\0\126\11\2\0\2\12\2\0\3\11\1\0\137\11\5\0\50\11"+ + "\4\0\136\11\21\0\30\11\70\0\20\11\u0200\0\u19b6\11\112\0\u51a6\11"+ + "\132\0\u048d\11\u0773\0\u2ba4\11\u215c\0\u012e\11\2\0\73\11\225\0\7\11"+ + "\14\0\5\11\5\0\1\11\1\12\12\11\1\0\15\11\1\0\5\11"+ + "\1\0\1\11\1\0\2\11\1\0\2\11\1\0\154\11\41\0\u016b\11"+ + "\22\0\100\11\2\0\66\11\50\0\15\11\3\0\20\12\20\0\4\12"+ + "\17\0\2\11\30\0\3\11\31\0\1\11\6\0\5\11\1\0\207\11"+ + "\2\0\1\12\4\0\1\11\13\0\12\12\7\0\32\11\4\0\1\11"+ + "\1\0\32\11\12\0\132\11\3\0\6\11\2\0\6\11\2\0\6\11"+ + "\2\0\3\11\3\0\2\11\3\0\2\11\22\0\3\12\4\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\2\1\1\2\1\1\1\3\2\4\1\1\1\5" + - "\2\6\1\7\1\10\1\11\1\10\1\11\2\1\1\12" + - "\1\0\1\13\1\14\2\15\1\16\1\17\1\20\1\21" + - "\1\22\1\23\1\24\1\25\1\0\1\26\1\0\1\26" + - "\1\0\1\15\1\0\1\26\2\0\1\27"; + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\2\1\1\2\1\1\1\2\1\3\2\4\1\1"+ + "\1\5\2\6\1\7\1\10\1\11\1\10\1\11\2\1"+ + "\1\12\1\0\1\13\1\2\1\14\2\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\24\1\25\1\0\1\26"+ + "\1\0\1\26\1\0\1\2\1\15\1\0\1\26\1\0"+ + "\1\2\1\0\1\2\1\27\15\2\1\0\2\2\2\0"+ + "\2\2\1\30\1\2\6\0\1\31\1\32"; - private static int[] zzUnpackAction() { - int[] result = new int[46]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int [] zzUnpackAction() { + int [] result = new int[81]; + 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\50\0\120\0\170\0\240\0\310\0\360\0\u0118"+ + "\0\u0140\0\u0168\0\170\0\u0190\0\170\0\u01b8\0\170\0\u01e0"+ + "\0\u0208\0\u0230\0\u0258\0\u0280\0\u02a8\0\u02d0\0\170\0\360"+ + "\0\170\0\u02f8\0\170\0\u0320\0\u0348\0\170\0\170\0\170"+ + "\0\170\0\170\0\170\0\170\0\170\0\u0370\0\u0398\0\u03c0"+ + "\0\u0280\0\u02d0\0\u03e8\0\170\0\u0410\0\u0438\0\u0438\0\u0460"+ + "\0\u0488\0\u04b0\0\170\0\u04d8\0\u0500\0\u0528\0\u0550\0\u0578"+ + "\0\u05a0\0\u05c8\0\u05f0\0\u0618\0\u0640\0\u0668\0\u0690\0\u06b8"+ + "\0\u06e0\0\u0708\0\u0730\0\u0758\0\u0780\0\u07a8\0\u07d0\0\170"+ + "\0\u07f8\0\u0820\0\u0848\0\u0870\0\u0898\0\u08c0\0\u08e8\0\170"+ + "\0\170"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[81]; + 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\3\4\1\7\1\4\1\6\1\7"+ + "\4\4\1\7\1\10\3\4\12\6\1\5\2\6\1\4"+ + "\2\6\2\4\1\11\1\12\1\13\22\11\1\14\15\11"+ + "\1\15\4\11\1\4\1\16\1\17\1\20\1\4\1\21"+ + "\1\4\1\22\1\4\1\23\1\4\2\23\1\4\1\24"+ + "\1\25\1\26\2\23\1\4\1\22\1\4\12\23\1\4"+ + "\2\23\1\27\2\23\1\4\1\22\54\0\1\5\33\0"+ + "\1\5\14\0\1\6\1\0\1\6\1\0\2\30\2\6"+ + "\1\31\1\6\2\0\1\30\1\6\1\0\1\6\1\0"+ + "\12\6\1\0\2\6\1\0\2\6\1\0\1\6\5\0"+ + "\1\30\1\0\1\30\1\0\4\30\1\31\1\30\2\0"+ + "\2\30\1\0\1\30\1\0\12\30\1\0\2\30\1\0"+ + "\2\30\1\0\1\30\5\0\1\6\1\0\1\6\1\0"+ + "\2\30\2\6\1\31\1\6\2\0\1\30\1\6\1\0"+ + "\1\6\1\0\1\32\11\6\1\0\2\6\1\0\2\6"+ + "\1\0\1\6\1\11\2\0\22\11\1\0\15\11\1\0"+ + "\4\11\2\0\1\13\45\0\2\33\1\0\13\33\1\34"+ + "\5\33\1\35\1\36\3\33\1\37\2\33\1\40\2\33"+ + "\1\41\3\33\1\42\1\43\1\44\1\45\1\34\2\0"+ + "\1\17\45\0\1\20\2\0\45\20\5\0\1\23\1\46"+ + "\1\23\1\0\4\23\1\0\1\23\2\0\2\23\1\0"+ + "\1\23\1\0\12\23\1\0\2\23\1\0\2\23\1\0"+ + "\1\23\7\0\1\22\6\0\1\22\1\0\1\47\2\50"+ + "\1\0\1\22\22\0\1\22\5\0\1\23\1\0\1\23"+ + "\1\0\4\23\1\0\1\23\2\0\2\23\1\0\1\23"+ + "\1\0\12\23\1\0\2\23\1\0\2\23\1\0\1\23"+ + "\7\0\1\51\6\0\1\51\1\0\1\47\2\50\1\0"+ + "\1\51\22\0\1\51\7\0\1\22\6\0\1\51\1\0"+ + "\1\52\3\0\1\22\22\0\1\22\7\0\1\47\6\0"+ + "\1\47\5\0\1\47\22\0\1\47\5\0\1\6\1\0"+ + "\1\6\1\0\2\30\2\6\1\31\1\6\2\0\1\30"+ + "\1\6\1\0\1\6\1\0\1\6\1\53\10\6\1\0"+ + "\2\6\1\0\2\6\1\0\1\6\16\0\1\35\5\0"+ + "\1\35\22\0\1\35\16\0\1\54\5\0\1\54\22\0"+ + "\1\54\7\0\1\55\6\0\1\55\5\0\1\55\22\0"+ + "\1\55\7\0\1\47\6\0\1\47\2\0\2\50\1\0"+ + "\1\47\22\0\1\47\7\0\1\56\6\0\1\56\1\57"+ + "\3\0\1\57\1\56\22\0\1\56\5\0\1\6\1\0"+ + "\1\6\1\0\2\30\2\6\1\31\1\6\2\0\1\30"+ + "\1\60\1\0\1\6\1\0\12\6\1\0\2\6\1\0"+ + "\2\6\1\0\1\6\7\0\1\55\1\61\5\0\1\55"+ + "\5\0\1\55\22\0\1\55\7\0\1\56\6\0\1\56"+ + "\5\0\1\56\22\0\1\56\5\0\1\6\1\0\1\6"+ + "\1\0\2\30\2\6\1\31\1\6\2\0\1\30\1\6"+ + "\1\0\1\6\1\0\2\6\1\62\7\6\1\0\2\6"+ + "\1\0\2\6\1\0\1\6\43\0\1\63\11\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\3\6\1\64\6\6"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\4\6\1\65\5\6"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\5\6\1\66\4\6"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\6\6\1\67\3\6"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\70\1\0\1\6\1\0\3\6\1\71\3\6"+ + "\1\72\2\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\5\0\1\6\1\0\1\6\1\0\2\30\2\6\1\31"+ + "\1\6\2\0\1\30\1\6\1\0\1\6\1\0\6\6"+ + "\1\73\3\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\5\0\1\6\1\0\1\6\1\0\2\30\2\6\1\31"+ + "\1\6\2\0\1\30\1\6\1\0\1\6\1\0\10\6"+ + "\1\74\1\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\5\0\1\6\1\0\1\6\1\0\2\30\2\6\1\31"+ + "\1\6\2\0\1\30\1\6\1\0\1\6\1\0\3\6"+ + "\1\75\6\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\5\0\1\6\1\0\1\6\1\0\2\30\2\6\1\31"+ + "\1\6\2\0\1\30\1\6\1\0\1\6\1\0\12\6"+ + "\1\0\1\76\1\6\1\0\2\6\1\0\1\6\5\0"+ + "\1\6\1\0\1\6\1\0\2\30\2\6\1\31\1\6"+ + "\2\0\1\30\1\6\1\0\1\6\1\0\11\6\1\77"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\10\6\1\100\1\6"+ + "\1\0\2\6\1\0\2\6\1\0\1\6\5\0\1\6"+ + "\1\0\1\6\1\0\2\30\2\6\1\31\1\6\2\0"+ + "\1\30\1\6\1\0\1\6\1\0\12\6\1\101\2\6"+ + "\1\0\2\6\1\0\1\6\5\0\1\6\1\0\1\6"+ + "\1\0\2\30\2\6\1\31\1\6\2\0\1\30\1\6"+ + "\1\0\1\6\1\0\12\6\1\0\1\6\1\102\1\0"+ + "\2\6\1\0\1\6\5\0\1\6\1\0\1\6\1\0"+ + "\2\30\2\6\1\31\1\6\2\0\1\30\1\6\1\0"+ + "\1\6\1\0\11\6\1\103\1\0\2\6\1\0\2\6"+ + "\1\0\1\6\7\0\1\104\6\0\1\105\5\0\1\104"+ + "\22\0\1\104\5\0\1\6\1\0\1\6\1\0\2\30"+ + "\2\6\1\31\1\6\2\0\1\30\1\106\1\0\1\6"+ + "\1\0\12\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\5\0\1\6\1\0\1\6\1\0\2\30\2\6\1\31"+ + "\1\6\2\0\1\30\1\6\1\0\1\6\1\0\3\6"+ + "\1\107\6\6\1\0\2\6\1\0\2\6\1\0\1\6"+ + "\7\0\1\104\5\0\1\110\1\104\5\0\1\104\22\0"+ + "\1\104\15\0\1\110\37\0\1\6\1\0\1\6\1\0"+ + "\2\30\2\6\1\31\1\6\2\0\1\30\1\6\1\0"+ + "\1\6\1\0\3\6\1\111\6\6\1\0\2\6\1\0"+ + "\2\6\1\0\1\6\5\0\1\6\1\0\1\6\1\0"+ + "\2\30\2\6\1\31\1\6\2\0\1\30\1\6\1\0"+ + "\1\6\1\0\12\6\1\112\2\6\1\0\2\6\1\0"+ + "\1\6\5\0\1\6\1\0\1\6\1\0\2\30\2\6"+ + "\1\31\1\6\2\0\1\30\1\6\1\0\1\6\1\0"+ + "\12\6\1\113\2\6\1\0\2\6\1\0\1\6\7\0"+ + "\1\114\6\0\1\115\5\0\1\114\22\0\1\114\7\0"+ + "\1\116\6\0\1\117\5\0\1\116\22\0\1\116\7\0"+ + "\1\114\5\0\1\120\1\114\5\0\1\114\22\0\1\114"+ + "\15\0\1\120\41\0\1\116\5\0\1\121\1\116\5\0"+ + "\1\116\22\0\1\116\15\0\1\121\32\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2320]; + 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\6\1\1\11\1\1\1\11\1\1\1\11"+ + "\7\1\1\11\1\0\1\11\1\1\1\11\2\1\10\11"+ + "\1\0\1\1\1\0\1\1\1\0\1\1\1\11\1\0"+ + "\1\1\1\0\1\1\1\0\1\1\1\11\15\1\1\0"+ + "\2\1\2\0\2\1\1\11\1\1\6\0\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[81]; + 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(); + boolean isMultiname=false; + long multinameId=0; + + + /** + * Create an empty lexer, yyrset will be called later to reset and assign + * the reader + */ + public Flasm3Lexer() { + + } + + 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 Flasm3Lexer(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 Flasm3Lexer(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 < 1738) { + 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(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; + /* 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); - /** - * 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\36\0\74\0\132\0\170\0\226\0\264\0\322" + - "\0\360\0\132\0\u010e\0\132\0\u012c\0\132\0\u014a\0\u0168" + - "\0\u0186\0\u01a4\0\u01c2\0\u01e0\0\u01fe\0\132\0\264\0\132" + - "\0\132\0\u021c\0\u023a\0\132\0\132\0\132\0\132\0\132" + - "\0\132\0\132\0\132\0\u0258\0\u0276\0\u0294\0\u01c2\0\u01fe" + - "\0\132\0\u02b2\0\u02d0\0\u02d0\0\u02ee\0\132"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[46]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + 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; - } - - /** - * 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\3\4\1\7\1\4\1\6\1\7" + - "\4\4\1\7\1\6\4\4\5\6\2\4\1\10\1\11" + - "\1\12\22\10\1\13\1\14\7\10\1\4\1\15\1\16" + - "\1\17\1\4\1\20\1\4\1\21\1\4\1\22\1\4" + - "\2\22\1\4\1\23\1\24\1\25\2\22\1\4\1\21" + - "\1\4\1\26\5\22\1\4\1\21\42\0\1\5\36\0" + - "\1\6\1\0\1\6\1\0\2\27\2\6\1\30\1\6" + - "\2\0\1\27\1\6\1\0\1\6\2\0\5\6\1\0" + - "\1\6\5\0\1\27\1\0\1\27\1\0\4\27\1\30" + - "\1\27\2\0\2\27\1\0\1\27\2\0\5\27\1\0" + - "\1\27\1\10\2\0\22\10\2\0\7\10\2\0\1\12" + - "\33\0\2\31\1\0\13\31\1\32\5\31\1\33\1\34" + - "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\32" + - "\2\0\1\16\33\0\1\17\2\0\33\17\5\0\1\22" + - "\1\44\1\22\1\0\4\22\1\0\1\22\2\0\2\22" + - "\1\0\1\22\2\0\5\22\1\0\1\22\7\0\1\21" + - "\6\0\1\21\1\0\1\45\2\46\1\0\1\21\10\0" + - "\1\21\5\0\1\22\1\0\1\22\1\0\4\22\1\0" + - "\1\22\2\0\2\22\1\0\1\22\2\0\5\22\1\0" + - "\1\22\7\0\1\47\6\0\1\47\1\0\1\45\2\46" + - "\1\0\1\47\10\0\1\47\7\0\1\21\6\0\1\47" + - "\1\0\1\50\3\0\1\21\10\0\1\21\7\0\1\45" + - "\6\0\1\45\5\0\1\45\10\0\1\45\16\0\1\33" + - "\5\0\1\33\10\0\1\33\16\0\1\51\5\0\1\51" + - "\10\0\1\51\7\0\1\52\6\0\1\52\5\0\1\52" + - "\10\0\1\52\7\0\1\45\6\0\1\45\2\0\2\46" + - "\1\0\1\45\10\0\1\45\7\0\1\53\6\0\1\53" + - "\1\54\3\0\1\54\1\53\10\0\1\53\7\0\1\52" + - "\1\55\5\0\1\52\5\0\1\52\10\0\1\52\7\0" + - "\1\53\6\0\1\53\5\0\1\53\10\0\1\53\26\0" + - "\1\56\7\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[780]; - 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\5\1\1\11\1\1\1\11\1\1\1\11" + - "\7\1\1\11\1\0\2\11\2\1\10\11\1\0\1\1" + - "\1\0\1\1\1\0\1\11\1\0\1\1\2\0\1\11"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[46]; - 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(); - boolean isMultiname = false; - long multinameId = 0; - - - /** - * Create an empty lexer, yyrset will be called later to reset and assign - * the reader - */ - public Flasm3Lexer() { - - } - - 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 Flasm3Lexer(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 Flasm3Lexer(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 < 1722) { - 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. - * @throws 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 + // 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; + } - /** - * 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(); + 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]; } - - /** - * 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; - } + throw new Error(message); + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + /** + * 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; + } - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * 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; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * 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]; - } + yychar+= zzMarkedPosL-zzStartRead; - - /** - * 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]; + 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++; } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + 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; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - /** - * 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 - * @throws 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; - + zzForAction: { 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 (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; } - - 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--; + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - zzAction = -1; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - 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 8: { - return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER, yytext()); - } - case 24: - break; - case 21: { - string.append('\''); - } - case 25: - break; - case 9: { - return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER, new Long(Long.parseLong((yytext())))); - } - case 26: - break; - case 3: { - string.append(yytext()); - } - case 27: - break; - case 13: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); - } - case 28: - break; - case 5: { - yybegin(PARAMETERS); - // length also includes the trailing quote - if (isMultiname) { - return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME, new Long(multinameId)); - } else { - return new ParsedSymbol(ParsedSymbol.TYPE_STRING, string.toString()); - } - } - case 29: - break; - case 20: { - string.append('\r'); - } - case 30: - break; - case 6: { - yybegin(YYINITIAL); - } - case 31: - break; - case 2: { - yybegin(PARAMETERS); - return new ParsedSymbol(ParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); - } - case 32: - break; - case 7: { - return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT, yytext().substring(1)); - } - case 33: - break; - case 11: { - String s = yytext(); - return new ParsedSymbol(ParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); - } - case 34: - break; - case 16: { - string.append('\b'); - } - case 35: - break; - case 4: { - throw new ParseException("Unterminated string at end of line", yyline + 1); - } - case 36: - break; - case 10: { - isMultiname = false; - yybegin(STRING); - string.setLength(0); - } - case 37: - break; - case 17: { - string.append('\t'); - } - case 38: - break; - case 22: { - return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT, new Double(Double.parseDouble((yytext())))); - } - case 39: - break; - case 14: { - string.append('\\'); - } - case 40: - break; - case 12: { - throw new ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 41: - break; - case 23: { - isMultiname = true; - String s = yytext(); - multinameId = Long.parseLong(s.substring(2, s.length() - 2)); - yybegin(STRING); - string.setLength(0); - } - case 42: - break; - case 18: { - string.append('\n'); - } - case 43: - break; - case 19: { - string.append('\f'); - } - case 44: - break; - case 15: { - string.append('\"'); - } - case 45: - break; - case 1: { - } - case 46: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(ParsedSymbol.TYPE_EOF); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 8: + { return new ParsedSymbol(ParsedSymbol.TYPE_IDENTIFIER,yytext()); + } + case 27: break; + case 21: + { string.append( '\'' ); + } + case 28: break; + case 9: + { return new ParsedSymbol(ParsedSymbol.TYPE_INTEGER,new Long(Long.parseLong((yytext())))); + } + case 29: break; + case 26: + { String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_TARGET,Integer.parseInt(s.substring(16,s.length()-1))); + } + case 30: break; + case 3: + { string.append( yytext() ); + } + case 31: break; + case 13: + { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); + } + case 32: break; + case 25: + { String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_START,Integer.parseInt(s.substring(15,s.length()-1))); + } + case 33: break; + case 5: + { yybegin(PARAMETERS); + // length also includes the trailing quote + if(isMultiname){ + return new ParsedSymbol(ParsedSymbol.TYPE_MULTINAME,new Long(multinameId)); + }else{ + return new ParsedSymbol(ParsedSymbol.TYPE_STRING,string.toString()); + } + } + case 34: break; + case 6: + { yybegin(YYINITIAL); + } + case 35: break; + case 2: + { yybegin(PARAMETERS); + return new ParsedSymbol(ParsedSymbol.TYPE_INSTRUCTION_NAME,yytext()); + } + case 36: break; + case 17: + { string.append( '\r' ); + } + case 37: break; + case 24: + { String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_END,Integer.parseInt(s.substring(13,s.length()-1))); + } + case 38: break; + case 7: + { return new ParsedSymbol(ParsedSymbol.TYPE_COMMENT,yytext().substring(1)); + } + case 39: break; + case 19: + { string.append( '\b' ); + } + case 40: break; + case 11: + { String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_LABEL,s.substring(0,s.length()-1)); + } + case 41: break; + case 4: + { throw new ParseException("Unterminated string at end of line",yyline+1); + } + case 42: break; + case 10: + { isMultiname=false; + yybegin(STRING); + string.setLength(0); + } + case 43: break; + case 15: + { string.append( '\t' ); + } + case 44: break; + case 22: + { return new ParsedSymbol(ParsedSymbol.TYPE_FLOAT,new Double(Double.parseDouble((yytext())))); + } + case 45: break; + case 14: + { string.append( '\\' ); + } + case 46: break; + case 12: + { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); + } + case 47: break; + case 23: + { isMultiname=true; + String s=yytext(); + multinameId=Long.parseLong(s.substring(2,s.length()-2)); + yybegin(STRING); + string.setLength(0); + } + case 48: break; + case 16: + { string.append( '\n' ); + } + case 49: break; + case 20: + { string.append( '\f' ); + } + case 50: break; + case 18: + { string.append( '\"' ); + } + case 51: break; + case 1: + { + } + case 52: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(ParsedSymbol.TYPE_EOF); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } } diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/parser/ParsedSymbol.java b/trunk/src/com/jpexs/asdec/abc/avm2/parser/ParsedSymbol.java index a3a9679f0..0ab15a2ff 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/parser/ParsedSymbol.java +++ b/trunk/src/com/jpexs/asdec/abc/avm2/parser/ParsedSymbol.java @@ -32,6 +32,9 @@ public class ParsedSymbol { public static final int TYPE_EOF = 7; public static final int TYPE_LABEL = 8; public static final int TYPE_COMMENT = 9; + public static final int TYPE_EXCEPTION_START=10; + public static final int TYPE_EXCEPTION_END=11; + public static final int TYPE_EXCEPTION_TARGET=12; public ParsedSymbol(int type, Object value) { this.type = type; diff --git a/trunk/src/com/jpexs/asdec/abc/avm2/parser/flasm3.flex b/trunk/src/com/jpexs/asdec/abc/avm2/parser/flasm3.flex index 472b7357e..d9c9948d6 100644 --- a/trunk/src/com/jpexs/asdec/abc/avm2/parser/flasm3.flex +++ b/trunk/src/com/jpexs/asdec/abc/avm2/parser/flasm3.flex @@ -61,6 +61,8 @@ Label = {Identifier}: /* integer literals */ NumberLiteral = 0 | -?[1-9][0-9]* + +PositiveNumberLiteral = 0 | [1-9][0-9]* /* floating point literals */ FloatLiteral = -?({FLit1}|{FLit2}|{FLit3}) {Exponent}? @@ -75,6 +77,10 @@ OctDigit = [0-7] /* string and character literals */ StringCharacter = [^\r\n\"\\] +ExceptionStart = "exceptionstart "{PositiveNumberLiteral}":" +ExceptionEnd = "exceptionend "{PositiveNumberLiteral}":" +ExceptionTarget = "exceptiontarget "{PositiveNumberLiteral}":" + %state STRING,PARAMETERS %% @@ -85,6 +91,18 @@ StringCharacter = [^\r\n\"\\] /* whitespace */ {WhiteSpace} { } + {ExceptionStart} { + String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_START,Integer.parseInt(s.substring(15,s.length()-1))); + } + {ExceptionEnd} { + String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_END,Integer.parseInt(s.substring(13,s.length()-1))); + } + {ExceptionTarget} { + String s=yytext(); + return new ParsedSymbol(ParsedSymbol.TYPE_EXCEPTION_TARGET,Integer.parseInt(s.substring(16,s.length()-1))); + } {Label} { String s=yytext(); return new ParsedSymbol(ParsedSymbol.TYPE_LABEL,s.substring(0,s.length()-1)); diff --git a/trunk/src/com/jpexs/asdec/abc/gui/ASMSourceEditorPane.java b/trunk/src/com/jpexs/asdec/abc/gui/ASMSourceEditorPane.java index 6fbbd5c00..649bc6eb8 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/ASMSourceEditorPane.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/ASMSourceEditorPane.java @@ -44,7 +44,7 @@ public class ASMSourceEditorPane extends JEditorPane { public void setBodyIndex(int bodyIndex, ABC abc) { this.bodyIndex = bodyIndex; this.abc = abc; - setText(abc.bodies[bodyIndex].code.toASMSource(abc.constants)); + setText(abc.bodies[bodyIndex].code.toASMSource(abc.constants,abc.bodies[bodyIndex])); } public void graph(){ @@ -53,7 +53,7 @@ public class ASMSourceEditorPane extends JEditorPane { public void save(ConstantPool constants) { try { - AVM2Code acode = ASM3Parser.parse(new ByteArrayInputStream(getText().getBytes()), constants, new DialogMissingSymbolHandler()); + AVM2Code acode = ASM3Parser.parse(new ByteArrayInputStream(getText().getBytes()), constants, new DialogMissingSymbolHandler(),abc.bodies[bodyIndex]); abc.bodies[bodyIndex].code = acode; Main.abcMainFrame.decompiledTextArea.reloadClass(); Main.abcMainFrame.decompiledTextArea.gotoLastTrait(); @@ -68,14 +68,13 @@ public class ASMSourceEditorPane extends JEditorPane { public void verify(ConstantPool constants, ABC abc) { try { - AVM2Code acode = ASM3Parser.parse(new ByteArrayInputStream(getText().getBytes()), constants, new DialogMissingSymbolHandler()); - acode.clearSecureSWF(abc.constants, abc.bodies[bodyIndex]); - setText(acode.toASMSource(constants)); + AVM2Code acode = ASM3Parser.parse(new ByteArrayInputStream(getText().getBytes()), constants, new DialogMissingSymbolHandler(),abc.bodies[bodyIndex]); + //acode.clearSecureSWF(abc.constants, abc.bodies[bodyIndex]); + setText(acode.toASMSource(constants,abc.bodies[bodyIndex])); //Main.mainFrame.decompiledTextArea.setBody(mb, abc); } catch (IOException ex) { - } catch (ConvertException ex) { } catch (ParseException ex) { JOptionPane.showMessageDialog(this, (ex.text + " on line " + ex.line)); selectLine((int) ex.line); diff --git a/trunk/testdata/as2.fla b/trunk/testdata/as2.fla new file mode 100644 index 0000000000000000000000000000000000000000..47f7a8d776da80cd94b6815762ede264bf0e2938 GIT binary patch literal 64512 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 + + +as2 + + + + + + + + + + diff --git a/trunk/testdata/as2.swf b/trunk/testdata/as2.swf new file mode 100644 index 0000000000000000000000000000000000000000..9dc5b3de6fc8b21cddfdc8c3b1629c63b7481ec3 GIT binary patch literal 1108 zcmV-a1grZ)S5pe23IG6joUN2wZ{t)D$0xU@OIOe>V!JD`!p%xuiB)1dZJO9hvNTCs zDs9E8Ekfc2x%SECY-}InOD??d2)rO6q)I#>@hRY)kH8b(rp)mrajyysk&<}M%=~8j zKXc9m3SR-d_Zz^Y73e)!1%Pkg&ldoiuF+SId;7w~GHp*qt5q8KzN3obcs#C*w<^qi zEy{|bh*DLoR?8Ss_NKP4P0F_SwA2Nex+mMhE0^_&=V1xWY>HQ-Q~9Ka z-*#1!rLxp0OIxS1q;5CVTI0D?RV68v8%0K`N5t0*&DT=NN?F=Dm20Y8SGQ~F5cuYJNxH`e`r}2;+ z9bqpn9T8*SWmedWqq!d8@vTylz=OjoDz!advvqRVYh!kWQbTR@dUd%jNxiPJ*V~t6 zWqY@`+f_Q%tsSW$E4WeDQWKiN^ni;T(~N&XOQj|>=F-;`=ehUx)Ef{&IB1u3nrnBx zRJE?uI!bj*>2wrcs?ph!y1SiSMcGs8b$Ne=OP7e24zG*5DD5yUZnX5-f05%>#El~@ z#ur~(fNu8U;^IZFiI?K{_aO(g4-{ytwFBo_Scc8>A}nW$cv(V|FJwMEFFJQV%{$aIv1fo=jeB_Jv^ug)duX1ngCaj z!U5qY1$_t2PdW54oaYgW%LkkMDT7b1o?wZ;E<*Sh9KMS1@qn7-f5-p9@glwt_Kv#f z%=W1r%F z#e7%SP#uF+DwRYc+PbB~8>G0>HJ1K6LjTUu&!7n2nELtvv2TcBYha8t@LdYJKgHkC zR3ET!=xy`!T?T-&@elgQt^tPRp_q+rDYkR5y&2p2*xukWJe$v5DWzDRFFb%qoY_n+ zMKd|%-G79r6YN#@_r4A^)5CXg*~n&Klj#4Bspn=teTuHS=DzqC{K-pJaV-+ei%x?b zm|Cn{qLt$k1E)zRmdThy7oMgwNQrt6X0cqT4`SgGp;x(Z59h+I$DPh}x^b$0h_+rw z$d3qmvTc4lH#5 literal 0 HcmV?d00001 diff --git a/trunk/testdata/as3.fla b/trunk/testdata/as3.fla new file mode 100644 index 0000000000000000000000000000000000000000..88d0a0919abd5fff3260b6c6c63a1c101723c4a0 GIT binary patch literal 29696 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�(iB~~>VM&jp@6?OcjsM9j*x~444^Quh@Y`H7*gN63oOGwD z26hU;-eBzP`O%H?;>t{AeSL9xzD8aO!5d(;;J9FyINM_EmYk8ZQQn2JOxsHeM2qDW zN`Woqn7HPJbIq6UJr=x(8Ke(;T^5Fm*p}v3hsZX!+L|AC2Sre2p)O#n_Y^|&DYO|w zy#-vE!~aE+0k=w56svm69RefWtI{shU8{MbVY zp946fo8R`!)x-D+h(3HN>JaMm$&Y&sqfc&7^L-etqkr8pK0S8~awub)Y6P2=_W=LIp0Rn$9#ziaZ>i+BD61#h#=<7_|V$3Jp2fcF9X9W?j{A+b%!hf=(bvy|Xd zz@?cp_=w0)FL<-M?1k+4D8M0b z%SXdFI{mSYIL}s+YAYkKGHQ~yoG6*|c;|NZ@rd4Aw|c1i8ECzTaLbMFs*Kw{K+YSp z$Ak;=-5xt>^t52V6>nJS&9LLpP9H`^i|K>b_@gj=;I;<7V-*0$zCYW%D-jl7t!MgL1U3LCxy~k(8 zD(2T3EU-1lS?>_E$eT0tbDYsNGdue6*?xAg z!|V)4(fOzkKT~o^NZVb$IulPJ3dN*dX50AATM@jPKQNPHsk6@PZrk;LXp^SJ#kH-hE>}+6M=c8T~*DK}a_uCC# z{27wmTl8mcPNM(g#w+&9%rA?VI}HEF!Y>vNfU5!g!0#C9PJm_v9mgLdTM5({u8pH6 zV{i#Ry%h3_c8p2AMlCdnTi*Jn&SvpR=|;I-gw*~J+$Q&$&FvY{qh?)Ev&6@ zLjPKYCAJ>a)yI(6!CQFc&}jx4<}j^~ES|%;3+*}0I>U9-W((`JBIF3xXKAxBjGC1_ zh3o1Hhx}@Pc3o!IYiT2i+yC}HlcmM&&3%}=osop4u|1A=bh1745awb>Ct+!9kK-Mk zY!5wzx!BQ3SQ^{oct + + +as3 + + + + + + + + + + diff --git a/trunk/testdata/as3.swf b/trunk/testdata/as3.swf new file mode 100644 index 0000000000000000000000000000000000000000..db83c18f3c9b028f84118e2254376a3a2bfbdd82 GIT binary patch literal 2586 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 literal 0 HcmV?d00001 diff --git a/trunk/testdata/classes/Test.as b/trunk/testdata/classes/Test.as new file mode 100644 index 000000000..f862970d7 --- /dev/null +++ b/trunk/testdata/classes/Test.as @@ -0,0 +1,313 @@ +package classes { + +public class Test { + private var testPriv:int=5; + protected var testProt:int=9; + + + public function testHello(){ + trace("hello"); + } + + public function testIncDec() { + var a=5; + var b=0; + trace("++var"); + b=++a; + trace("var++"); + b=a++; + trace("--var"); + b=--a; + trace("var--"); + b=a--; + var c=[1,2,3,4,5]; + trace("++arr"); + b=++c[2]; + trace("arr++"); + b=c[2]++; + trace("--arr"); + b=--c[2]; + trace("arr--"); + b=c[2]--; + + var d=new TestClass1(); + trace("++property"); + trace(++d.attrib); + trace("property++"); + trace(d.attrib++); + trace("--property"); + trace(--d.attrib); + trace("property--"); + trace(d.attrib--); + return; + } + public function testDoWhile() { + var a=8; + do + { + trace("a="+a); + a++; + } + while(a<20); + return; + } + public function testInnerTry(){ + try + { + try + { + trace("try body 1"); + } + catch(e:DefinitionError) + { + trace("catched DefinitionError"); + } + trace("after try 1"); + } + catch(e:Error) + { + trace("catched Error"); + } + finally + { + trace("finally block"); + } + } + public function testWhileContinue() { + var a=5; + while(true) + { + if(a==9) + { + if(a==8) + { + continue; + } + if(a==9) + { + break; + } + trace("hello 1"); + } + trace("hello2"); + } + return; + } + public function testPrecedence() { + var a=0; + a=(5+6)*7; + a=5*(2+3); + a=5+6*7; + a=5*2+2; + trace("a="+a); + return; + } + public function testStrings() { + trace("hello"); + trace("quotes:\"hello!\""); + trace("backslash: \\ "); + trace("single quotes: \'hello!\'"); + trace("new line \r\n hello!"); + } + public function tryContinueLevels() { + var a=5; + loop123: + switch(a) + { + case 57*a: + trace("fiftyseven multiply a"); + var b=0; + while(b<50) + { + if(b==10) + { + break; + } + if(b==15) + { + break loop123; + } + b=b+1; + } + break; + case 13: + trace("thirteen"); + case 14: + trace("fourteen"); + break; + case 89: + trace("eightynine"); + break; + default: + trace("default clause"); + } + + loop182: + for(var c=0;c<8;c=c+1) + { + + loop165: + for(var d=0;d<25;d++) + { + + for(var e=0;e<50;e++) + { + if(e==9) + { + break loop165; + } + if(e==20) + { + continue loop182; + } + if(e==8) + { + break; + } + break loop182; + } + } + trace("hello"); + } + } + public function testSwitchDefault(){ + var a=5; + switch(a) + { + case 57*a: + trace("fiftyseven multiply a"); + break; + case 13: + trace("thirteen"); + case 14: + trace("fourteen"); + break; + case 89: + trace("eightynine"); + break; + default: + trace("default clause"); + } + } + public function testMultipleCondition(){ + var a=5; + var b=8; + var c=9; + if((a<=4||b<=8)&&c==7) + { + trace("onTrue"); + } + else + { + trace("onFalse"); + } + } + public function testForBreak(){ + for(var a=0;a<10;a++) + { + if(a==5) + { + break; + } + trace("hello:"+a); + } + } + + public function testIf(){ + var a=5; + if(a==7) + { + trace("onTrue"); + } + } + + public function testIfElse(){ + var a=5; + if(a==7) + { + trace("onTrue"); + } + else + { + trace("onFalse"); + } + } + public function testFor() { + for(var a=0;a<10;a++) + { + trace("a="+a); + } + } + public function testForContinue() { + for(var a=0;a<10;a=a+1) + { + if(a==9) + { + if(a==5) + { + trace("part1"); + continue; + } + trace("a="+a); + if(a==7) + { + trace("part2"); + continue; + } + trace("part3"); + } + else + { + trace("part4"); + } + trace("part5"); + } + } + public function testTry() { + var i:int; + i=7; + try + { + trace("try body"); + } + catch(e:DefinitionError) + { + trace("catched DefinitionError"); + } + catch(e:Error) + { + trace("Error message:"+e.message); + trace("Stacktrace:"+e.getStackTrace()); + } + finally + { + trace("Finally part"); + } + } + public function testSwitch(){ + var a=5; + switch(a) + { + case 57*a: + trace("fiftyseven multiply a"); + break; + case 13: + trace("thirteen"); + case 14: + trace("fourteen"); + break; + case 89: + trace("eightynine"); + break; + } + } + public function testTernarOperator(){ + var a=5; + var b=4; + var c=4; + var d=78; + var e=(a==b)?((c==d)?1:7):3; + trace("e="+e); + } + } +} \ No newline at end of file diff --git a/trunk/testdata/classes/TestClass1.as b/trunk/testdata/classes/TestClass1.as new file mode 100644 index 000000000..34b05d54c --- /dev/null +++ b/trunk/testdata/classes/TestClass1.as @@ -0,0 +1,5 @@ +package classes{ + public dynamic class TestClass1{ + public var attrib:int=5; + } +} \ No newline at end of file