提起软件工程中最复杂的一类软件,编译器绝对名列前矛。除了最传统的编译之外,下面这些功能的实现也和编译密切相关:
因此,可以说,无论你使用什么编程语言工作,这门源自计算机上古时代的技术都在和你产生着关联。然而,一门编程语言究竟是如何设计出来的?计算机究竟是如何把文本变成执行程序的?如何让编译器支持各种不同的硬件架构?为什么编译器可以生成比手工汇编更优秀的执行代码?可以说,在编译器背后,蕴藏着一座巨大的知识宝库,一旦你打开它,那些数据结构、那些算法、那些重要观念、那些编程实践中最重要最根本的珍宝,那些在你脑中蛰伏已久仿佛已经还给老师的记忆,将重新在你眼前闪闪发光 :)
emm...
当然,说的虽然挺好,但是,不可否认的事情是,学习编译原理并不容易。因为其中很多抽象的观念,我们很难通过形象的方式或者简单的代码片段得以实践。但是,很难,不等于不可以。而这,就是我们这个系列的目的。在开始动手实现一门简单的编程语言之前,我们先来介绍一个工具: Antlr 。
现在,先不用管这个工具到底是干嘛的,我们直接把工作环境安装并搭建起来。在接下来的例子中,我们会随用,随着讲到它的各种功能。
首先,Antlr是一个基于Java开发的工具,因此,你要先给自己的电脑安装Java环境。直接 在这里
下载对应操作系统版本的JDK安装包就好了。完成后,在终端执行 java -version
,能够看到类似下面这样的结果就好了:
java version "10" 2018-03-20 Java(TM) SE Runtime Environment 18.3 (build 10+46) Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)
其次,我们来安装Antlr,直接按照官网给出的步骤就行了:
cd /usr/local/lib sudo curl -O https://www.antlr.org/download/antlr-4.7.1-complete.jar
完成后,根据你使用的Terminal,把下面这三行内容添加到 .zshrc
或者 .bashrc
中:
export CLASSPATH=".:/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool' alias grun='java org.antlr.v4.gui.TestRig'
这里,你不了解Java也完全没关系,我们只是创建了两个命令的别名,其中: antlr4
表示执行Antlr工具自身; grun
是一个帮助我们测试语法的工具。下一节,我们会用到。
添加完成后,更新一下Termianl环境,然后直接执行 antlr4
,如果可以看到帮助信息,就表示安装好了:
```shell
➜ ~ antlr4
ANTLR Parser Generator Version 4.7.1
-o ___ specify output directory where all output is generated
-lib ___ specify location of grammars, tokens files
-atn generate rule augmented transition network diagrams
-encoding ___ specify grammar file encoding; e.g., euc-jp