wangchao.org
添加收藏 | 博客
 
购物视频论坛IT业界自然风光美女图片王朝网络小游戏BT下载生活百科编程设计手机图铃小说
 
笑话 | 水库 | 娱乐 | 体育 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《Antlr入门详细教程返回上一页 
 
1楼 

Antlr入门详细教程

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  一、 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 的主要类:      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  入门  教程  详细  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 
 
 
 更多内容
 ·ant+cactus+tomcat5.5容器内单元 ·Weblogic70的配置简单手动配置we ·JBuilder 7 WebLogic 6.X 详细配 ·JBuilder 7 WebLogic 6.X 详细配
 ·Java Web Services的远端调用 ·Web Service 和 J2EE ·学用Java Web Start ·Java Web Start介绍
 ·Java Web Service ·用Tea简化Web开发 ·Sun公司的WEB服务战略 ·Struts心得--DispatchAction使用
 ·实战JBuilder7+WebLogic7存取SQL ·Struts控制器组件简单介绍 ·JBuilder2005 Struts深度体验之新 ·运用Jakarta Struts的七大实战心
 ·JBuilder2005 Struts深度体验之改 ·Struts异常机制(Exception Hand ·struts源代码阅读(Commons-Bean ·分享:用Struts上传多个文件的方法
 ·Struts标签中的多层logic:iterat ·用JAAS 实现in Struts Web App(二 ·用JAAS 实现in Struts Web App(一 ·Struts Menu中基于角色的权限管理
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有