java - 我应该如何针对 "expression+"模式运行操作?

标签 java antlr

我正在尝试匹配并收集此语法中的所有“字段”:

字段 a b c d e ...

我将使用一个字符串数组来包含所有这些 a b c d e 字符:

fields
    : FIELDS fieldsExpression
    {  
        // always zero
        System.out.println ($fieldsExpression.value.size());
    }
    ;

fieldsExpression  returns [List<String> value]
    @{ $value = new ArrayList<String> (); }
    : Identifier
    { $value.add ($Identifier.text); }
    | Identifier fieldsExpression
    { $value.addAll ($fieldsExpression.value); }
    ;

现在,如果我这样做,我将得到一个空数组。有什么问题吗?

另外,我想知道如何匹配这个?

field
   : FIELDS Identifier+
   { ... }

这个Identifier+将返回多个Identifier,但我不知道如何“匹配”它们并对它们“运行操作”。

有什么想法吗?

最佳答案

尝试:

fieldsExpression  returns [List<String> value] 
  : { $value = new ArrayList<String> (); }
    (Identifier { $value.add ($Identifier.text); })+
  ;

如果您调整第二种选择,您的示例也应该有效

| Identifier fieldsExpression
{ $value.add($Identifier.text);$value.addAll ($fieldsExpression.value); }

关于java - 我应该如何针对 "expression+"模式运行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29070817/

相关文章:

antlr - 语法模块化 : A way to import lexer rules after defining others first?

parsing - ANTLR 中匹配多个词法分析器规则的字符

parsing - Xtext语法错误 "Decision can match input ... using multiple alternatives: 1, 3, 4, 5"

java - 如何将文本 block 作为属性访问,并使用 ANTLR 中的greedy=false 选项进行匹配?

java - Json字符串转java对象

java - 如何在 Java 中将数组列表从一个类复制到另一个类?

python - python 2.7 中没有名为 antlr4 的模块

Java - 如何将字符串转换为实现接口(interface)的特定枚举

java - 如何在 firebase 的 textview 中显示数据

java - 如何从带有哈希值的 angularjs URL 从 UriComponentsBuilder 构建 URI