ANTLR - 处理一个规则后触发

时间:2016-12-07 16:29:46

标签: 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: ')';

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

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

无法理解我何时处于规则的第一个r或第二个r中。 是否有一个触发器表示"好吧,你刚出第一个r,执行你的任意代码"? 有没有办法实现这个?

1 个答案:

答案 0 :(得分:1)

在子规则或令牌出现多次的规则中,您将拥有一个返回列表而不是单个条目的函数。因此,您的.有一个成员where,它会返回一个列表。其中条目的顺序是您在语法中定义的。