自定义智能感知系统

Custom IntelliSense system

对于我期待构建自定义 IntelliSense 系统的个人项目,该项目是一个简单的代码编辑器。

我遇到的一些问题是编辑器的 IntelliSense 方面,具体来说,是代码的突出显示。系统如何知道哪些词是关键词?

一个解决方案是手动添加它们,但这是否意味着对于第三方库,它不会工作,因为该程序没有该库或 API 中的函数?

那么简而言之,IntelliSense代码高亮逻辑是如何构建的,互联网上是否有某种类型的存档可以获取语言的关键字?请记住,我想将此代码编辑器构建为多语言编辑器(支持多种语言)。

即使是一种重要的语言,建立良好的支持也是一项艰巨的工作。考虑使用一个可以为你做这件事的图书馆。其中大部分都不是免费的,但可能是必经之路,除非本练习的目的是让您学习编译器理论。

Microsoft 的 C# 编译器 (Roslyn) 就是此类库的一个示例。它作为一个免费的开源库提供,您可以在其他 .NET 应用程序中使用它。你给它一些代码作为输入(作为一个字符串),它会告诉你关于那段代码的所有信息:符号和关键字在哪里,每个符号是什么,在什么时候为自动完成提供什么,在哪里编译- 代码中的时间错误等...

如果你想自己学习如何构建这样的东西,我建议你买一本编译器理论书并预留几个月。虽然这不是火箭科学,但也不是微不足道的。

一旦您对词法分析器和解析器有了基本的了解,那么您可能会想使用像 Antlr 这样的 parser/lexer 生成器来完成构建词法分析器和解析器的繁琐工作。在那之后,你还有很多工作要处理解析器给你的语法树。如果您正在构建自动完成 (intellisense),请记住,当用户正在键入时,他们正在键入的代码可能无效,这可能会使解析器关闭并导致错误的自动完成建议。正如我所说,要做到这一点需要做很多工作。

就是说,如果您只需要语法高亮显示,您可能可以使用已有的编辑器。根据您使用的技术,您或许可以使用 Scintilla or AvalonEdit。不过,您不会获得智能感知(自动完成)或错误突出显示或任何其他依赖于理解代码含义(语义分析)的功能,但您可能会获得半体面的语法突出显示。