java 如何在ANTLR ParseTree中获取“上一个”节点

sr4lhrrt  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(103)

我有以下规则:regExp : branch (PIPE branch)*。我构建了一个侦听器,在我的exitBranch方法上,我想知道branch是否在PIPE令牌之后。

@Override
public void exitBranch(BranchContext ctx)
{
    if (/*branch is preceeded by PIPE)*/)
    {
        // do stuff
    }
}

如果有帮助,这里有一个解析树的例子(PIPE对应于|令牌):

regExp
  branch
    piece
      atom a
  |
  branch
    piece
      atom b
<EOF>

编辑:我想我可以检查branch是否是regExp的第一个子节点,但我希望有更好的解决方案

u1ehiz5o

u1ehiz5o1#

如果你打破

regExp : branch (PIPE branch)*;

变成这样的东西:

regExp : branch pipeBranch*;
pipeBranch: PIPE branch;

您将获得pipeBranch的特定上下文,并可以为此设置侦听器。

ghhkc1vu

ghhkc1vu2#

只要检查是否是ctx.PIPE().size() > 0。如果是这种情况,你就知道你必须有一个前面有PIPE的分支。

相关问题