我不知道,如果这个问题有效,因为我不太熟悉源代码解析。我的目标是为一个现有的编程语言(语言“X”)编写源代码完成函数以用于学习目的。 Antlr(v4)是否适合此类任务,或者是否应该手动完成必要的AST / Parse树创建和解析,假设不存在现有解决方案?
我没有找到关于该特定主题的更多信息,除了编译器书籍列表,除了编译器不是我想要的。
答案 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范围之外的。