我正试图弄清楚如何在Antlr4中创建一个解析器规则,其中两个令牌需要具有相同的值我试图实现的是检查类名和构造函数名是否相同
下面是我想要实现的伪规则,其中假设两个"标识符"相等。
compilation_unit :
'class' identifier
'{'
identifier '(' ARGUMENTS ')'
'{'
'}'
'};'
;
您要做的是上下文敏感,并且您不能在无上下文语法中进行上下文敏感。您将需要使用操作或解析器树行走模式(监听器或访问者)来实现这一点。下面是一个使用操作的示例:
class:
'class' cname=IDENTIFIER
'{'
'public' ctor=IDENTIFIER '(' args? ')'
'{' '}'
'}'
{ if (!$ctor.getText().equals($cname.getText())) {
System.out.println("Not a constructor!");
}
}
;
没有经过实际测试,我也不经常使用操作,也许我错过了一些东西