对于个人项目,我希望构建一个定制的IntelliSense系统,该项目是一个简单的代码编辑器。
我遇到的一些问题是编辑器的IntelliSense方面,具体来说,是代码的突出显示。系统如何知道哪些词是关键字?
一种解决方案是手动添加它们,但这是否意味着对于第三方库,由于该程序不具有该库或API的功能,因此无法正常工作吗?
因此,简而言之,如何构建IntelliSense代码突出显示逻辑,并且互联网上是否存在某种类型的存档,我可以在其中获得某种语言的关键字?请记住,我想将此代码编辑器构建为多语言版本(支持多种语言)。
答案 0 :(得分:0)
即使对于一种不平凡的语言也要获得体面的支持,这是很多工作。考虑使用可以满足您需求的库。其中大多数并不是免费的,但可能是解决之道,除非本练习的重点是您学习编译器理论。
此类库的一个示例是Microsoft的C#编译器(Roslyn)。它是免费的开放源代码库,可以在其他.NET应用程序中使用。您给它一些代码作为输入(作为字符串),它告诉您有关那段代码的所有知识:符号和关键字在哪里,每个符号是什么,在什么时候提供什么,自动完成的地方,在哪里进行编译代码中的时间错误等等...
如果您想学习如何自己构建类似的东西,建议您拿一本编译器理论书籍,并花几个月的时间。虽然这不是火箭科学,但也不是一件容易的事。
一旦您对词法分析器和解析器有了基本的了解,那么您可能希望使用像Antlr这样的解析器/词法生成器来完成构建词法分析器和解析器的繁琐工作。之后,您仍然需要大量工作来处理解析器为您提供的语法树。如果要构建自动完成功能(智能),请记住,当用户输入内容时,他们输入的代码可能无效,这可能会使解析器无法正常工作,并导致错误的自动完成建议。正如我所说的,要做到这一点需要很多工作。
也就是说,如果仅需要语法突出显示,则可以使用已经具有语法突出显示的编辑器。根据您使用的技术,您可能可以使用Scintilla或AvalonEdit。但是,您不会获得智能感知(自动完成),错误突出显示或依赖于理解代码含义(语义分析)的任何其他功能,但可能会得到不俗的语法突出显示。