Antlr4 Antl4没有标签规则的规则索引
对于Java.g4中的语法片段Antlr4 Antl4没有标签规则的规则索引,antlr4,Antlr4,对于Java.g4中的语法片段 statement : block # blockStmt | 'if' parExpression statement ('else' statement)? # ifStmt | 'for' '(' forControl ')' statement # forStmt | 'while' par
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_索引,我可以做得更多。