【问题标题】:Xtext based language within Intellij IdeaIntellij Idea 中基于 Xtext 的语言
【发布时间】:2018-11-18 15:34:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • 可以从相同的 DSL 语法创建对两个 IDE 的 IDE 支持。除了由 DSL 开发人员编写的额外的 Eclipse 特定代码之外,这样做应该没有问题。
  • 我会打赌 Xtext 语言服务器协议支持和github.com/intellij-lsp/intellij-lsp-plugin

标签: intellij-idea plugins eclipse-plugin dsl xtext


【解决方案1】:

简答

是的,需要做一些工作。

长答案

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

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

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

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

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

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

【讨论】:

  • 我正在努力解决一个非常相似的问题,并且对您的解决方案非常好奇。你的项目开源了吗?
  • 嗨@raner,是的,代码是可用的,但我没有写关于它如何工作或如何使用它的说明。这是存储库:bitbucket.org/kinoritech/epsilon-intellij/src/master。如果您想进一步讨论这个问题,您可以使用我的用户名在 Telegram 中找到我。干杯。
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 2023-04-06
  • 2013-07-16
  • 2013-04-06
  • 2017-03-12
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多