访问重复子规则的元素标签;例如解析" IN(1,2,3)"与ANTLR

时间:2015-04-03 03:01:13

标签: java antlr

我正在尝试匹配这样的语法,

a in (1, 2, 3)

所以我写道:

| Identifier IN '(' ( inner = (StringLiteral | IntegerLiteral) ','? )+ ')'
{
    /// print what?
}

匹配,但如何检索所有$inner.text并在外部块中使用它们?

看起来'(' ( inner = (StringLiteral | IntegerLiteral) ','? )+ ')'无法像词法分析器规则那样返回用户定义的值,我错了吗?

1 个答案:

答案 0 :(得分:0)

查看手册的这一部分:https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Parser+Rules#ParserRules-RuleElementLabels

基本上,您需要inner += Literal,内部将被定义为List<Literal>,并添加了所有元素。

另请注意,由于您的逗号是可选的(','?),a in (1 2 3)a in (1 2, 3,)也是有效输入。像这样:

array : '{' el+=INT (',' el+=INT)* '}' ;

(来自上面的链接)可能更接近你想要的。