dram.me

Modula-2编译器

补遗

  1. 编译ACK依赖yacc工具,主要老版本Bison存在兼容性问题,建议使用byacc。—— 2017-01-15

  2. 最近版本已不需要显式指定ACKDIR环境变量。—— 2017-01-15

Modula-2作为上世纪七十年代的语言,由于未能成为主流,现在要找到一个可用的编译器并不容易。当前在维护的项目有GNU Modula-2,以及在ACK(Amsterdam Compiler Kit)中包含的Modula-2实现。

以下介绍ACK的编译和使用。

git clone项目之后,首先需要调整其中的Makefile文件:

  1. 例如在Linux平台中,需要将DEFAULT_PLATFORM设置为linux386

  2. [可选]调整ACK_TEMP_DIR$(PWD),该配置指定生成的可执行程序放于仓库根目录。

之后运行make编译,完成后可在仓库根目录找到ack-build/staging/bin/ack等文件。

有一点需要注意的是,在运行ack命令时需要指定ACKDIR环境变量,例如:

ACKDIR=ack-build/staging ack-build/staging/bin/ack -o foo Foo.mod

另外,如果系统是64位环境,需确保编译内核时CONFIG_IA32_EMULATION打开,当前ACK在Linux下只支持32位环境。

值得一提的是,除了C、Modula-2之外,ACK还支持Pascal、Basic等语言,可以作为了解早期编程语言很好的环境。