language-agnostic - 编译器在解析过程中将大部分时间花在哪里?

标签 language-agnostic parsing compiler-construction lexical-analysis

我阅读了 Sebesta book ,编译器将大部分时间花在对源代码进行词法分析上。因此,与语法分析器不同,优化词法分析器是必要的。

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

我的意思是语法分析派生过程。

最佳答案

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

在比较词法分析和句法分析时,确实可能词法分析的成本更高。这是因为两者都使用状态机,即每个元素有固定数量的 Action ,但在词法分析(字符)中的元素数量比在句法分析( token )中大得多。

关于language-agnostic - 编译器在解析过程中将大部分时间花在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101267/

相关文章:

c++ - 这种写代码的方式怎么能叫呢?

language-agnostic - Big-O 表示法的替代品?

algorithm - BIT:使用二进制索引树?

java - 如何将Iterator[String]转换为Reader实例进行解析?

php - 解析 PHP 字符串中的变量

python - Python 3.5 的语法是 LL(1) 吗?

c - 从函数实现返回结构

algorithm - 在二维 boolean 矩阵中找到最接近的 "true"元素?

deep-learning - TVM 与 MLIR 有何不同?

asp.net - 此 ASP.NET 功能的文档在哪里? <%= 字符串格式,params object[] args %>