6

我不知道这个问题是否有效,因为我对源代码解析不是很熟悉。我的目标是为一种现有的编程语言(语言“X”)编写一个源代码完成函数,用于学习目的。Antlr(v4) 是否适合这样的任务,或者是否应该手动完成必要的 AST/解析树创建和解析,假设不存在现有的解决方案?

除了编译器书籍列表之外,我还没有找到有关该特定主题的太多信息,除了编译器不是我所追求的。

4

2 回答 2

11

GoWorks 中的代码补全完全使用 ANTLR 4 实现。以下视频展示了此代码补全引擎的完成程度。代码完成示例从 5 分钟开始运行到视频结束。

Tunnel Vision Labs 的 GoWorks IDE 简介(预览版)

我多年来一直致力于代码完成算法,并且坚信没有更好的解决方案(自动或手动)可以为一种新语言生成代码完成解决方案,以满足我所谓的高响应代码完成的要求. 如果您对该级别的性能或准确性不感兴趣,那么您可能更容易参与其他解决方案(我个人不与这些解决方案合作,因为我很容易对结果感到失望)。

于 2013-11-02T02:55:11.273 回答
6

Xtext 使用 ANTLR3 并具有良好的自动完成功能。问题是,它为自动完成处理生成了一个单独的解析器(再次使用 antlr3),该解析器源自AbstractInternalContentAssistParser. 这个多万行的代码部分说明xtext团队发现单靠ANTLR3的错误恢复是不够的。

同时 ANTLR4 具有parser.getExpectedTokensWithinCurrentRule()列出给定位置可能的令牌类型的功能。它在 ParseTreeListener 中使用时有效。剩下的是语义、范围等,它们超出了 ANTLR 的范围。

于 2014-11-04T22:36:28.377 回答