使用Antlr完成源代码是否可行?

时间:2013-11-02 02:46:06

标签: antlr antlr4 code-completion

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

我没有找到关于该特定主题的更多信息,除了编译器书籍列表,除了编译器不是我想要的。

2 个答案:

答案 0 :(得分:9)

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

Intro to Tunnel Vision Labs' GoWorks IDE (Preview Release)

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

答案 1 :(得分:5)

Xtext使用ANTLR3并具有良好的自动完成功能。问题是,它生成一个单独的解析器(再次使用antlr3)进行自动完成处理,该处理源自AbstractInternalContentAssistParser。这个数千行代码部分显示xtext团队单独发现ANTLR3的错误恢复不足。

同时,ANTLR4有一个函数parser.getExpectedTokensWithinCurrentRule(),它列出了给定位置的可能令牌类型。它在ParseTreeListener中使用时有效。剩下的是语义,范围等,这是ANTLR范围之外的。