本文采用 Creative Commons Attribution-ShareAlike 2.5 许可证
零、 从哪里获得OpenLua
OpenLua的项目主页是http://www.luachina.org/projects/openlua/ ,2005年12月28日0.01版发布,所有的源代码可从这里下载。因为Lua是主要的开发语言,所以在你的机器上必须有一个Lua语言编译器并且它位于当前目录或PATH环境变量指定的目录中。为了方便,作者在源代码包中提供了一个Windows平台的Lua编译器—— luac.exe。另外,项目的makefile是针对Windows和Visual C++编写的,用nmake命令即可构建出可执行文件。适用于其它平台的makefile可以很容易在这个Windows版的基础上改写。这里提供已构建好的运行于Windows平台的可执行文件。
一、 基本概念介绍
1、 静态元编程
元(meta)这个词是从希腊词汇中借来的,意为“after”或者“before”,用于表示级别的改变。而在计算机科学中,它主要表示“being about”(关于)的意思。因此元程序(meta-program)是关于程序本身的程序,正如元数学(meta-mathematics)是关于数学本身的数学一样。
元程序实际上可以在不同的语境(context)和不同的时间段运行,但如果元程序是在它们操纵的代码被载入(loaded)之前运行的话,那么就称其为静态元程序(static meta-program),相应的设计活动称为静态元编程(static meta-programming)。包含静态元程序的系统最常见的例子就是编译器和预处理器。这些系统操纵表示输入的内部数据结构(比如抽象语法树),并把它们转换为使用其它语言(例如汇编)或者同样语言但结构被修改了的程序。
在编译期运行的元程序只是静态元程序的一种,不过却是非常常见的一种。如果没有特别说明,本文剩下部分提到的元程序或静态元程序均特指编译期运行的静态元程序。如果要让元程序在编译期运行,那么编译器就有义务为它们提供一个完整的执行环境(execution environment)。
2、 开放式编译器
开放式编译器(open compiler)的思路是向静态元程序提供某些定义良好的高层接口,使其能够改变默认的编译动作(比如按照新的语法来解析源代码),获取并操纵编译过程中源代码的内部表示(比如语法解析树: syntax parse tree)。事实上每一个编译器或多或少都能称得上是开放式的,因为编译器后端(代码生成器)必然要调用前端提供的接口以取得代码的中间表示(通常是抽象语法树或3元组),向元程序提供接口只不过是朝开放的道路上更前进了一步而已。
二、 研究意义
从理论上来说