#在antlr语法中的目的是什么

What is the purpose of # in antlr grammar

我在 ANTLR4 语法中有一个语句,例如:

expression : DEFAULT    #primitive_expression
           ;

不知道这里的#是什么意思。

它们是替代标签:

Alternative Labels

As we saw in Section 7.4, Labeling Rule Alternatives for Precise Event Methods, we can get more precise parse-tree listener events by labeling the outermost alternatives of a rule using the # operator. All alternatives within a rule must be labeled, or none of them. Here are two rules with labeled alternatives.

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

Alternative labels do not have to be at the end of the line and there does not have to be a space after the # symbol. ANTLR generates a rule context class definition for each label. For example, here is the listener that ANTLR generates:

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