2017-06-01 3 views
1

私のようなANTLR4文法における文の持っているもの:ANTLR文法中の#の目的

expression : DEFAULT #primitive_expression 
      ; 

を私は#の意味はここにあるかわかりません。

答えて

3

彼らは代替ラベルだ:

代替ラベル

我々は7.4節で見たように、正確なイベントメソッドのラベル付け規則の代替、我々は、より正確な構文解析木のリスナーを得ることができます#演算子を使用して規則の最も外側の選択肢にラベルを付けることによって、ルール内のすべての選択肢にはラベルを付ける必要があります。ここにラベル付きの代替案がある2つのルールがあります。

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

私は既にそれを拒否しており、他の誰かがそれを承認するとは思わない。 –