<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

    CowNew開(kāi)源團(tuán)隊(duì)

    http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      363 隨筆 :: 2 文章 :: 808 評(píng)論 :: 0 Trackbacks

    一、 Antlr 的主要類:

    Antlr 中有主要類有兩種(其實(shí)還有一種 TreeLexer

    Lexer: 文法分析器類。主要用于把讀入的字節(jié)流根據(jù)規(guī)則分段。既把長(zhǎng)面條根據(jù)你要的尺寸切成一段一段:)并不對(duì)其作任何修改。

    Parser: 解析器類。主要用于處理經(jīng)過(guò) 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 、總體結(jié)構(gòu)

    Class P extends Parser

    Class L extends Lexer

    兩行同 JAVA 繼承一樣, P 繼承 Parser 類; L 繼承 Lexer 類。每個(gè) .g 文件只能各有一個(gè)。

    2 Lexer 類分析

    一般按照

    類型名:
    ????
    匹配的具體規(guī)則
    ????

    的形式構(gòu)成。是分隔字節(jié)流的依據(jù)。同時(shí)可以看到里面可以互相引用。如本例中的類型名 NEWLINE 出現(xiàn)在 NEW 的匹配規(guī)則中。

    3 Parser 類分析

    一般按照

    起始規(guī)則名:

    ???????? 規(guī)則實(shí)例名:類型名或規(guī)則名

    ??????????????????????????? {Java 語(yǔ)句。。。; }

    ????????

    ???????? 。。。。。。。。。

    的形式構(gòu)成。

    起始規(guī)則名:任意。

    規(guī)則實(shí)例名:就象 Java 中“ String s ;”的 s 一樣。規(guī)則實(shí)例名用于在之后的 JAVA 語(yǔ)句中調(diào)用。

    類型名或規(guī)則名:可以是在 Lexer 中定義的類型名,也可以是 Parser 中定義的規(guī)則名。感覺(jué)就像是 int Integer 的區(qū)別。

    Java 語(yǔ)句:指當(dāng)滿足當(dāng)前規(guī)則時(shí)所執(zhí)行的語(yǔ)句。 Antlr 會(huì)自動(dòng)嵌入生成的 java 類中。

    ?

    ?

    ?

    三、生成 Java

    1 、從 www.antlr.org 上下載 antlr-x.x.x.jar

    2 、配置環(huán)境變量: classpath=.;x:\jdk\lib\tools.jar;x:\antlr-x.x.x.jar

    3 、在 t.g 所在目錄下執(zhí)行:

    java antlr.Tool t.g

    會(huì)在當(dāng)前目錄下生成如下文件:

    L.java Lexer 文法分析器 java 類。

    P.java Parser 解析器 java 類。

    PTokenTypes.java Lexer 中定義的類型具體化,供 Parser 解析器調(diào)用。

    PTokenTypes.txt :當(dāng)外部的(如 t2.g )要調(diào)用當(dāng)前的類型或規(guī)則時(shí)要用到本文件。

    ?

    ?

    ?

    四、執(zhí)行

    1 、編寫(xiě) 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 、執(zhí)行
    c:\> javac *.java
    c:\> java Main
    Terence
    ^Z
    Hi there, Terence
    c:\>

    本文作者kingchou是CowNew開(kāi)源團(tuán)隊(duì)SQL解析引擎項(xiàng)目組負(fù)責(zé)人。
    更多內(nèi)容請(qǐng)見(jiàn)CowNew開(kāi)源團(tuán)隊(duì)網(wǎng)站
    www.cownew.com
    論壇 http://www.cownew.com/newpeng/

    posted on 2006-05-23 02:22 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(2218) 評(píng)論(2)  編輯  收藏

    評(píng)論

    # re: antlr入門(mén)教程1 2006-05-23 10:05 Long Long Ago
    把代碼整理一下會(huì)更好  回復(fù)  更多評(píng)論
      

    # re: antlr入門(mén)教程1 2006-05-25 19:17 Programus
    只有1?

    后續(xù)呢?具體些的例子和做法呢?

    期待期待……  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费一区二区无码视频在线播放| 亚洲短视频在线观看| 亚洲va无码手机在线电影| 亚洲国产精品人久久| 亚洲伊人久久大香线蕉| 亚洲精品自偷自拍无码| 少妇亚洲免费精品| 久久一区二区三区免费播放| 久久精品国产免费观看 | 久久久免费的精品| 在线视频免费观看高清| 四虎永久成人免费| 亚洲级αV无码毛片久久精品| 亚洲小视频在线观看| 亚洲人成网男女大片在线播放| 天天综合亚洲色在线精品| 91视频免费观看高清观看完整| 18禁无遮挡无码国产免费网站| 女人18毛片a级毛片免费| 精品国产香蕉伊思人在线在线亚洲一区二区| 国产偷v国产偷v亚洲高清| 久久久久精品国产亚洲AV无码| 真正全免费视频a毛片| 97无码人妻福利免费公开在线视频 | 一级做a爰性色毛片免费| 182tv免费观看在线视频| 国产又大又黑又粗免费视频| 亚洲AV永久无码精品| 国产亚洲精aa在线看| 久久久久免费视频| 成人免费无码视频在线网站| 亚洲综合网站色欲色欲| 亚洲www在线观看| 日韩大片免费观看视频播放| 18级成人毛片免费观看| 免费a级黄色毛片| 亚洲经典在线中文字幕| 一边摸一边爽一边叫床免费视频| 亚洲免费一级视频| 亚洲综合熟女久久久30p| 亚洲欧美日韩国产精品一区|