Ide 使用ANTLR的代码编辑器

Ide 使用ANTLR的代码编辑器,ide,editor,antlr,Ide,Editor,Antlr,我正在为自定义语言编写代码编辑器。我们将ANTLR用于lexer和parser,将CodeMirror用于编辑器框架(在浏览器中运行) 我可以做一些基本的事情,比如关键字的语法着色,以及提供基本的代码完成 我发现用户经常在编辑某个东西的中间,所以ANTLR解析器不是很有用,因为当前的输入流不是完全可解析的(并且经常由于不完整的输入流而导致ANTLR下降到错误的路径)。 因此,我使用令牌流来了解发生了什么,并尝试提供上下文相关的帮助 我想知道是否有人可以提供一些关于使用ANTLR作为代码编辑器一部

我正在为自定义语言编写代码编辑器。我们将ANTLR用于lexer和parser,将CodeMirror用于编辑器框架(在浏览器中运行)

我可以做一些基本的事情,比如关键字的语法着色,以及提供基本的代码完成

我发现用户经常在编辑某个东西的中间,所以ANTLR解析器不是很有用,因为当前的输入流不是完全可解析的(并且经常由于不完整的输入流而导致ANTLR下降到错误的路径)。 因此,我使用令牌流来了解发生了什么,并尝试提供上下文相关的帮助

我想知道是否有人可以提供一些关于使用ANTLR作为代码编辑器一部分的指导。我使用令牌流而不是解析树是否正确

ANTLR API是否可以用来做一些事情,比如前瞻令牌,以了解用户当前正在编辑的内容的总体上下文

抱歉,这有点含糊不清。刚刚开始这个项目。:-)


感谢您的帮助。

我发现ANTR非常适合语法检查和轻松检索有效输入的详细信息。但是,对于代码完成,您有一个不同的场景。正如您已经发现的,解析器通常可以而不是给出好的答案,因为用户键入时输入无效。Bart已经链接到一个答案,Sam描述了他使用ANTLR 4实现了一个伟大的解决方案,但不幸的是没有描述如何实现

但是,即使您可以让解析器为您提供一组预期的标记,您将从中得到什么?如果需要一个标识符,你想显示什么?这可以是任何东西,比如类成员、变量名等。我不相信这是答案,因此我开发了自己的解决方案,我在这里描述:。这是针对ANTLR3的,但当然也可以使其与4一起工作

本文还包含指向(C++)源代码的几个链接,这些源代码展示了如何在我的应用程序中实现代码完成。令人惊讶的是,实现毕竟是如此简单,但仍然可以提供非常精确的结果

更新
同时,我也为ANTLR4开发了一个解决方案,名为。这是一个Typescript解决方案,但附带了到和的翻译。

我发现ANTR非常适合语法检查和有效输入的轻松细节检索。但是,对于代码完成,您有一个不同的场景。正如您已经发现的,解析器通常可以而不是给出好的答案,因为用户键入时输入无效。Bart已经链接到一个答案,Sam描述了他使用ANTLR 4实现了一个伟大的解决方案,但不幸的是没有描述如何实现

但是,即使您可以让解析器为您提供一组预期的标记,您将从中得到什么?如果需要一个标识符,你想显示什么?这可以是任何东西,比如类成员、变量名等。我不相信这是答案,因此我开发了自己的解决方案,我在这里描述:。这是针对ANTLR3的,但当然也可以使其与4一起工作

本文还包含指向(C++)源代码的几个链接,这些源代码展示了如何在我的应用程序中实现代码完成。令人惊讶的是,实现毕竟是如此简单,但仍然可以提供非常精确的结果

更新
同时,我也为ANTLR4开发了一个解决方案,名为。这是一个Typescript解决方案,但附带了到和的翻译。

我相信ANTLR的作者很久以前就明确表示,它不是为该场景而设计的。您可能需要编写一个手动编译器框架来处理这个问题,就像任何其他IDE一样。请参阅“确定”,谢谢您的反馈和链接!我相信ANTLR的作者很久以前就明确表示,它不是为这种情况而设计的。您可能需要编写一个手动编译器框架来处理这个问题,就像任何其他IDE一样。请参阅“确定”,谢谢您的反馈和链接!