2017-06-01 90 views
1

的目的,我有一個說法在ANTLR4語法,如:什麼是#的語法ANTLR

expression : DEFAULT #primitive_expression 
      ; 

我不知道什麼是#這裏的含義。

回答

3

他們替代標籤

替代標籤

正如我們在7.4節所看到的,標籤規則替代了準確的事件的方法,我們可以得到更精確的解析樹監聽器通過使用#運算符標記規則的最外層選項來實現事件。規則中的所有替代方法都必須加上標籤,否則都不加標籤。這裏有兩個標籤替代方案。

grammar T; 
stat: 'return' e ';' # Return 
    | 'break' ';' # Break 
    ; 
e : e '*' e # Mult 
    | e '+' e # Add 
    | INT # Int 
    ; 

可選標籤不必位於行的末尾,並且#符號後面不必有空格。 ANTLR爲每個標籤生成規則上下文類定義。例如,這裏是ANTLR生成監聽器:

public interface AListener extends ParseTreeListener { 
    void enterReturn(AParser.ReturnContext ctx); 
    void exitReturn(AParser.ReturnContext ctx); 
    void enterBreak(AParser.BreakContext ctx); 
    void exitBreak(AParser.BreakContext ctx); 
    void enterMult(AParser.MultContext ctx); 
    void exitMult(AParser.MultContext ctx); 
    void enterAdd(AParser.AddContext ctx); 
    void exitAdd(AParser.AddContext ctx); 
    void enterInt(AParser.IntContext ctx); 
    void exitInt(AParser.IntContext ctx); 
} 

來源:https://github.com/antlr/antlr4/blob/master/doc/parser-rules.md#alternative-labels

+0

我認爲我做了錯誤的編輯您的帖子。我如何刪除它? – TomServo

+0

我已經拒絕了,我不認爲別人會批准它。 –