Xtext项目列表或仅一个项目

时间:2012-02-16 09:43:28

标签: grammar xtext

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

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:我没有“逗号分隔列表”的问题,我分别尝试了这个并且效果很好。我唯一的问题是基于'{'字符区分规则的两个部分。

2 个答案:

答案 0 :(得分:8)

这样可以解决问题:

Reference:
'reference' ':' (
     '{' values+=QualifiedName (',' values+=QualifiedName)* '}' 
   | values+=QualifiedName
);

请注意群体和替代方案的先例。

答案 1 :(得分:0)

我对Xtext很新,所以试试看:

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values=QualifiedName);

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName);
相关问题