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

reference: java.util.String

但也是如此

reference: {java.util.String, java.lang.Integer}

换句话说,我希望它可以分析合格名称的列表,但也只有一个项目(在这种情况下不标记为“ {”)。

我尝试的是:

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

但是,我会遇到一个错误:使用参考的第一形式(无{)时,我会丢失'{'at'java'。有什么建议,我应该尝试什么?

编辑:也尝试了

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

但是在输入“!”上没有可行的替代方案。语法定义中的错误。

EDIT2:我没有“逗号分隔列表”的问题,我分开尝试了一下,并且效果很好。我唯一的问题是根据“ {”字符区分规则的两个部分。

有帮助吗?

解决方案

这将解决问题:

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

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

其他提示

我是Xtext的新手,所以尝试一下:

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

或者

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top