当前位置: 首页 > 知识库问答 >
问题:

如何为多个目标语言创建解析器

饶明亮
2023-03-14

我在XText中定义了我的DSL,它自动生成了Java版本的语言解析器和代码生成框架,这真的很酷。

问题是我的DSL被使用多种语言的项目所消耗。你可以想象我们可能至少需要用C#、Java和Ruby来解析DSL。

所以问题是:有没有办法在xtext的帮助下为多种语言生成解析器?

共有1个答案

谢建业
2023-03-14

解析只是整个Xtext套件的一小部分。集成到EclipseIDE和Xtend生成器中是两大块代码。Xtext建立在EMF Ecore模型之上。这些部件都没有其他语言版本。

因此,在普通C#和Ruby中运行Xtext是不可能的。

你可以做什么:

>

  • 您可以将解析器和生成器打包到一个独立的jar中,并从任何地方(包括从C#和Ruby)调用它作为外部进程。这就像您自己的DSL的javac

    您可以在JRuby中运行Ruby代码,并从那里调用Xtext。因为所有东西都在同一个JVM中运行,所以与运行外部程序相比,您将拥有更好的控制。

    您可以使用Xtext来获得一个用户友好的编辑器,其中包含所有很酷的东西,但可以为您想要的任何语言实现独立的语法。

  •  类似资料:
    • 问题内容: 有一个普通的Java API的JavaDoc,有英文版和中文版,但似乎每个版本都需要单独的源代码。还有其他更方便的方法吗? 问题答案: 不,基本上没有办法。 想到的唯一变通方法适用于生成的HTML页面:您可以将JavaDocs包围在使用CSS在语言之间切换的块元素中。考虑: 随后编辑JavaDocs的CSS,以便用户可以切换语言,例如:

    • 问题内容: 我想用Java创建一个简单的解析器,用于诸如语言(保持僵化)之类的“伪代码”。伪代码示例为- 请注意,上面的代码是严格的,因为一行上不能有多个语句,整数以$开头,浮点数以#开头等。 要解析此类代码,首先可以使用,然后使用正则表达式来匹配整数变量,浮点变量或关键字。 这种方法好吗?对于循环语句,我如何存储表达式,这样就不必在每次迭代中都进行标记化? 我可以考虑将表达式(例如#f = #f

    • 我有多个java项目。这些项目正在使用Gradle创建jar、war和ear文件。在每个项目中,我都使用清单文件来维护元数据,如版本、日期-时间...为此,我在每个build.gradle文件中都包含了清单文件创建逻辑。 但在Gradle中有一个特性调用SharedManifest。我在主项目build.gradle脚本中定义了以下两个任务。但是在每个jar和war文件中都有gradle创建的默认

    • 我需要对俄语进行语音识别。我遵循了项目页面上的教程。 在我看到的教程中 您可以使用语言的语音词典将文本转换为语音字符串。只需将单词替换为相应的抄本即可。由于电话的数量很小,文本也不应该很大,只要一本书就可以了。 但我在哪里能找到语音词典呢?我怎样才能用整本书中相应的抄本来替换这些单词? 或在哪里可以找到完整的语音模型? 已更新 我创建了文件测试。带行的txt: SIL i0 lj j a1 i1

    • 我正在尝试创建一个语法。到目前为止,这是我的代码: 我真的只是希望语法从输入中创建一个列表/哈希表树。代码的输出是: 看起来还不错。perl6似乎在解码这样一个事实,即字段描述符由多个字段描述符组成,但实际上似乎并没有将它们放入列表中。我可以说$fds ,但我不能说$fds[0] 。为什么前者“起作用”,而后者不起作用? 我必须承认,我对正在发生的事情掌握得相当薄弱。使用规则而不是令牌会更好吗?我

    • 当使用嵌入式HSQLDB进行单元测试时,似乎无法正确处理hibernate实体映射文件中定义的模式和/或目录。hibernate映射如下所示: 我不能更改hibernate实体映射,我不想使用其他数据库引擎(我知道H2DB可以处理这个)。有人能说明如何使HSQLDB在这个单元测试上下文中工作吗?