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

Dan*_*nte 5 antlr code-completion antlr4

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

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

Sam*_*ell 10

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

隧道视觉实验室GoWorks IDE简介(预览版)

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

  • Sam,我注意到几年前您认为 ANTLR“[不是实现自动完成的正确方法](http://www.antlr3.org/pipermail/antlr-interest/2008-November/031576.html )”。是什么改变了你的想法?能否请您详细说明一下。 (2认同)

Ayk*_*lic 6

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

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