即使新行字符被发送到隐藏通道,如何在ANTLR解析器规则中检查行尾

即使新行字符被发送到隐藏通道,如何在ANTLR解析器规则中检查行尾,antlr,token,hidden,analysis,Antlr,Token,Hidden,Analysis,我有以下三个陈述 1) 如果a==b,则打印(a) 2) 如果a==b,则随后是/*操作块*/ 3) 如果a==b,那么 如何使用ANTLR解析器规则区分这些语句 我用的是这样的规则 if_stmt : IF_T LITERAL_T '==' LITERAL_T THEN_T { /* My java code goes here*/ } 我希望在规则的操作块中保持规则的相同性和差异性 注意:新行字符和注释进入隐藏通道也许您不应该将所有“智能”放入解析器本身。它可能会很快变得复杂。您可以

我有以下三个陈述

1) 如果a==b,则打印(a)

2) 如果a==b,则随后是/*操作块*/

3) 如果a==b,那么

如何使用ANTLR解析器规则区分这些语句

我用的是这样的规则

if_stmt : IF_T LITERAL_T '==' LITERAL_T THEN_T
{
   /* My java code goes here*/
}
我希望在规则的操作块中保持规则的相同性和差异性


注意:新行字符和注释进入隐藏通道

也许您不应该将所有“智能”放入解析器本身。它可能会很快变得复杂。您可以遍历AST(可能使用treewalker)并检查if语句的
getLineNumber()
for是否返回与then块中第一条语句相同的值


您也可以在if stmt规则操作中加入类似的条件。

在第二种情况下,“THEN”后面的内容只是一个注释。我可以使用java代码查找隐藏的标记吗?如果可能的话,你能告诉我怎么做吗。。。。