使用ANTLR的代码编辑器

时间:2015-12-23 02:15:06

标签: ide editor antlr

我正在为自定义语言编写代码编辑器。我们使用ANTLR作为词法分析器和解析器,使用CodeMirror作为编辑器框架(在浏览器中运行)。

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

我发现用户经常处于编辑状态,因此ANTLR解析器不是很有用,因为当前输入流不是完全可解析的(并且经常会导致ANTLR错误路径)不完整的输入流)。

因此,我正在使用令牌流来弄清楚正在发生的事情并尝试提供上下文相关的帮助。

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

可以利用ANTLR API来做一些事情,例如展望令牌以找出用户当前正在编辑的内容的整体背景吗?

对不起,如果这有点模糊。刚刚开始这个项目。 : - )

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我发现ANTRL非常适合语法检查和有效输入的简单细节检索。但是,对于代码完成,您有不同的方案。正如您所发现的那样,解析器通常可以给您很好的答案,因为输入在用户输入时无效。 Bart已经将答案与Sam描述为使用ANTLR 4实现了一个很好的解决方案,但遗憾的是没有描述如何。

但即使您可以让解析器为您提供一组预期的令牌,您还要做些什么呢?如果比如说预期的标识符,你想表达什么?这可以是任何东西,比如类成员,var名称等。我不相信这是答案,因此我开发了一个我自己在这里描述的解决方案:Universal Code Completion using ANTLR。这适用于ANTLR 3,但当然也可以使用4。

本文还包含几个(C ++)源代码的链接,这些源代码显示了如何在我的应用程序中实现代码完成。毕竟,实现是多么简单,但仍能提供非常精确的结果。