现在的位置: 首页 > 综合 > 正文

Try Metaas

2012年10月17日 ⁄ 综合 ⁄ 共 1614字 ⁄ 字号 评论关闭

    metaas provides Java applications with a 'Document Object Model' for ActionScript 3 code.

    metaas可以理解为Actionscript 代码的解析和生成基本类库。

   一个使用的例子

   1.下载metaas源代码

         http://svn.badgers-in-foil.co.uk/metaas/trunk/

   2.测试

       metaas 需要下面这些lib

      antlr-runtime-3.0.1.jar

      commons-io-1.4.jar(官方使用1.3.2)

      stringtemplate-3.1-b1.jar

      junit.jar(3.8.1)

      代码中AS3Lexer.java和AS3Parser.java 是通过antlr编译AS3.g3文件生成的。

      修改uk.co.badgersinfoil.metaas.visitor.ActionScriptWalker.java

public ActionScriptWalker(FilterStrategy strategy) {
    this.strategy = strategy;
//    strategy.setFiltered(new ScriptElementSwitch(this));<-----注释掉此行
}

    简单的解析测试metaas附带的AllSyntax.as

   1: public class Test {
   2:     public static void main(String[] args) {
   3:             ActionScriptFactory fact = new ActionScriptFactory();
   4:             ActionScriptParser parser = fact.newParser();
   5:             ASCompilationUnit unit=null;
   6:             InputStream in = Test.class.getClassLoader().getResourceAsStream("AllSyntax.as");
   7:              unit = parser.parse(new InputStreamReader(in));
   8:  
   9:             FilterStrategy noNulls = new FilterStrategy(new ScriptElementStrategy() {
  10:                 public void handle(ScriptElement element) {
  11:                     System.out.println(element.toString());
  12:                 }
  13:             });
  14:             
  15:             ActionScriptWalker walker = new ActionScriptWalker(noNulls);
  16:             walker.walk(unit);
  17:     }
  18:  
  19: }

   可以正常输出AllSyntax.as的内容。

  但是对于下面的as文件,metaas却不会解析了

   1: package 
   2: {
   3:     public class StateInfo extends State
   4:     {
   5:         public function StateInfo()
   6:         {
   7:             super.test("mm");
   8:         }    
   9:  
  10:     }
  11: }

error info: Exception in thread "main" uk.co.badgersinfoil.metaas.SyntaxException: Unexpected token DOT at line 7

原因在于metaas并没有写自己的actionscript parser ,它借用的是asdt的AS3 parser,而这个parser对于 super.someMethod或是

super.someField是不会解析的,只限于解析super(args);

 

metaas目前使用还有一定的局限性,总体还是不错的。

抱歉!评论已关闭.