二、准备工作
我这里的介绍,只针对Java程序员,非java程序员,同样可以很方便的使用ANTLR,比如:C#、C++、Python。只是我这里就不多讲了。
这是一篇介绍给C++程序员的教程,但是里面使用VC++ 6.0做为开发IDE的,下次我有时间了,再去研究研究Dev-C++去
要开始使用ANTLR,需要下载以下内容:
解压缩antlr-2.7.5.tar.gz。有两个目录特别值得关注,一个是anltr,里面是antlr的源码,你可以在Eclipse里建一个Antlr项目,将这里的源码导入进去,以后慢慢研究。另外一个是examples目录,里面有四种语言的例子,我们只需要关系java的例子就可以了。
三、Hello World
在Eclipse里新建一个项目,比如就叫Simple。下载这个
simple.g文件,放在Simple的src目录下。然后在DOS窗口下,执行“ANTLR simple.g”命令。
回到Eclipse项目窗口,刷新项目,你会发现多了两个个java程序,SimpleLexer.java;SimpleLexerTokenTypes.java,还有一个文本文件:SimpleLexerTokenTypes.txt。
再新建一个测试类Main.java。
import java.io.*;
public class Main {
public static void main(String[] args) {
SimpleLexer simpleLexer = new SimpleLexer(System.in);
while(true) {
try {
simpleLexer.nextToken();
} catch(Exception e) {}
}
}
}
|
运行这个程序,然后在控制台随便输入一些字符、数字之类的东西,最后以“.”结尾。这个程序就会打印出一些内容来了。比如,你可以输入:
This Lexer recognises strings and numbers: hello 22 goodbye 33.
程序就会输出:
Found alpha: This
Found alpha: Lexer
Found alpha: recognises
Found alpha: strings
Found alpha: and
Found alpha: numbers
Found alpha: hello
Found numeric: 22
Found alpha: goodbye
Found numeric: 33
并且结束。如果你不输入最后的“.”,那么就还能继续使用这个程序。
这是怎么弄的呢?让我们来看看那个simple.g文件。
class SimpleLexer extends Lexer;
options { k=1; filter=true; }
ALPHA : ('a'..'z'|'A'..'Z')+
{ System.out.println("Found alpha: "+getText()); }
;
NUMERIC : ('0'..'9')+
{ System.out.println("Found numeric: "+getText()); }
;
EXIT : '.' { System.exit(0); } ; |
class SimpleLexer extends Lexer;
表明我们想定义一个词法分析的类,SimpleLexer。
options的内容我们先跳过,下次再说。
ALPHA、NUMERIC、EXIT是SimpleLexer声明的,它能够认识的三种词。字母、数字和结束符。当词法分析器,发现了一个以上的,连续的,大小写英文字母的时候,它就认为自己遇到了字母;如果发现了一个以上连续的数字0~9时,它就认为自己遇到了数字,EXIT也同理可知。
{}中的代码,则是告诉词法分析器,在发现了某种词之后,可以做的动作。
最终生成的SimpleLexer.java;SimpleLexerTokenTypes.java,各位可以自己去看看,研究一下。
(未完待续)
分享到:
相关推荐
antlr4 hello world。antlr4 hello world。antlr4 hello world。antlr4 hello world
antlr的示例代码 含各种语言的例子 。。。。。。。。。。。。
第一部分介绍了ANTLR,提供了一些与语言相关的背景知识,并展示了ANTLR的一些简单应用。在这一部分中,你会了解ANTLR的句法以及主要用途。 第二部分是一部有关设计语法和使用语法来构建语言类应用程序的“百科...
基于antlr4的语义action和属性的编译器前端例子
用antlr分析处理布尔表达式的例子,包括:语法定义.g文件;生成的词法分析和语法分析器;带有图形界面的分析器调用代码。 其中带有GUI的分析器ParserFrame,可以用于任何.g文件生成的词法、语法分析器,只要通过改变...
ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个...第一章Hello World 第二章 编译原理基础知识 第三章 词法分析 第四章 语法分析 第五章 嵌入文法的Actions
ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个...第一章Hello World 第二章 编译原理基础知识 第三章 词法分析 第四章 语法分析 第五章 嵌入文法的Actions
The Definitive ANTLR4Reference 学习笔记 The Definitive ANTLR4Reference 学习笔记
我们的编译原理实验目的: 1、 写出自己的Pl0文法,用ANTLR生成语法树 2、 写出自己的ASTVisitor遍历语法树,用Jimple生成三地址代码 3、 生成.java可执行程序
antlr3.12--工具+JAR+例子
The+Definitive+ANTLR+4+Reference 学习笔记word The+Definitive+ANTLR+4+Reference 学习笔记word
开源项目-antlr-antlr4.zip,第一个阿尔法版本的antlr4 go目标发布。
antlr3最好的学习文档 antlr3详细说明手册
antlr 2.7.7源码,下载自:http://repo.spring.io/plugins-release/org/antlr/com.springsource.antlr/2.7.7/
JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源代码 antlr-2.7.6rc1JavaEE源...
ANTLR v3 Overview (for ANTLR v2 users)