2017-06-01 104 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

我已经拒绝了,我不认为别人会批准它。 –