编译器在解析过程中花费大部分时间在哪里?

Ara*_*raK 3 language-agnostic compiler-construction parsing lexical-analysis

我在Sebesta书中读过,编译器大部分时间花在lexing源代码上.因此,与语法分析器不同,优化词法分析器是必要的.

如果这是真的,为什么词法分析阶段与一般的语法分析相比需要花费这么多时间?

我的意思是通过语法分析推导过程.

Mar*_*wis 8

首先,我不认为它确实是真的:在许多编译器中,大部分时间都不花在lexing源代码上.例如,在C++编译器(例如g ++)中,大部分时间花在语义分析上,特别是在重载决策中(试图找出要执行的隐式模板实例化).此外,在C和C++中,大多数时间通常用于优化(创建单个函数或整个翻译单元的图形表示,然后在这些图形上运行长算法).

在比较词汇和句法分析时,词汇分析可能确实更昂贵.这是因为两者都使用状态机,即每个元素有一定数量的动作,但词法分析(字符)中的元素数量要比语法分析(标记)大得多.