`
liuwei_blog
  • 浏览: 94979 次
  • 性别: 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资源

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

    antlr 五分钟入门

    通过这个五分钟的入门教程,初学者可以快速了解ANTLR的基本用法,为更深入的学习打下基础。对于想在实际项目中使用ANTLR的人来说,这是一篇很好的起点。不过,真正掌握ANTLR并能灵活运用,还需要对编译原理有一定...

    编译器的编译器antlr的教程

    ANTLRWorks是ANTLR的一个集成开发环境,特别适合新手入门。你可以通过ANTLRWorks: 1. 创建语法文件:在ANTLRWorks中,你可以直观地定义语法规则,生成相应的词法和解析器代码。 2. 调试语法文件:ANTLRWorks提供了...

    antlr-v4jar包和使用教程

    "antlr4_getting-started.md at master · antlr_antlr4 · GitHub_files" 这个文件名看起来是一个链接到GitHub上的目录,通常包含与ANTLR 4入门教程相关的其他资源,如示例代码、图片或其他辅助文件。访问这个链接...

    antlr4cs:ANTLR 4的原始,高度优化的C#目标

    入门 步骤1:安装Java(推荐) :warning: 从4.5.0-alpha003版本开始,不再需要用户安装Java运行时才能使用ANTLR 4编译.NET应用程序。但是,安装Java将大大提高代码生成过程的性能。 强烈建议使用此功能,尤其是在...

    java-antrl-example.rar_ANTLR JAVA_Antlr Rewrite_ant_antlr_antrl

    描述中提到的“ANTLR 编译器入门范例”表明这个资源是针对新手的教程材料,它包括了超过20个不同的示例,覆盖了大约200个文件。这些样本通常会涵盖ANTLR的基础用法,如定义语法规则、生成解析器、处理输入、构建抽象...

    antlr_2.7.6.jar.zip

    有许多在线教程和书籍可以帮助初学者入门。 9. **版本升级**:尽管ANTLR 2.7.6是一个较旧的版本,但理解它的工作原理对于理解ANTLR的更新版本仍然是有益的。随着版本的迭代,ANTLR增加了许多新的特性和优化,如树...

    The Definitive ANTLR Reference

    2. **ANTLR使用教程**:详细讲解ANTLR的基本使用方法,包括如何定义文法、生成解析器代码等。 3. **高级主题**:涉及ANTLR的高级特性,如错误处理、树解析等。 4. **案例研究**:通过具体实例展示ANTLR的应用场景和...

    ANTLR_V2资料汇总

    `ANTLR2 Introduction.url`和`jGuru ANTLR FAQ Index By Topic.url`是两个链接,分别指向ANTLR_v2的入门介绍和jGuru网站上的ANTLR FAQ索引,这些都是在线资源,用户可以通过这些链接获取更多实时更新的信息和支持。...

    hibernate入门教程

    ### Hibernate入门教程知识点详解 #### 一、简介与环境搭建 **标题与描述解析:** - **标题**:“hibernate入门教程”旨在为初学者提供一个系统学习Hibernate的起点,帮助他们理解Hibernate的基本概念及如何使用...

    《Hibernate入门与提高》------讲解详细,容易理解

    在第1章“Hibernate入门”中,作者首先介绍了本章的目标,即为Hibernate初学者提供一个基础教程。教程从一个简单的命令行应用开始,使用驻留内存数据库HSQL DB,以便在不安装额外数据库服务器的情况下进行学习。这个...

    struts入门教程

    Struts是一种基于MVC(模型-视图-控制器)模式设计的Web应用框架,它是Apache软件基金会...通过本入门教程的学习,初学者应该能够掌握搭建Struts开发环境的基本步骤,并通过示例程序了解Struts框架的基本使用方法。

    Pck:代码汇总和快速入门指南

    这份“Pck-Code-Roundup-and-Quick-Start-Guide.pdf”很可能包含详细教程和实例,帮助新手快速上手PCK。同时,“下载链接.txt”可能是获取更多资源的指引,而“pck.zip”可能包含了PCK库的源代码或预编译的库文件,...

    Android 101 Labs 等 13 本

    ANTLR 4简明教程.epub Book on TypeScript.epub Markdown 入门参考.epub Node.js 调试指南.epub PyQt5 中文教程.epub Python One to Million.epub Rangle's Angular 2 Training Book 中文版.epub 安卓校招面试指南....

    hypersnap

    MHT文件是一种单个文件的网页存档,可能包含关于Antlr 3.0的教程或介绍。 4. TTworkbench_1stSteps.pdf:TTWorkbench可能是一个测试工具或环境,这个PDF文件可能是它的入门指南,指导用户如何开始使用。 5. 10.1....

    hibernate 入门

    《Hibernate 入门》 Hibernate 是一款强大的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作,极大地简化了数据访问层的编码工作。本教程主要面向Hibernate初学者,通过一个简单的...

    JSHOP2.zip

    如果遇到问题,建议参照描述中提到的博客文章《JSHOP2的环境配置——详细教程(原创)》,该教程将详细指导用户完成整个配置过程。 **ANTLR.jar与Makefile** `antlr.jar`是ANTLR(ANother Tool for Language ...

Global site tag (gtag.js) - Google Analytics