java访问重复子规则的元素标签;e、 g.用ANTLR解析(1,2,3)中的a
我试图匹配这样的语法
a in (1, 2, 3)
于是我写道:
| Identifier IN '(' ( inner = (StringLiteral | IntegerLiteral) ','? )+ ')'
{
/// print what?
}
它匹配,但如何检索所有$inner.text
并在外部块中使用它们
看起来'(' ( inner = (StringLiteral | IntegerLiteral) ','? )+ ')'
无法像lexer规则那样返回用户定义的值,我错了吗
# 1 楼答案
查看手册的这一部分: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,)
也是有效的输入。大概是这样的:(从上面的链接)可能更接近你想要的