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;
}
访问者不访问规则——它访问解析树节点。除非对应规则(或替代子规则)的所有符号与源令牌实例序列有效匹配,否则不会创建节点并将其添加到解析树中。所以,通常情况下,“这里”是不可到达的
当然,如果在构造后手动修改解析树,则无法保证节点的子节点与该节点的解析规则定义相对应。访问者不访问规则,而是访问解析树节点。除非对应规则(或替代子规则)的所有符号与源令牌实例序列有效匹配,否则不会创建节点并将其添加到解析树中。所以,通常情况下,“这里”是不可到达的 当然,如果在构造后手动修改解析树,则不能保证节点的子节点对应于该节点的解析器规则定义