gpt4 book ai didi

xtext - 将一个文法包含在另一个文法中

转载 作者:行者123 更新时间:2023-12-01 01:09:13 24 4
gpt4 key购买 nike

我想重用语法定义。

我有这样的语法:

Person:
'contact' name=ID '{'
'phone' phone=INT
'}'
;

我想要另一个这样的语法:
include "uri/to/other/project/to/other/grammar/definitions"

Call:
'call' person=Person
;
Person不为第二语法所知。因此 Xtext 是否能够插入或包含 Person定义从第一个语法到第二个语法?

进一步的步骤是生成 Person .我也想知道怎么实现。

最佳答案

我找到了解决方案。您可以使用关键字“with”,因为它用于包含终端。

必要的步骤:

  • 创建 Xtext 项目 com.mydsl.A (A) 和 com.mydsl.B (B)
  • 为 A 写文法
  • 在 B 的 META-INF/MANIFEST 中添加 A 作为依赖项
  • 在 B.ui
  • 的 META-INF/MANIFEST 中添加 A.ui 作为依赖项
  • 在 B 的工作流程中添加 A 的 genmodel 注册,如下所示:
    在独立设置中:registerGenModelFile = "platform:/resource/A/src-gen/path/to/A.genmodel"
  • 将 B 的第一行更改为 grammar B with A
  • 您现在可以在编写语法 B 时使用 A 的 EClasses
  • with不能用于包含多个语法,因此终端定义必须在 A 中说明。

    该生成在 B 的 IGenerator 中执行,但如果您扩展 A 的生成器,则可以重用 A 的 EClasses 的生成。

    这种方法是一种继承,因为提案、验证等类是由 A 的对应物扩展的。我没有发现是否支持多重继承。您可以在 with A 后面加一个逗号但它不起作用。

    关于xtext - 将一个文法包含在另一个文法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16442508/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com