我正在尝试创建一个可以解析以下内容的语法:
reference: java.util.String
但同样
reference: {java.util.String, java.lang.Integer}
换句话说,我希望它既解析限定名称列表,又解析一个项目(在这种情况下不标记为“{”)。
我尝试的是这样的:
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName);
但是,我收到一个错误:在使用第一种引用形式(不带 {)时,在 'java' 处缺少 '{'。有什么建议我应该尝试吗?
编辑:也试过
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName);
但在输入“!”时没有可行的选择 语法定义错误。
EDIT2:“逗号分隔列表”没有问题,我单独尝试过,效果很好。我唯一的问题是根据“{”字符区分规则的两个部分。