ANTLR是一个支持多语言的自动生成解析器的框架,在软件开发很多领域内都有很好的应用。本文从入门开始介绍ANTLR的使用。
ANTLR的安装步骤
1) ANTLR需要java的支持,首先安装jdk。
下载地址:http://java.sun.com/javase/downloads/index.jsp
安装完毕JDK后需要设置好系统的环境变量,如下:
a) 新建环境变量 JAVA_HOME=D:/Java/jdk 1.6.0 _03
b) 为Path环境变量添加 %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;
c) 环境变量 CLASSPATH =.;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar;
2) 开始安装ANTLR,使用版本为 3.0.1
下载地址:http://www.antlr.org/download.html。这里下载的为 ANTLR 3.0.1 source distribution。ANTLR也提供了工具 ANTLRWorks 可以编辑语法文件。
a) 解压压缩包后的文件目录可以作为安装目录。
b) 安装完毕后就需要设置环境变量。为CLASSPATH 添加:D:antlr- 3.0.1 /lib/antlr-3.0.1.jar;D:antlr-3.0.1/lib/antlr-runtime-3.0.1.jar;Cb/stringtemplate-3.1b1.jar;D:/antlr-3.0.1/lib/antlr-2.7.7.jar; 其中 D:antlr- 3.0.1 为ANTLR的目录。因为 ANTLR v3是使用v2和stringtemplate写的,所以这两个jar都得加入CLASSPATH。
Hello Parser
1) 定义语法文件文件T.g:
grammar T;
/** Match things like "call foo;" */
r : 'call' ID ';' {System.out.println("invoke "+$ID.text);} ;
ID: 'a'..'z' + ;
WS: (' ' |'/n' |'/r' )+ {$channel=HIDDEN;} ;
2) 使用Antlr的编译语法文件
会生成Tlexer.java 和Tparser.java两个文件可以使用。
$ java org.antlr.Tool T.g
ANTLR Parser Generator Version 3.0 1989-2007
$ ls
T.g TLexer.java T__.g
T.tokens TParser.java
$
3) 定义测试程序类
import org.antlr.runtime.*;
public class Test {
public static void main(String[] args) throws Exception
{
// create a CharStream that reads from standard input
ANTLRInputStream input = new ANTLRInputStream(System.in);
// create a lexer that feeds off of input CharStream
TLexer lexer = new TLexer(input);
// create a buffer of tokens pulled from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// create a parser that feeds off the tokens buffer
TParser parser = new TParser(tokens);
// begin parsing at rule r
parser.r();
}
}
4) 编译执行
需要注意的是输入结束符是^Z
$ javac TLexer.java TParser.java Test.java
$ java Test
call foo;
^Z
invoke foo