我试图找出如何在Antlr4中创建一个解析器规则,其中两个令牌需要是相同的值。我想要实现的是检查一个类名和一个构造函数名称是相同的
以下是我想要达到的两个“标识符”相等的伪规则。
compilation_unit :
'class' identifier
'{'
identifier '(' ARGUMENTS ')'
'{'
'}'
'};'
;
答案 0 :(得分:1)
您要做的是上下文相关,并且您无法在无上下文语法中执行context-sensitiveness。您将需要使用actions或解析器树行走模式(监听者,访问者)来执行此操作。以下是使用操作的示例:
class:
'class' cname=IDENTIFIER
'{'
'public' ctor=IDENTIFIER '(' args? ')'
'{' '}'
'}'
{ if (!$ctor.getText().equals($cname.getText())) {
System.out.println("Not a constructor!");
}
}
;
没有经过实际测试,我不会经常使用行动,也许我错过了一些