java - ANTLR - 处理一条规则后触发

标签 java antlr antlr4

我在 ANTLR4 中有一个非常简单的语法:

 rule : 'SubRelationOf' LPAREN r COMMA r RPAREN
 r:     RN | 'RelationUnionOf' LPAREN (r COMMA)+ r RPAREN

 //LEXER
 RN : [a-z]+ ;
 COMMA: ',';
 LPAREN: '(';
 RPAREN: ')';

我还使用带有堆栈的监听器实现来跟踪每个事件,因为语法是上下文无关且递归的。 正如您所看到的,规则由两个参数组成:第一个r和第二个r。 我强烈需要的是一种区分何时完成第一个处理的方法。 由于监听器实现具有以下内容:

public void exitRule(Parser.RuleContext ctx) {
// do something
}

无法理解我何时位于规则的第一个 r 或第二个 r 中。。 是否有一个触发器说“好吧,你刚刚出了第一个 r,执行你的任意代码”? 有办法实现吗?

最佳答案

在子规则或标记出现多次的规则中,您将有一个返回列表而不是单个条目的函数。因此,您的 RuleContext 有一个返回列表的成员 r()。其中条目的顺序是您在语法中定义的顺序。

关于java - ANTLR - 处理一条规则后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41022565/

相关文章:

java - "RSA/ECB/OAEPWITHSHA256ANDMGF1PADDING"和 "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"有什么区别

java - ANTLR 不会在无效输入上抛出错误

webpack - Antlr javascript 与 webpack

java - 输入 ANTLR4 没有可行的替代方案

java - ANTLRworks 中的 TestRig : how to use own classes?

java - 找到类 org.apache.hadoop.mapreduce.TaskInputOutputContext,但应为接口(interface)

java - 如何增加 Java 堆栈跟踪转储的显示行数?

java - 单元格 : how to activate a contextMenu by keyboard?

c# - 使用 ANTLR 和 Antlr CSharp 目标为 DSL 构建编译器

java - 在 ANTLR for Lucene 中查询解析