【问题标题】:Parsing & compilation nomenclature解析和编译命名法
【发布时间】:2012-02-29 08:34:46
【问题描述】:

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

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

我的命名问题是:

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

【问题讨论】:

  • 还有生成中间代码,优化[D到E之间]
  • 预处理器也必须做一些词法分析,它也需要了解语言。

标签: c++ c parsing build nomenclature


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    (A) 是简单的预处理:剪切和粘贴
    (B) 是lexical analysis
    (C) 是syntax analysis [解析]
    (D) 是semantics analysis [附加链接中的第 5 号]

    您的A,B,C,D 基本上是编译器的front end,而您的E 是其backend 的最后阶段

    【讨论】:

    • 那么 [ABC] 可以称为文本处理什么的吗? [BC] 呢?我正在为我正在尝试设计的编译器的模块和子模块寻找合适的名称。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2011-02-09
    • 2013-03-26
    • 2021-04-30
    相关资源
    最近更新 更多