有没有人知道如何编写Flex预编译器,类似于MXML在构建过程中的方式?

时间:2011-10-14 22:50:48

标签: actionscript-3 flex compiler-construction mxml mxmlc

这是一个有点疯狂的问题,但是那里的任何人都知道如何在flex编译器中编写额外的编译步骤。我们的想法是MXML编译器会像现在这样将MXML转换为AS3代码,但我们在AS3代码和字节码之间有一个额外的步骤。

我之所以要问,这是处理元数据标签以改变代码的一个很好的步骤。许多框架中的常见做法是在变量之前使用[Inject]标记。即[Inject] public var user:IUser。

真正的,非常酷的是,如果注入标签可以被识别,以某种方式解释,然后硬连线到单身,或者其他什么。例如,您可以使用一个配置文件将IUser定义为User对象。编译器会解释它,并将[Inject] public var user:IUser替换为public var user:IUser = UserConfig.instance.user;

如果我知道如何执行此步骤,这将是许多可能的事情之一。我只是想知道是否有人知道如何开始如何去做这件事。

2 个答案:

答案 0 :(得分:0)

这是一个广泛的问题,但我可以为您的具体案例考虑答案。

您需要编写接受字节码作为输入的代码,并输出字节码:

  • 找到包含[Injected]元数据的特征。
  • 写一些调用UserConfig.instance.user
  • 的字节码
  • 将此字节码注入此类的类初始化程序。

要集成到您的构建过程中,您需要添加一个新的程序构建器(假设您正在使用Flash Builder),该构建器在 Flex 之后运行。

另外两种方式是:

  • 在Flex之前解析ActionScript。
  • 创建自己的Flex编译器分支。

答案 1 :(得分:0)

编译器是开源的,代码库中有很多例子,说明编译器如何在编译时修改抽象语法树(源代码被解析为)。

我建议看一下[Embed]或[SkinPart]扩展程序。 (我之前已经讨论了这个例子here的链接。)

但要注意 - 这些东西不适合胆小的人。如果您不熟悉编译器及其工作原理,我强烈推荐this book on ANTLR,它将对源代码解析为AST的过程进行全面概述,然后解释它们的解释方式。