这个问题,我先来小结一下吧,现在的主要思路在两个方面,第一个是源码级别转换,第二个是字节码级别转换。
1) 源码级别转换
AS3的语法结构和Obj-C语法结构差异还是比较大的,源码级别转换可能存在一些问题,像AS3向Java的转换似乎通过扫描源码,进行一些相
关的替换等还是可以实现的,可以参看开源工程j2as3:
http://code.google.com/p/j2as3/,实现Java to
ActionScript 3 syntax converter.
2) 字节码级别转换
源码级别转换存在的问题是语法结构差异比较大,那么摒弃语法结构差异的方法可以通过AS3的字节码ABC,或者后端采用LLVM分析得到AST也
是可以的,开源工程XMLVM可以说是在字节码基础上实现了"跨平台"特性:
"The goal of XMLVM is to offer a flexible and extensible cross-
compiler toolchain. Instead of cross-compiling on a source code level,
XMLVM cross-compiles byte code instructions from Sun Microsystem's
virtual machine and Microsoft's Common Language Runtime. The benefit
of this approach is that byte code instructions are easier to cross-
compile and the difficult parsing of a high-level programming language
is left to a regular compiler. In XMLVM, byte code-based programs are
represented as XML documents. This allows manipulation and translation
of XMLVM-based programs using advanced XML technologies such as XSLT,
XQuery, and XPath."
关注了其中的一部分内容,JAVA向Obj-C的转换,Android向iPhone的转换,利用AS3和JAVA的语法相似性实现转换应该不
是难事,继而通过XMLVM实现向Obj-C的转换,当然,整个转换过程的关键部分采用的是XMLVM.
其实,由SWF中抽取ABC,然后转换到XML文档表示出语法无关的源码机构,之后向相应语言做转换,似乎是一条康庄大道,但是走起来相信也是
坑坑洼洼,转换出来的代码会是怎样呢?简单的代码或许没有问题(不如直接重写),复杂代码转换之后呢(中间步骤过多,debug会比较耗时)?