`
庄表伟
  • 浏览: 1135444 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ANTLR学习心得——准备工作与第一个例子

阅读更多
二、准备工作
 
  我这里的介绍,只针对Java程序员,非java程序员,同样可以很方便的使用ANTLR,比如:C#、C++、Python。只是我这里就不多讲了。
 
  这是一篇介绍给C++程序员的教程,但是里面使用VC++ 6.0做为开发IDE的,下次我有时间了,再去研究研究Dev-C++去
 
  要开始使用ANTLR,需要下载以下内容:
  antlr-2.7.5.exe:把这个exe文件放在硬盘里的某一个地方,然后设置添加一个PATH,以后就可以在任意目录下,使用这个工具了。
  antlr-2.7.5.tar.gz:这是antlr最新的源代码,慢慢研究。
  Eclipse SDK 3.1:这个总是要的吧。
 
  解压缩antlr-2.7.5.tar.gz。有两个目录特别值得关注,一个是anltr,里面是antlr的源码,你可以在Eclipse里建一个Antlr项目,将这里的源码导入进去,以后慢慢研究。另外一个是examples目录,里面有四种语言的例子,我们只需要关系java的例子就可以了。
 
三、Hello World
 
  ANTLR-LexerExample,这可以算是ANTLR中,最简单的一个例子了。我们试着在Eclipse里跑一遍。
 
  在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入门例子

    antlr4 hello world。antlr4 hello world。antlr4 hello world。antlr4 hello world

    antlr 例子集 v3版

    antlr的示例代码 含各种语言的例子 。。。。。。。。。。。。

    antlr4权威指南

     第一部分介绍了ANTLR,提供了一些与语言相关的背景知识,并展示了ANTLR的一些简单应用。在这一部分中,你会了解ANTLR的句法以及主要用途。  第二部分是一部有关设计语法和使用语法来构建语言类应用程序的“百科...

    antlr4应用例子

    基于antlr4的语义action和属性的编译器前端例子

    用Antlr 分析布尔表达式的例子

    用antlr分析处理布尔表达式的例子,包括:语法定义.g文件;生成的词法分析和语法分析器;带有图形界面的分析器调用代码。 其中带有GUI的分析器ParserFrame,可以用于任何.g文件生成的词法、语法分析器,只要通过改变...

    ANTLR指南(v3.0)第1~5章WORD版

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个...第一章Hello World 第二章 编译原理基础知识 第三章 词法分析 第四章 语法分析 第五章 嵌入文法的Actions

    ANTLR指南(v3.0)第1~5章HTML版

    ANTLR—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个...第一章Hello World 第二章 编译原理基础知识 第三章 词法分析 第四章 语法分析 第五章 嵌入文法的Actions

    The Definitive ANTLR4Reference 学习笔记

    The Definitive ANTLR4Reference 学习笔记 The Definitive ANTLR4Reference 学习笔记

    ANTLR和Soot的完整例子

    我们的编译原理实验目的: 1、 写出自己的Pl0文法,用ANTLR生成语法树 2、 写出自己的ASTVisitor遍历语法树,用Jimple生成三地址代码 3、 生成.java可执行程序

    antlr3.12--工具+JAR+例子

    antlr3.12--工具+JAR+例子

    The+Definitive+ANTLR+4+Reference 学习笔记word

    The+Definitive+ANTLR+4+Reference 学习笔记word The+Definitive+ANTLR+4+Reference 学习笔记word

    开源项目-antlr-antlr4.zip

    开源项目-antlr-antlr4.zip,第一个阿尔法版本的antlr4 go目标发布。

    antlr3最终手册

    antlr3最好的学习文档 antlr3详细说明手册

    antlr-2.7.7源码

    antlr 2.7.7源码,下载自:http://repo.spring.io/plugins-release/org/antlr/com.springsource.antlr/2.7.7/

    JavaEE源代码 antlr-2.7.6rc1

    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.ppt

    ANTLR v3 Overview (for ANTLR v2 users)

Global site tag (gtag.js) - Google Analytics