Antlr4 是否可以在没有语法中定义的任何lexer标记的情况下访问规则?

Antlr4 是否可以在没有语法中定义的任何lexer标记的情况下访问规则?,antlr4,Antlr4,如果我有这个规则: player : SELF | OPP; SELF : 'self'; OPP : 'opp' | 'opponent'; 有没有可能在没有SELF或OPP令牌的情况下访问玩家规则 下面是我更具体的代码: @Override public Object visitPlayer(PlayerContext ctx) { if (ctx.SELF() != null) { return BehaviorExecutor.

如果我有这个规则:

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;
    }

访问者不访问规则——它访问解析树节点。除非对应规则(或替代子规则)的所有符号与源令牌实例序列有效匹配,否则不会创建节点并将其添加到解析树中。所以,通常情况下,“这里”是不可到达的


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

访问者不访问规则,而是访问解析树节点。除非对应规则(或替代子规则)的所有符号与源令牌实例序列有效匹配,否则不会创建节点并将其添加到解析树中。所以,通常情况下,“这里”是不可到达的

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