什么是#的语法ANTLR
问题描述:
答
他们替代标签:
替代标签
正如我们在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
我认为我做了错误的编辑您的帖子。我如何删除它? – TomServo
我已经拒绝了,我不认为别人会批准它。 –