`
liuwei_blog
  • 浏览: 91294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Antlr入门详细教程

    博客分类:
  • java
阅读更多

一、 Antlr 的主要类:
  
  Antlr 中有主要类有两种(其实还有一种 TreeLexer )
  
  Lexer: 文法分析器类。主要用于把读入的字节流根据规则分段。既把长面条根据你要的尺寸切成一段一段:)并不对其作任何修改。
  
  Parser: 解析器类。主要用于处理经过 Lexer 处理后的各段。一些具体的操作都在这里。
 
  二、 Antlr 文法文件形式:
  
  Antlr 文件是 *.g 形式,即以 g 为后缀名。
  
  例如: t.g

      class P extends Parser;
 
    startRule
   
    :   n:NAME
 
    {System.out.println("Hi there, "+n.getText());}
 
    ;
 
    class L extends Lexer;
   
    // one-or-more letters followed by a newline
 
    NAME:   ( 'a'..'z'|'A'..'Z' )+ NEWLINE
 
    ;
 
    NEWLINE
 
    :   '\r' '\n'   // DOS
   
    |   '\n'        // UNIX
 
    ;


  
  具体成分分析:
 
  1 、总体结构
 
  
  Class P extends Parser
 
  Class L extends Lexer
 
  两行同 JAVA 继承一样, P 继承 Parser 类; L 继承 Lexer 类。每个 .g 文件只能各有一个。

  2 、 Lexer 类分析
 
  一般按照
 
  类型名:匹配的具体规则;
 
  的形式构成。是分隔字节流的依据。同时可以看到里面可以互相引用。如本例中的类型名 NEWLINE 出现在 NEW 的匹配规则中。
 
  3 、 Parser 类分析
 
  一般按照
 
  起始规则名:
 
  规则实例名:类型名或规则名
 
  {Java 语句……; }
 
  
  ;

  ……
 
  的形式构成。
 起始规则名:任意。
 
  规则实例名:就象 Java 中“ String s ;”的 s 一样。规则实例名用于在之后的 JAVA 语句中调用。
 
  类型名或规则名:可以是在 Lexer 中定义的类型名,也可以是 Parser 中定义的规则名。感觉就像是 int 与 Integer 的区别。
 
  Java 语句:指当满足当前规则时所执行的语句。 Antlr 会自动嵌入生成的 java 类中。

  三、生成 Java 类
 
  1 、从 www.antlr.org 上下载 antlr-x.x.x.jar
 
  2 、配置环境变量: classpath=.;x:\jdk\lib\tools.jar;x:\antlr-x.x.x.jar
 
  3 、在 t.g 所在目录下执行:
 
  java antlr.Tool t.g
 
  会在当前目录下生成如下文件:

  L.java : Lexer 文法分析器 java 类。
 
  P.java : Parser 解析器 java 类。
 
  PTokenTypes.java : Lexer 中定义的类型具体化,供 Parser 解析器调用。

  PTokenTypes.txt :当外部的(如 t2.g )要调用当前的类型或规则时要用到本文件。

  四、执行
 
  1 、编写 Main 类

      import java.io.*;
 
    class Main {

    public static void main(String[] args) {
 
  try {
  
   L lexer = new L(new DataInputStream(System.in));
   
   P parser = new P(lexer);

   parser.startRule();
  
  } catch(Exception e) {

   System.err.println("exception: "+e);
  
  }
 }
}

  2 、执行
 
  c:\> javac *.java
 
  c:\> java Main

  Terence

  ^Z

  Hi there, Terence
  c:\>

分享到:
评论

相关推荐

    ANTLR入门详细教程定稿.pdf

    ANTLR入门详细教程定稿.pdf

    Antlr入门介绍小demo

    Antlr入门介绍小demo

    ANTLR入门 中英文

    ANTLR入门 中英文 Terence Parr 程序员 2004 马维达 译 原文: An Introduction To ANTLR

    ANTLR实现计算器 ANTLR入门

    2004年第3期 程序员 中的文章,教你从头到尾实现一个计算器。ANTLR实现计算器 ANTLR入门

    antlr入门 编译领域

    antlr入门,用于在学习编译原理课程和做词法分析,语法分析时有用。

    收集的一些antlr资源

    Antlr入门详细教程.doc 利用ANTLR生成C 描述的分析程序.htm 使用 Antlr 处理文本.htm 使用 Antlr 开发领域语言.htm 强悍的ANTLR Lexer.htm a little madness » Blog Archive » ANTLR By Example Part 1 The ...

    ANTLR 4简明教程.epub

    ANTLR 4简明教程.epub

    Antlr入门详解

    Antlr入门详解 中国知网论文:ANRLR安装、使用、文法详解

    antlr4入门例子

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

    ANTLR3.0简单编译入门.pdf

    ANTLR3.0简单编译入门.pdf,学习antlr很好的资源

    编译器的编译器antlr的教程

    教程定位为帮助零基础的初学者入门到掌握编译前端,为熟悉antlr的人,提供一些问题备忘录,以及共享一些对antlr本身设计的看法。希望能对您有所帮助。产品的开发需要,对词法语法解析工具选型,选了几个工具,javacc...

    关于antlr的详细教材

    ANTLR是ANother Tool for Language Recognition的缩写“又一个语言识别工具”。从名字上可以看出在ANTLR出现之前已经存在其它语言识别工具了(如LEX [1],YACC [2])。ANTLR的官方定义为:根据一种可以嵌入如Java, ...

    Antlr4指南

    Antlr4指南 权威介绍 学习教程

    antlr 五分钟入门

    NULL 博文链接:https://xinglijun1973.iteye.com/blog/1906811

    antlr经典教程,The definitive antlr reference(英文)

    The definitive antlr reference是一本经典的antlr教程,对antlr的Grammar,构造AST和以及编译技术,LL分析法都有深入的剖析,在antlr教程匮乏的时代,此书无疑是一个最好的补充。

    antlr3最终手册

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

    ANTLR之Hello World

    ANTLR之"Hello World",是ANTLR的入门。

    antlr4权威指南

     ANTLR 4有哪些神奇之处ANTLR 4引入了一些新功能,降低了入门门槛,使得语法和语言类应用程序的开发更加容易。最重要的新特性在于,ANTLR 4几乎能够处理任何语法(除了间接左递归,稍后会提到)。在ANTLR将你的语法...

Global site tag (gtag.js) - Google Analytics