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

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

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

    antlr簡介

    http://m.tkk7.com/Files/lsbwahaha/ANTLR_info.pdf
    antlr簡介


    目前的ANTLR支持的語法層的選項主要包括:

    語言選項(Language)、

    輸出選項(output)、

    回溯選項(backtrack)、

    記憶選項 memorize)、

    記號詞庫(tokenVocab)、

    重寫選項(rewrite)、

    超類選項(superClass)、

    過濾選項(Filter)、

    AST標簽類型(ASTLabelType

    K選項

     

     

    /**
            //一些寫法







    k=2;

            backtrack=true;

            memoize=true;

    */

     

    1.   語言選項 language

     

    語言選項指定了ANTLR將要產生的代碼的目標語言,默認情況下該選項設置為了Java。需要注意的是,ANTLR中的嵌入的動作必須要使用目標語言來寫。

    grammar T;
    options {
        language=Java;
    }

     

    ANTLR使用了特有的基于字串模板(StringTemplate-based)代碼生成器,構建一個新的目標語言顯得較為簡單,因此我們可以構建多種 語言,諸如JavaCC++C#PythonObjective-CRuby等等。語言選項讓ANNTLR去模板目錄(例如 org/antlr/codegen/templates/Java or org/antlr/codegen/templates/C)下尋找合適的模板,并使用模板來構建語言。該目錄下包含大量的模板,我們可以向其中加入其 他的模板以滿足我們的需求。

    2.   輸出選項 output

    輸出選項控制了ANTLR輸出的數據結構,目前支持兩種輸出:抽象語法樹——ASTAbstract Syntax Trees)和字串模板(StringTemplates——template。當output這個選項被設置后,所有的規則都被輸出成了AST或者 template

    grammar T;
    options {
        output=AST;
    }

     

    3.   回溯選項backtrack

    當回溯選項打開的時候,在執行一個LL(K)失敗的時候,ANTLR會返回至LL(K)開始而嘗試其他的規則。

     

    4.   記憶選項 memorize

    memoize選項打開以后,每條解析方法(Paser Method)開始之前,ANTLR會首先檢測以前的嘗試結果,并在該方法執行完成之后記錄該規則是否執行成功。但是注意,對于單條的規則打開此選項經常比在全局上打開該規則效率更高。

     

    5.   記號詞庫(tokenVocab

    說白了就是output輸出目錄中的XX.tokens文件中的定義可以方便的給 大型工程中多個.g中的符號同步更新。

     

    大型的工程中常常利用AST作為中間產物對輸入進行多次分析并最終生成代碼。對AST的遍歷時需要經常使用樹語法(tree grammar),而tree grammar中經常需要將符號與其他的文件中的符號進行同步或者更新。tokenVocab實現了這個功能。
    例如我們定義了下面的一個語法文件:

    grammar P;
    options {
        output=AST;
    }
    expr: INT ('+' ^ INT)* ;
    INT : '0'..'9' +;
    WS : ' ' | '\r' | '\n' ;
    利用該文件生成了一個標記:P.token,并生成了語法樹(AST)。這時我們需要一個用于遍歷該ASTtree grammar,并通過tree grammar 中的tokenVocab選項來向其中更新tokens:

    tree grammar Dump;
    options {
        tokenVocab=P;
        ASTLabelType=CommonTree;
    }
    expr: ^( '+' expr {System.out.print('+' );} expr )
        | INT {System.out.print($INT.text);}
        ;

    編譯tree grammar的時候ANTLR默認會在當前目錄下尋找.token文件,我們可以通過-lib選項來設置用于尋找.token文件的目錄,例如:
    java org.antlr.Tool -lib . Dump.g

    6.   重寫選項(rewrite

    通過重寫選項可以改變ANTLR對輸入的默認處理規則,一般用在輸出為template的情況下。將該選項使能之后,ANTLR將一般的輸入直接拷貝至輸出,而將適于模板重寫規則的輸入做其他的處理。

    7.   超類選項(superClass

    用于指定一個超類。

    8.   過濾選項(Filter

    9.   AST標簽類型(ASTLabelType

    10.             K選項

       K選項用于限制對LL(K)進行語法分析的次數,從而提高了ANTLR的解析速度。K只能為*或者數字,默認為*

     

     

     

     

    屬性和動作

    動作(Actions)實際上是用目標語言寫成的、嵌入到規則中的代碼(以花括號包裹)。它們通常直接操作輸入的標號,但是他們也可以用來調用相應的外部代碼。屬性,到目前為止我的理解還不多,感覺像是C++中類里面的成員,一會看完應該會更清楚一些。

    1.
    語法動作(Grammar Actions
    動作(Actions)是指嵌在語法中的、用目標語言寫成的代碼片段。ANTLR則把這些代碼(除了用$%標記的以外)逐字地插入到生成的識別器中。
    動作可以放到規則的外邊,也可以嵌入到某條規則當中。當動作位于規則之外時候,這些動作同城定義了一些全局的或者是類的成員(變量或者成員函數);而當其嵌入規則之中時,則用于執行某些特定的命令,這些命令在識別器識別了其預訂的字符的時候就會開始執行。例如下面的例子:

    parser grammar T;
    @header {
        package p;
    }
    @members {
        int i;
        public TParser(TokenStream input, int foo) {
            this(input);
            i = foo;
        }
    }
    a[int x] returns [int y]
    @init {int z=0;}
    @after {System.out.println("after matching rule; before finally");}
    : {
    action1} A {action2 }
    ;
    catch[RecognitionException re] {
        System.err.println("error");
    }
    finally {
    do-this-no-matter-what }

    從中可以看出,前面的兩個動作,@head and @members是兩個處于規則之外的全局的動作,定義了一些變量和類;而后兩個則分別在a這個規則的前后執行(@init在前,@after在后,這個在前面提到過)。 這里針對兩種類型詳細敘述。


    antlr簡介

    posted on 2010-12-17 19:20 胡鵬 閱讀(1510) 評論(0)  編輯  收藏 所屬分類: java基礎

    導航

    <2010年12月>
    2829301234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    agile

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲?v女人的天堂在线观看| 亚洲一级毛片免费在线观看| 日韩毛片免费在线观看| 亚洲午夜一区二区电影院| 蜜桃成人无码区免费视频网站| 亚洲区小说区激情区图片区| a毛片免费观看完整| 国产亚洲精品国产| 一级毛片免费播放| 亚洲欧洲校园自拍都市| 中文字幕影片免费在线观看| 亚洲精品无码mⅴ在线观看| 暖暖日本免费在线视频| 在线看亚洲十八禁网站| 精品国产香蕉伊思人在线在线亚洲一区二区| 日本一区二区三区在线视频观看免费 | 久久久久免费看成人影片| 亚洲视频免费播放| 精品熟女少妇AV免费观看| 亚洲精品无码成人| 亚洲色WWW成人永久网址| 日韩电影免费在线观看中文字幕| 亚洲AV日韩精品久久久久| 免费精品国产自产拍在线观看图片 | a在线视频免费观看在线视频三区| 国产亚洲免费的视频看| 精品无码免费专区毛片| 亚洲av综合日韩| 亚洲国产无套无码av电影| 日韩精品人妻系列无码专区免费| 亚洲av永久综合在线观看尤物| 午夜精品在线免费观看| yellow免费网站| 亚洲最大在线观看| 免费A级毛片无码A| 99re视频精品全部免费| 亚洲av第一网站久章草| 亚洲国产精品va在线播放| 成人A级毛片免费观看AV网站| 一级做a爱过程免费视频高清| 亚洲午夜在线电影|