Xtext 项目列表或仅一项

发布于 2025-01-05 23:09:23 字数 709 浏览 3 评论 0原文

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

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);

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

编辑2:我对“逗号分隔列表”没有问题,我单独尝试了这个,效果很好。我唯一的问题是根据“{”字符区分规则的两个部分。

I'm trying to create a grammar that would parse the following:

reference: java.util.String

but as well

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

In other words, I want it to parse both a list of Qualified names but also only one item (not marked by '{' in this case).

What I tried is this:

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

However, I am getting an error: missing '{' at 'java', when using the first form of the reference (without {). Any suggestions what I should try?

EDIT: Also tried

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

but getting a no viable alternative at input '!' error in the grammar definition.

EDIT2: I am not having problems with the "comma separated list", I tried this separatly and it works well. My only problem is distinguishing between the two parts of the rule based on the '{' character.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尤怨 2025-01-12 23:09:23

这可以解决问题:

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

请注意组和替代方案的优先顺序。

This will do the trick:

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

Please mind the precedencies of groups and alternatives.

单挑你×的.吻 2025-01-12 23:09:23

我对 Xtext 很陌生,所以尝试一下:

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

或者

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

I am quite new to Xtext, so just giving it a try:

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

or

Reference:
    'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)+ '}') | (values=QualifiedName);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文