手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7534 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

29|面向对象编程第1步:先把基础搭好

你好,我是宫文学。
到目前为止,我们的语言已经简单支持了 number 类型、string 类型和数组。现在,我们终于要来实现期待已久的面向对象功能了。
在我们的课程中,为了实现编译器的功能,我们使用了大量自定义的类。最典型的就是各种 AST 节点,它们都有共同的基类,然后各自又有自己属性或方法。这就是 TypeScript 面向对象特性最直观的体现。
面向对象特性是一个比较大的体系,涉及了很多知识点。我们会花两节课的时间,实现其中最关键的那些技术点,比如声明自定义类、创建对象、访问对象的属性和方法,以及对象的继承和多态,等等,让你理解面向对象的基础原理。
首先,我们仍然从编译器的前端部分改起,让它支持面向对象特性的语法和语义处理工作。

修改编译器前端

首先是对语法的增强。我们还是先来看一个例子,通过这个例子看看,我们到底需要增加哪些语法特性:
class Mammal{
weight:number;
color:string;
constructor(weight:number, color:string){
this.weight = weight;
this.color = color;
}
speak(){
println("Hello!");
}
}
let mammal = new Mammal(20,"white");
println(mammal.color);
println(mammal.weight);
println(mammal.speak);
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何在编译器中实现面向对象功能,包括对语法的增强、类的声明、构造方法的调用、this关键字的使用以及对象属性和方法的访问。文章还讨论了语义分析的工作,包括类型消解和类型检查。此外,文章还介绍了如何升级AST解释器以支持面向对象特性,包括创建对象、保存对象数据、访问对象属性和执行对象方法。在内存布局方面,文章提到了对象的设计和内置函数的实现。此外,还讨论了修改编译器后端的重点,包括访问对象的属性和调用对象的方法。总结来说,本文深入浅出地介绍了编译器中实现面向对象功能的关键步骤,适合对面向对象编程感兴趣的读者阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • ifelse
    学习打卡
    2022-09-27归属地:浙江
  • jack123
    TypeScript一切皆对象,所以它内置有这些方法的实现
    2021-11-13
  • 奋斗的蜗牛
    太赞了,面向对象的实现真是不简单
    2021-10-24
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部