Actionscript 3 如何解析.as(AS3)文件

Actionscript 3 如何解析.as(AS3)文件,actionscript-3,parsing,Actionscript 3,Parsing,我希望尽可能地将AS3文件解析为对象或XML。例如,设想以下类: package { class SomeClass extends AnotherClass { private var someVariable:Number public function someMethod(someParameter:Number = 4):void { var someLocalVariable:Number = someParameter * (2 +

我希望尽可能地将AS3文件解析为对象或XML。例如,设想以下类:

package {
   class SomeClass extends AnotherClass {
      private var someVariable:Number

      public function someMethod(someParameter:Number = 4):void {
         var someLocalVariable:Number = someParameter * (2 + someVariable);
      }
   }
}
解析时,它可能类似于:

<package name="">
   <class id="783" name="SomeClass" extendsId="782">
      <variable id="784" visibility="private" type="Number"/>
      <function id="785" name="someMethod" returnType="void">
         <parameter id="786" name="someParameter" type="Number">
            <expression>
               <number value="4"/>
            </expression>
         </parameter>
         <variable id="787" name="someLocalVariable" type="Number"/>
         <code>
            <assign toId="787">
               <expression>
                  <variable id="786"/>
                  <operator type="*"/>
                  <expression>
                     <number value="2"/>
                     <operator type="+"/>
                     <variable id="786"/>
                  </expression>
               </expression>
            </assign>
         </code>
      </function>
   </class>
</package>


。。即使我没有这样一个好的、整洁的xml结构,即使它可以将AS3解析成某种容量,它也远远超出了我现在的位置

有什么想法吗

谢谢,
Eric

看看flash.utils.describeType()文档。


它用于在运行时描述actionscript项,但在这种情况下应该有一些用处。

FlexPMD有一个as3解析器。(FlexPMD是Adobe的一个Java项目,它在as3源代码中报告违反最佳实践的情况。)

FlexPMD的主机位于

该代码位于subversion repo上

不利的一面是,您需要使用Maven来构建FlexPMD(我,我从来没有设法让它工作过),但由于您只需要一个或三个项目,因此可以手动提取这些项目,而无需太多的咒骂和叫喊


您可能还想进一步了解Flex SDK源代码(也打开了),看看Adobe是否提供了用于解析as3的任何其他软件,但我没有查看。

我实际上已将PMD解析器移植到as3

你可以退房


Mike

AS3eval项目中有一个lexer、parser和tokenizer:


换句话说,您想编写AS3编译器?您对编译器理论或有限自动机的了解程度如何?这是由编译器的一小部分lexer/解析器执行的工作。该链接不再工作,看起来它被移动到该链接也已断开,也许这是正确的一个?github.com/teotigraphix/as3-commons-asblocks