题
我正在尝试创建一种可以解析以下内容的语法:
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);
不隶属于 StackOverflow