是否可以在没有语法定义的任何词法分析器的情况下访问规则?

时间:2015-06-14 13:40:48

标签: antlr4

如果我有这条规则:

player : SELF | OPP;

SELF : 'self';
OPP : 'opp' | 'opponent';

是否可以在没有SELF或OPP令牌的情况下访问播放器规则?

这是我的代码更具体:

    @Override
    public Object visitPlayer(PlayerContext ctx) {
        if (ctx.SELF() != null) {
            return BehaviorExecutor.this.game.getPlayerStates()
                    .get(BehaviorExecutor.this.selfIndex);
        } else if (ctx.OPP() != null) {
            return BehaviorExecutor.this.game.getPlayerStates()
                    .get(BehaviorExecutor.this.oppIndex);
        }

        //is it possible to get to here?

        BehaviorExecutor.this
            .logger.log("Neither SELF nor OPP token found when visiting player rule.");

        return null;
    }

1 个答案:

答案 0 :(得分:3)

访问者不访问规则 - 它访问解析树节点。除非相应规则(或替代子规则)的所有符号与源令牌实例序列有效匹配,否则不会创建节点并将其添加到解析树。因此,通常情况下,“此处”无法访问。

当然,如果在构造之后手动修改了解析树,则无法保证节点的子节点对应于解析器规则对该节点的定义。