我不知道这个问题是否有效,因为我对源代码解析不是很熟悉。我的目标是为一种现有的编程语言(语言"X")编写一个源代码完成函数,用于学习目的。Antlr(v4) 是否适合这样的任务,或者假设不存在现有的解决方案,必要的 AST/解析树创建和解析应该手动完成?
除了编译器书籍列表外,我没有找到太多关于该特定主题的信息,除了编译器不是我想要的。
GoWorks 中的代码完成完全使用 ANTLR 4 实现。以下视频显示了此代码完成引擎的完成级别。代码完成示例从 5 分钟一直持续到视频结束。
Tunnel Vision Labs 的 GoWorks IDE 简介(预览版)
多年来,我一直在研究代码完成算法,并且坚信没有更好的解决方案(自动或手动)来为满足我所谓的高度响应代码完成要求的新语言生成代码完成解决方案。如果您对这种性能或准确性不感兴趣,其他解决方案可能更容易让您参与(我个人不与他们合作,因为我很容易对结果感到失望)。
Xtext使用ANTLR3,并具有良好的自动完成功能。问题是,它生成了一个单独的解析器(再次使用 antlr3)用于从 AbstractInternalContentAssistParser
派生的自动完成处理。这几千行代码部分表明,仅靠 ANTLR3 的错误恢复被 xtext 团队发现是不够的。
同时,ANTLR4有一个功能parser.getExpectedTokensWithinCurrentRule()
,列出了给定仓位的可能代币类型。它在 ParseTreeListener 中使用时有效。剩下的是语义,范围等,这超出了ANTLR的范围。