02|编程语言全景图(上):编译器是如何把源代码翻译成字节码的?
海纳
![](https://static001.geekbang.org/resource/image/38/ff/38187a4b8fafb9698478b04fc215c0ff.jpg)
你好,我是海纳。
从上节课编程语言发展的基本历程中,我们可以了解到,编程语言的发展为虚拟机技术提供了源动力,而虚拟机技术的发展则为编程语言的发展提供了根本保障。虚拟机中的很多技术是为了支持对应的语言特性才被发明出来的,同样有很多好用的语言特性也是因为虚拟机技术的长足发展才得以实现。所以说,编程语言和虚拟机技术是相互依赖和对立统一的。
这节课我们将在上节课内容的基础上,使用一个最基本的表达式求值的例子,来说明一个编程语言的编译器是如何把源代码翻译成计算机可以理解的结构并最终执行的。
我们先创建一个文本文件,里面是一个只包含了数字和四则运算的表达式,编写一个程序来计算这个表达式。基本的过程包括词法分析、文法分析、生成抽象语法树、生成字节码、虚拟机执行五个步骤。这节课我们会实现前四个步骤,虚拟机执行是一个很大的话题,我们将会在第三讲深入介绍。
![](https://static001.geekbang.org/resource/image/01/dc/01f33b8729bb289658b79af49ca257dc.png?wh=3342x952)
词法分析
第一个步骤就是要从文本文件中逐个字符地去读取内容,然后把字符识别成数字或者是运算符。这些数字和运算符是组成程序的基本元素,它有一个专用的名字,叫做 token。把文本文件中的一串字符,识别成一串 token,这就是我们要解决的第一个问题。
比如,我们创建一个文本文件,命名为 test_token.txt,其中只包含一行表达式。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
1. 编程语言和虚拟机技术相互依赖,为彼此的发展提供了根本保障。 2. 词法分析是编程语言编译器中的第一个步骤,通过正则表达式和状态机来实现。 3. 文法分析是编译器中的重要环节,通过自顶向下的分析方法实现递归下降的文法分析。 4. 抽象语法树对编译器有非同寻常的意义,大多数编译器都会实现抽象语法树这个数据结构。 5. 生成字节码对抽象语法树进行一次后序遍历就可以生成基于栈的字节码。 6. 虚拟指令集是字节码的本质,每条指令代表一种操作,虚拟机执行这些指令。 7. 访问者模式操作抽象语法树是一种常用的手段,对抽象语法树的后序遍历可以产生字节码。 8. 编译器的主要工作流程包含了词法分析、文法分析、生成抽象语法树、生成字节码以及执行字节码等过程。 9. 词法分析的主要作用是将字符划分成有意义的单词,这些单词统称为 token,词法分析经常使用有限自动机作为主要的实现手段。 10. 文法分析的作用是分析 token 之间的有机联系,进而识别出抽象语法树结构。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 浩仔是程序员首发!!有交流群吗?
编辑回复: 有呀,在课程介绍页面
2024-05-08归属地:广东
收起评论