0

我想知道,是否可以采用 antlr 语法(*.g)或生成的解析器(来自此语法)并在单独的项目中使用它?

为此,我正在研究 github 上的 SysMLv2(基于 eclipse)项目,其中使用 xtext 来定义这种新建模语言的语法。可以在此处找到语法和生成的解析器。

我的第一个想法是获取语法文件(InternalAlf.g)并使用 antlr(我尝试了 3.5.0 和 3.5.2)来生成解析器 + 词法分析器。这样做我最终会得到一堆错误消息,提示找不到符号(有问题的符号:EObject)。

然后因为它显然是一个 Eclipse 项目,我想另一个天真的解决方案是将整个项目打包为一个 jar 并将其作为库包含在我的库中。我尝试为此使用eclipse(导出->可执行jar)。该选项需要一个 MainClass,我不确定要采用哪一个,这也让我怀疑这种方法。使用其他导出 jar 选项,不允许将必要的依赖项添加到我的 jar 中。

还有其他建议吗?由于 antlr 语法文件可用,它应该(实际上)很容易生成解析器,但我不知道如何做到这一点,因为这个语法文件有很多依赖项。或者,如果我改写这个问题:我如何处理这种类型的 antlr 语法文件(对 java 库有依赖关系)。在典型的 antlr 教程中,我(作为 antlr 和 xtext 的新手)找不到答案。

此致

4

1 回答 1

1

我查看了那个项目中的语法。它高度特定于 Xtext。(以至于ANTLR在所有动作中找到语法有点困难)。

也许可以使用ANTLR3 语法对其进行解析并丢弃所有使其与 Xtext 紧密耦合的操作等(注意它们可能对这些操作具有的任何语义谓词和依赖关系)。这里强调MIGHT

简而言之,使用这种语法生成一个与 Xtext 分离的解析器一点也不简单。

如果您要详细说明您需要完成的工作,而不仅仅是使用 Xtext SysMLv2,并且觉得需要创建一个单独的解析器,那么有人可能会为您指明适当的方向。

于 2021-08-25T20:39:52.297 回答