佛山市拓洲网络科技有限公司
拓洲科技,贴近未来

软件开发语言Go的代码是怎么样编译成机器码的

Go 1.11 的编译器,是怎么样高效率地把Go的软件开发项目的源代码编译成执行文件的,我们将在本文中深入了解一下整个编译的过程。

编译器把软件开发项目代码编译成执行文件,一般有三个阶段:

  1. Scanner阶段,将源代码转换为tokens列表,供Parser使用。
  2. Parser阶段,将tokens转换为抽象语法树,供机器码生成器使用。
  3. 机器码生成阶段,将抽象语法树转换为机器代码。

Scanner

编译器的第一步是将软件开发项目的源代码文本分解为tokens,这由Scanner(也称为Lexer词法分析器)完成。tokens可以是关键字,字符串,变量名,函数名等。每个有效程序“单词”由tokens表示。对于Go来说,这可能意味着我们有一个tokens,例如:“package”,“main”,“func”等等。

每个token由Go中的位置,类型和原始文本表示。Go甚至允许我们使用go / scanner 和go / token 包在Go程序中自己执行scanner程序。这意味着我们可以在scanner完成后检查Go程序的程序。为此,我们将创建一个打印Hello World程序的所有tokens的简单scanner程序。

程序源代码如下:

我们将创建我们的源代码字符串并初始化scan.Scanner 结构,它将扫描我们的源代码。我们尽可能多地调用Scan()并打印token的位置,类型和文字字符串,直到我们到达文件结束(EOF )标记。

当我们运行程序时,它将打印以下内容:

在这里,我们可以看到Go语言在编译程序时Parser阶段使用的内容。我们还可以看到Scanner添加的分号,就像其他编程语言(如C)通常将分号放在行尾一样。这解释了为什么Go不需要分号:它们由Scanner自动添加。


邮箱:vyloy@yiqishare.com

地址:广东省佛山市顺德区容桂街道高黎村19号首层之二 邮编:528303

Copyright © 2014-2018 yiqishare.com. All rights reserved. 粤ICP备15033752号