国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Antlr入門詳細教程

2019-11-18 12:54:02
字體:
來源:轉載
供稿:網友

  一、 Antlr 的主要類:
  
  Antlr 中有主要類有兩種(其實還有一種 TreeLexer )
  
  Lexer: 文法分析器類。主要用于把讀入的字節流根據規則分段。既把長面條根據你要的尺寸切成一段一段:)并不對其作任何修改。
  
  Parser: 解析器類。主要用于處理經過 Lexer 處理后的各段。一些具體的操作都在這里。
 
  二、 Antlr 文法文件形式:
  
  Antlr 文件是 *.g 形式,即以 g 為后綴名。
  
  例如: t.g
  
  class P extends Parser;
 
  startRule
  
  :   n:NAME
 
  {System.out. 
  ;
 
  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:/>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 濮阳市| 宿松县| 湘西| 乐至县| 富川| 山阴县| 肇州县| 临漳县| 基隆市| 镇巴县| 扶绥县| 宜兴市| 马边| 安泽县| 寿宁县| 泸定县| 浑源县| 六安市| 普陀区| 平湖市| 界首市| 沧州市| 乌拉特中旗| 太谷县| 买车| 寿宁县| 定兴县| 大邑县| 华安县| 巴楚县| 漳平市| 陵川县| 于都县| 张家界市| 凌源市| 阜南县| 辽宁省| 扎鲁特旗| 博爱县| 正安县| 鄂伦春自治旗|