Intellij Idea 中基于 Xtext 的语言

Fit*_*itz 5 dsl plugins eclipse-plugin intellij-idea xtext

我想为 Intellij Idea IDE 的一种语言制作一个插件。该语言是使用 Eclipse Xtext 开发的,并且是开源的。Eclipse 的插件已经存在。

我的目标是将这种语言移植到 Intellij Idea。我希望能够使用 Intellij 创建源文件,具有特定的语法突出显示并能够编译和运行用这种语言编写的程序。

是否有使用 Xtext 项目生成 Intellij Idea 插件的简单方法?

如果没有,是否有一种有效的解决方案能够在 Intellij 中突出显示特定的语法?(如果可能,采用自动方式,我不希望每次更新 Xtext 项目时都重写所有内容)

Arc*_*oam 5

简答

是的,需要一些工作。

长答案

遗憾的是,Xtext 在后台使用 antlr,而 IntelliJ 使用他们自己的基于 Parsing Expression Grammars的语法工具包。因此,您可能已经猜到,由 XText 生成的解析和编辑器代码将不起作用。

为了让您的语言在 IntelliJ 中工作,您需要:

  1. 创建语法 *.bnf 文件
  2. 生成词法分析器 *.flex 文件,可能对其进行调整,然后运行 ​​JFlex 生成器
  3. 实现帮助器类以通过文件扩展名、语法突出显示、颜色设置页面、折叠等提供文件识别。

*.flex 文件是从 bnf 生成的。幸运的是,第 3 步中的大多数类都遵循非常相似的结构,因此可以轻松生成它们(稍后会详细介绍)。所以基本上,如果你设法生成 *.bnf 文件,你就成功了 80%。

尽管来自不同的技术,bnf文件的语法与XText文件非常相似。我最近将一些 antlr 语法迁移到 IntelliJ 的 bnf,我不得不做很小的改动。因此,应该可以从您的 XText 文件自动生成 bnf 文件。

这让我回到第 3 点。使用 XTend、Epsilon 的 EGL或类似工具,可以轻松生成所有样板类。作为我之前提到的迁移的一部分,我也这样做了。我正在公开代码,所以我会在完成后在这里发布并添加一些细节。