Antlr4 Antl4没有标签规则的规则索引

Antlr4 Antl4没有标签规则的规则索引,antlr4,Antlr4,对于Java.g4中的语法片段 statement : block # blockStmt | 'if' parExpression statement ('else' statement)? # ifStmt | 'for' '(' forControl ')' statement # forStmt | 'while' par

对于Java.g4中的语法片段

statement
    :   block                                             # blockStmt
    |   'if' parExpression statement ('else' statement)?  # ifStmt
    |   'for' '(' forControl ')' statement                # forStmt
    |   'while' parExpression statement                   # whileStmt
    ;
所有的替代品都有标签。 我可以使用此方法获取所有StatementContext对象

getAllRuleNodes(根,JavaParser.Rule_语句)

但是,如果我只对获取IfStmtContext对象感兴趣,那么如何使用上面的方法而不使用类似的东西呢

for(ParseTree tree : statementContextList)
{
if(tree instanceof IfStmtContext)
{
//add to a list
}
生成的JavaParser不会为标记的规则创建规则索引。 我是否必须以某种方式自定义语法以使它们成为索引? 还是有其他方法可以做到这一点


我的代码应该很快,我需要尽可能多地删除迭代和条件。需要尽可能地取消“instanceof”检查

我很确定
instanceof
不是代码中的瓶颈。你真的分析过吗?你优化了错误的东西,解析过程要昂贵得多。谢谢Lucas。我认为使用这么多的“实例”被认为不是一个好的做法。就我而言,我不必关心解析速度。我要看的是,在解析并获得ParseTree对象之后,如何以优化的方式处理数据。我认为Antlr框架使用了Rule_索引字符串匹配,我觉得这比instanceof更好。因此,如果有一种方法可以为标记的规则创建规则索引,我可以做更多的事情。我非常确定
instanceof
不是代码中的瓶颈。你真的分析过吗?你优化了错误的东西,解析过程要昂贵得多。谢谢Lucas。我认为使用这么多的“实例”被认为不是一个好的做法。就我而言,我不必关心解析速度。我要看的是,在解析并获得ParseTree对象之后,如何以优化的方式处理数据。我认为Antlr框架使用了Rule_索引字符串匹配,我觉得这比instanceof更好。因此,如果有一种方法可以为标记的规则创建Rule_索引,我可以做得更多。