首页 文章

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

提问于
浏览
1

我在ANTLR4语法中有一个声明,如:

expression : DEFAULT    #primitive_expression
           ;

我不知道 # 这里是什么意思 .

1 回答

  • 3

    他们是另类标签:

    替代标签正如我们在第7.4节“精确事件方法的标签规则替代”中所看到的,我们可以通过使用#运算符标记规则的最外层替代方案来获得更精确的分析树监听器事件 . 规则中的所有备选方案都必须标记,或者不标记 . 以下是带有标记替代品的两个规则 . 语法T;
    stat:'return'e';' #返回
    | 'break'';' #休息
    ;
    e:e'*'e #Mult
    | e'e#添加
    | 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

相关问题