Antlr4如何创建一个解析器规则来检查类名和构造函数是否相同?

时间:2014-10-20 16:06:04

标签: antlr antlr4

我试图找出如何在Antlr4中创建一个解析器规则,其中两个令牌需要是相同的值。我想要实现的是检查一个类名和一个构造函数名称是相同的

以下是我想要达到的两个“标识符”相等的伪规则。

compilation_unit :
                      'class' identifier
                      '{'
                            identifier '(' ARGUMENTS ')'
                            '{'

                            '}'
                      '};'
                  ;

1 个答案:

答案 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!");
       }
     }
 ;

没有经过实际测试,我不会经常使用行动,也许我错过了一些