熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Antlr入門詳細教程

2013-11-23 20:03:03  來源: Java開源技術 
Antlr 的主要類
  
  Antlr 中有主要類有兩種(其實還有一種 TreeLexer )
  
  Lexer 文法分析器類主要用於把讀入的字節流根據規則分段既把長面條根據你要的尺寸切成一段一段)並不對其作任何修改
  
  Parser 解析器類主要用於處理經過 Lexer 處理後的各段一些具體的操作都在這裡
 
  二 Antlr 文法文件形式
  
  Antlr 文件是 *g 形式即以 g 為後綴名
  
  例如 tg
  
  class P extends Parser
 
  startRule
  
     nNAME
 
  {Systemoutprintln(Hi there +ngetText())}
 
  
 
  class L extends Lexer
  
  // oneormore letters followed by a newline
 
  NAME   ( a……z|A……Z )+ NEWLINE
 
  
 
  NEWLINE
 
     \r \n   // DOS
  
  |   \n        // UNIX
 
  
  
  
  具體成分分析
 
   總體結構
 
  
  Class P extends Parser
 
  Class L extends Lexer
 
  兩行同 JAVA 繼承一樣 P 繼承 Parser 類 L 繼承 Lexer 類每個 g 文件只能各有一個

   Lexer 類分析
 
  一般按照
 
  類型名匹配的具體規則
 
  的形式構成是分隔字節流的依據同時可以看到裡面可以互相引用如本例中的類型名 NEWLINE 出現在 NEW 的匹配規則中
 
   Parser 類分析
 
  一般按照
 
  起始規則名
 
  規則實例名類型名或規則名
 
  {Java 語句…… }
 
  
  

  ……
 
  的形式構成
 起始規則名任意
 
  規則實例名就象 Java 中 String s 的 s 一樣規則實例名用於在之後的 JAVA 語句中調用
 
  類型名或規則名可以是在 Lexer 中定義的類型名也可以是 Parser 中定義的規則名感覺就像是 int 與 Integer 的區別
 
  Java 語句指當滿足當前規則時所執行的語句 Antlr 會自動嵌入生成的 java 類中

  三生成 Java 類
 
   從 上下載 antlrxxxjar
 
   配置環境變量 classpath=x\jdk\lib\toolsjarx\antlrxxxjar
 
   在 tg 所在目錄下執行
 
  java antlrTool tg
 
  會在當前目錄下生成如下文件

  Ljava Lexer 文法分析器 java 類
 
  Pjava Parser 解析器 java 類
 
  PTokenTypesjava Lexer 中定義的類型具體化供 Parser 解析器調用

  PTokenTypestxt 當外部的(如 tg )要調用當前的類型或規則時要用到本文件

  四執行
 
   編寫 Main 類

  import javaio*
 
  class Main {

  public static void main(String[] args) {
 
  try {
 
  L lexer = new L(new DataInputStream(Systemin))
 
  P parser = new P(lexer)

  parserstartRule()
 
  } catch(Exception e) {

  Systemerrprintln(exception +e)
 
  }

   執行
 
  c\> javac *java
 
  c\> java Main

  Terence

  ^Z

  Hi there Terence
  c\>

From:http://tw.wingwit.com/Article/program/Java/ky/201311/27856.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.