Monaco:在 monaco 编辑器中为自定义语言创建语言语法定义的最佳方法是什么?

时间:2021-02-24 18:21:56

标签: javascript syntax-highlighting antlr4 dsl monaco-editor

我在 antlr4 中创建了一个相当简单的自定义 DSL。我正在尝试找到在基于网络的摩纳哥编辑器中使用它的最简单方法,其中包含所有花里胡哨的功能。

  1. 我发现您可以使用以下命令从头开始创建君主定义:https://microsoft.github.io/monaco-editor/monarch.html (问题是为了将来的更改,我必须保持两件事最新,antlr 语法和君主 json 定义。此外,由于它们是单独的实现,我怎么能确定它们都匹配/同意)。

  2. 我还看到您可以手动使用 ANTLR 生成的词法分析器/解析器,仅使用 ANTLR 就可以自己完成所有事情:https://tomassetti.me/writing-a-browser-based-editor-using-monaco-and-antlr/ (与君主相比,这似乎是大量的手工工作,而且我很难找到很多示例或文档)。

  3. 是否有一种简单的方法可以从 antlr 文件中生成君主 json 定义?如果否,通常首选前 2 个选项中的哪一个?为什么?

1 个答案:

答案 0 :(得分:1)

ANTLR 文件实际上只是您的语法。可能可以从那里获得语法突出显示,但我不记得看到任何对摩纳哥这样做的东西。

除了语法高亮,您还需要代码补全。如果您的目标是 Typescript 目标,那么就有 Mike Lischke(希望我拼写正确)放在一起的 C3 代码完成项目。它可以让您尽可能地从语法中获得 I,但是您仍然需要在符号表中查找内容,同时考虑范围。等等。将其置于正确的逻辑光标位置也很棘手(Mike 写了很好的指导以使其正确(尽管我在完成它后重新阅读它对我来说更有意义)。

可以与 JavaScript 目标一起工作,但这需要做更多的工作。 (主要是添加到方法中,类型脚本目标具有而 JavaScript 目标没有。

此外,它不会只是插入摩纳哥。不过,它会在您编写代码时为您节省大量工作。

相关问题