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目前使用还有一定的局限性,总体还是不错的。