Ide 编程中的文本突出显示、代码完成等思想

Ide 编程中的文本突出显示、代码完成等思想,ide,Ide,我想知道高级文本编辑器功能的想法,如文本突出显示、代码完成、自动缩进等 为了明确我的想法,我设想文本突出显示是将整个文本读入字符串,然后用关键字+颜色代码对关键字进行正则表达式替换,然后再次替换文本。这看起来很合乎逻辑,但在文件为4000行的情况下,每次击键都这样做效率太低了!因此,我想知道在C语言中实现这类功能的想法,例如(任何其他语言都可以,但这正是我目前正在尝试的)。语法突出显示: 我想到了。我实际上还没有尝试过这个例子,所以我不能说任何关于性能的事情,但这似乎是启动和运行基本语法的最简单

我想知道高级文本编辑器功能的想法,如文本突出显示、代码完成、自动缩进等


为了明确我的想法,我设想文本突出显示是将整个文本读入字符串,然后用关键字+颜色代码对关键字进行正则表达式替换,然后再次替换文本。这看起来很合乎逻辑,但在文件为4000行的情况下,每次击键都这样做效率太低了!因此,我想知道在C语言中实现这类功能的想法,例如(任何其他语言都可以,但这正是我目前正在尝试的)。

语法突出显示: 我想到了。我实际上还没有尝试过这个例子,所以我不能说任何关于性能的事情,但这似乎是启动和运行基本语法的最简单方法

自动完成: 给定一个可能的关键字列表(可以根据上下文进行筛选),您可以快速丢弃与用户当前键入内容不匹配的任何内容。在大多数语言中,您可以安全地将自己限制为一个“单词”,因为空白在标识符中通常是不合法的。例如,如果我开始键入“li”,自动完成数据库可以丢弃任何不以字母“l”和“I”(忽略大小写)开头的内容。随着用户继续键入,越来越多的选项可以被丢弃,直到只剩下一个或至少几个选项为止。因为你一次只看一个单词,这会非常快

缩进: 在类C语言中,一种快速而肮脏的方法是使用一个计数器,每{一次递增,每}一次递减。按enter键开始新行时,缩进级别为
counter*indentWidth
,其中
indentWidth
是要缩进的空格或制表符的常量。然而,这有一个严重的缺点——考虑如下:

if(foo)
    bar(); // This line should be indented, but how does the computer know?

为了解决这个问题,您可以查找以“')”结尾的行,而不是分号。

一个旧的但仍然适用于编辑器内部的资源是。第7章直接讨论了重新显示策略的问题。

为了进行“高级”语法突出显示,即需要上下文知识的突出显示,通常需要一个解析器。大多数解析器是建立在某种类型的a之上的,这种a存在于各种类型中,并且是常见的

然而,大多数解析器对整个文件进行操作,这对于文本编辑来说效率很低,所以我们转而使用。增量解析器使用语言知识和先前已处理内容的结构,以便尽可能少地重新执行工作

以下是对增量解析的一些参考:


你的意思是“实现”而不是“想法”?当扫描完成时,你只需要从他们输入的地方向后走,直到你输入空格或特殊字符,因为这将是他们输入内容的开始<代码>5+蘑菇可以跳过“5+”位,因为没有变量/函数名包含空格或+。+1个好问题,最近一直在问自己同样的问题,所讨论的IDE必须对文档进行标记,以便对标记进行颜色编码;没有别的办法了。当然,不需要在每次按键时扫描整个文档中的令牌。我可以想象,只有光标周围的区域(以空格为界)在每个按键笔划时被重新标记。