• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Antlr入門詳細教程

    發布: 2007-6-22 07:38 | 作者:   | 來源:   | 查看: 38次 | 進入軟件測試論壇討論

    領測軟件測試網

       
      一、 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:\>

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>