我正在尝试匹配并收集此语法中的所有“字段”:
字段 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/