22|增强编译器前端功能第1步:再识数据流分析技术
宫文学
你好,我是宫文学。
到目前为止,实现一门计算机语言的流程,我已经带你完整地走了一遍:从编译器前端的技术,到 AST 解释器,再到字节码虚拟机,最后生成了汇编代码并编译成了可执行文件。在这个过程中,我们领略了沿途的风光,初步了解了实现一门计算机语言的各种关键技术。
可是,我们在第一部分起步篇里,都是顾着奋力攀爬,去开出一条路来。可是这条路实在有点窄,是条羊肠小道,现在我们就需要把它拓宽一下。也就是把我们 PlayScript 语言的特性增强一下,拓宽我们的知识面。
这个拓宽的方式呢,我选择的是围绕数据类型这条主线进行。这是因为,现代计算机语言的很多特性,都是借助类型体系来呈现的。
不知道你注意到没有,到目前为止,除了最早的 AST 解释器以外,我们的后几个运行机制都只支持整型。所以,我们要在第二部分进阶篇中让 PlayScript 支持浮点型、字符串和自定义对象等数据类型。做这些工作的目的,不仅仅是增加我们语言支持的数据类型,而且,随着你对字符串类型、和自定义对象等类型的学习,你也会对对象的处理能力,包括对象的属性、方法、对象内存的自动管理等知识有更深刻的理解。
为了降低工作量,我后面的课程主要实现的是实现静态编译的版本。因为这种运行机制涉及的知识点比较广,并且我的目标之一就是要实现一个高效的、静态编译的 TypeScript 版本,到这里我的目标也算达到了。如果你有兴趣,你也可以把字节码虚拟机版本扩展一下,用于支持对象特性等高级特性。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了如何利用数据流分析技术来增强编译器前端功能,重点在于解决编译器在语义分析方面的不足。作者首先回顾了实现一门计算机语言的流程,然后指出需要拓宽语言的特性,增强知识面。在此基础上,作者选择围绕数据类型展开,计划在第二部分进阶篇中让PlayScript支持浮点型、字符串和自定义对象等数据类型。为了降低工作量,作者主要实现静态编译的版本,并计划实现一个高效的、静态编译的TypeScript版本。接着,文章详细分析了编译器前端功能的现状,包括词法分析、语法分析和语义分析功能的完善程度,指出了各方面的不足之处。最后,作者强调了语义分析功能的重要性,并提出了使用数据流分析技术和类型计算技术来增强语义分析工作的计划。整体而言,本文着重介绍了编译器前端功能的现状和未来的发展方向,以及如何利用数据流分析技术来增强语义分析工作。文章通过具体的代码示例和技术原理,深入浅出地介绍了数据流分析技术的核心特点和应用场景,为读者提供了深入理解和应用该技术的指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 奥巴鸟老师你好,像逻辑互斥导致的死代码可以用什么算法识别出来吗?2021-10-1111
- ifelse除02022-09-22归属地:浙江
- ifelse学习打卡2022-09-22归属地:浙江
- ifelse死循环2022-09-22归属地:浙江
- 有学识的兔子在对if else语句进行代码活跃度分析的时候,是不是逻辑或要改成逻辑与,即这两部分代码都是alive=false,才认为是deadcode。2021-10-16
- 静心除了return,抛出异常也是一种常见的情况,对于一门儿高级语言,异常的处理对于编译工具来说应该也是一种不小的挑战吧? 再有就是重复定义或声明变量,也是一种情况。2021-09-27
- 奋斗的蜗牛佩服,这些知识经过老师的讲解,竟然如此有趣2021-09-27
收起评论