有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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,)也是有效的输入。大概是这样的:

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

    (从上面的链接)可能更接近你想要的