有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Antlr4子上下文索引

我正在使用Antlr4解析Java。g4语法文件。我使用的解析器规则是:

typeArgument
    :   typeType
    |   '?' (('extends' | 'super') typeType)?
    ;

我用以下方式实现了该解析器规则的visitor方法:

public String visitTypeArgument(JavaParser.TypeArgumentContext ctx) {
    StringBuilder typArg = new StringBuilder();
    if(ctx.getChild(0).getText().equalsIgnoreCase("?")){
        // '?' (('extends' | 'super') typeType)?
        typArg.append("?").append(" ");
        TypeTypeContext typTypCtx = ctx.typeType();
        if(typTypCtx != null){
            typArg.append(ctx.getChild(1).getText()).append(" ");    // <- Confusion is here
            typArg.append(this.visitTypeType(typTypCtx));
        }
    }
    else{
        TypeTypeContext typTypCtx = ctx.typeType();
        typArg.append(this.visitTypeType(typTypCtx));
    }
    return typArg.toString();
}

我已经用评论指出了代码中的混乱。我正在分析一个类型参数,比如<? extends SomeClassIdentifier>
为什么ctx.getChild(1).getText()返回“extends”而不是“extends SomeClassIdentifier”
根据规则'?' (('extends' | 'super') typeType)?,应该只有两个子上下文,即一个用于?,另一个用于('extends' | 'super') typeType'。请帮我澄清我的困惑,任何人


共 (0) 个答案