【发布时间】:2016-07-16 12:25:45
【问题描述】:
我想知道在流行的文本编辑器中使用什么技术来快速 lex 一个巨大的源文件(例如 C++)。
每次编辑文件时重新对整个文档进行词法分析(即添加一些字符)可能很快变得不可行。但这些字符可能会将所有内容(朝向顶部、底部或两者)更改为源文件,就像插入的时候一样
/*
或
\*
大文件的一半。
是否有运行时词法分析的标准方法?
【问题讨论】:
-
Lexing 速度非常快。你的意思是paraing?
-
@EJP:你的意思是解析吗?
-
插入一些字符如何改变 lex 向顶部? (至少,比当前的标记更多,它可能成为或不再是关键字)
-
@rici 如果编辑器完全像编译器一样处理标记,则 /* 没有 / 将是无效标记。如果您稍后在文件底部插入 */,则 / 和 */ 之间的所有内容都将成为注释标记。当然,如果您在文本编辑器中输入
/*,您希望文本在输入*/之前变为绿色,因此文本编辑器的词法分析器不应该与编译器的完全一样。 -
@sepp2k:你的第二句话是。至于第一个,我编写的词法分析器将 /* 到程序末尾的文本视为未终止的注释(这肯定是无效的标记,但属于特定种类,如未终止的字符串)。我这样做部分是为了避免无限期的词法分析器回溯,部分是因为面对未终止的注释/字符串的解析恢复过于投机而无法尝试打扰(imo)。但关键是您的第二个观察结果:将字符串和 cmets 着色为鲜红色直到终止的文本编辑器真的很烦人......
标签: parsing compilation compiler-construction language-agnostic