我正在尝试创建一个解析以下内容的语法:
reference: java.util.String
Run Code Online (Sandbox Code Playgroud)
但同样
reference: {java.util.String, java.lang.Integer}
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望它既解析一个合格名称列表,也只解析一个项目(在这种情况下不用'{'标记).
我试过的是这个:
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName);
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:在使用第一种形式的引用(没有{)时,在'java'中缺少'{'.有什么建议我应该尝试一下吗?
编辑:也尝试过
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName);
Run Code Online (Sandbox Code Playgroud)
但在输入'!'时找不到可行的选择 语法定义中的错误.
编辑2:我没有"逗号分隔列表"的问题,我分开尝试了它,它运作良好.我唯一的问题是基于'{'字符来区分规则的两个部分.
这样就可以了:
Reference:
'reference' ':' (
'{' values+=QualifiedName (',' values+=QualifiedName)* '}'
| values+=QualifiedName
);
Run Code Online (Sandbox Code Playgroud)
请注意团体和替代方案的先决条件.