1

如果我将 C 或 C++ 源文件的编译过程分解为以下步骤:

  • 答:预处理。
  • B:标记化(收集和列出关键字、标识符、符号、文字(字符串、字符、数字))。
  • C:将收集到的令牌组装成结构化的形式,例如树。
  • D:通过分析其语义来处理和验证这种结构化形式。
  • E:生成指令列表(例如:ASM)。

我的命名问题是:

  1. 语法是否解析所有#ABC?#公元前?只是#C?
  2. #ABC 我应该使用哪些术语?#公元前?#C?
  3. 什么是 lexing,在这里?只是#B吗?
  4. #D 是语义解析吗?
4

2 回答 2

0

虽然只有预处理阶段是语言标准的一部分,但大多数平台将完整的构建过程分为

  • 预处理,
  • 编译,
  • 组装,
  • 链接。

编译是包含所有“艰苦工作”的阶段,从词法分析和解析开始。优化在路上的某个地方出现。

一些使用某种形式的“链接时间优化”的现代系统可能会推迟或重复编译/组装阶段,直到所有组成的目标文件都被处理一次,但从道德上讲,这与你只是连接你的所有输入文件没有太大区别项目成一个大文件并编译它。

于 2012-02-07T21:39:13.490 回答
0

(A) 是简单的预处理:剪切和粘贴
(B) 是词法分析
(C) 是语法分析[解析]
(D) 是语义分析[附加链接中的数字 5]

A,B,C,D基本上是编译器的前端,而你E是其​​后端的最后阶段

于 2012-02-07T21:41:42.057 回答