在antlr语法中#的目的是什么
我有一个ANTLR4语法的语句,如:在antlr语法中#的目的是什么,antlr,antlr4,Antlr,Antlr4,我有一个ANTLR4语法的语句,如: expression : DEFAULT #primitive_expression ; 我不知道这里的#是什么意思 它们是替代标签: 替代标签 正如我们在第7.4节“为精确事件方法标记规则备选方案”中所看到的,我们可以通过使用#运算符标记规则的最外层备选方案来获得更精确的解析树侦听器事件。规则中的所有备选方案都必须贴上标签,或者不贴标签。这里有两条带标签的规则 grammar T; stat: 'return' e ';' #
expression : DEFAULT #primitive_expression
;
我不知道这里的#
是什么意思 它们是替代标签:
替代标签
正如我们在第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);
}
发件人:它们是替代标签:
替代标签
正如我们在第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);
}
发件人:我想我对你的帖子做了错误的编辑。我怎么能删除它?我已经拒绝了,我想其他人不会批准。我想我对你的帖子做了错误的编辑。我怎么能删除它?我已经拒绝了它,我想其他人不会批准它。