我正在尝试创建一个解析以下内容的语法:
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:我没有“逗号分隔列表”的问题,我分别尝试了这个并且效果很好。我唯一的问题是基于'{'字符区分规则的两个部分。
答案 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);