Xtext项目列表或仅一个项目

Dee*_*zee 0 grammar xtext

我正在尝试创建一个解析以下内容的语法:

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:我没有"逗号分隔列表"的问题,我分开尝试了它,它运作良好.我唯一的问题是基于'{'字符来区分规则的两个部分.

Seb*_*kow 8

这样就可以了:

Reference:
'reference' ':' (
     '{' values+=QualifiedName (',' values+=QualifiedName)* '}' 
   | values+=QualifiedName
);
Run Code Online (Sandbox Code Playgroud)

请注意团体和替代方案的先决条件.