2009-09-14 169 views
9

我不知道什么是编译,编译时会发生什么?我的意思是,你按下编译或在控制台中键入,但它在“背景”中实际上做了什么?当我编译时会发生什么?

回答

30
  1. 首先编译器"lexes"的源码。这意味着它将源代码转换为一系列“令牌”。令牌是对编译器有意义的字母,数字和符号的序列。

  2. 接下来,编译器"parses"步骤一的令牌序列。这意味着编译器会检查以确保源符合编程语言的规则(grammar)。

  3. 接下来,编译器执行syntactic analysis来创建源的表示以确定源的语义含义。这是编译器构建syntax tree的步骤。

  4. 最后,编译器将在目标表示中捕获源的语义含义(如机器码,中间语言(如Microsoft's CIL或其他编程语言))的输出。

有关简要信息,请参阅Wikipedia。有关血淋淋的细节,请参阅the dragon book(每一位计算机科学的学生都应该学习这本书)。

+1

谢谢,“(每个计算机科学的学生都应该学习这本书)。”我是一名计算机科学的学生..我从来没有真正知道这本书,我更专注于编程..数据结构,物体bla bla ..从来没有真正想知道“超越” – ant 2009-09-14 01:35:04

+3

+1龙书 – Pwninstein 2009-09-14 02:47:30

+1

非常好的解释。 +1 – Alex 2009-09-14 03:11:47

10

this参见

基本上,魔法精灵和仙女转人类可读代码转换为机器代码。

3

一个非常简短的概述将是一个编译器分析您的代码检查错误,然后将其转换为字节或机器代码。

为了更好地概述我会读上的编译器维基百科的文章:

http://en.wikipedia.org/wiki/Compiler

1

编译正在翻译的源代码为机器码。通常,编译器(或解释器)会生成一个中间代码,有时称为字节代码,它在虚拟机上运行(这是编译Java的方式)。字节代码由虚拟机翻译为机器特定的代码,这些代码运行在您定位的特定架构上。这整个过程可以被认为是“编译”

+2

目标往往是,但不一定是机器代码。我编译的编译器编译为C代码 - 然后我们使用本机C编译器完成编译为机器代码的工作。另一个产生一个p代码(伪代码 - 连字符在哪里去?);然后解释器使用常规C(机器代码)函数来执行p代码指令。 Java编译器为JVM生成字节码 - 也不是机器码。 – 2009-09-14 01:17:13

3

this

龙书,建筑编译器的原始来源。

+0

'或'是轻微的误导 - 与什么相比?你的建议阅读很不错,但你应该让自己的答案更接近自己。然后你会得到最后的选票... – 2009-09-14 01:18:39

+0

这是回应我对这个问题的第一个答案,这只是“这个”。作为维基百科关于编译器的文章的链接。 – 2009-09-14 03:05:30

相关问题