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

28|增加更丰富的类型第3步:支持数组

你好,我是宫文学。
前面我们已经给我们的语言,增加了两种数据类型:浮点数和字符串。那么,今天这一节课,我们再继续增加一种典型的数据类型:数组。
数组也是计算机语言中最重要的基础类型之一。像 C、Java 和 JavaScript 等各种语言,都提供了对数组的原生支持。
数组跟我们之前已经实现过的 number、string 类型的数据类型相比,有明显的差异。所以在这里,你也能学到一些新的知识点,包括,如何对数组做类型处理、如何设计数组的内存布局,如何正确访问数组元素,等等。
在完成这节课的任务后,我们的语言将支持在数组中保存 number 和 string 类型的数据,甚至还可以支持多维数组。是不是感觉很强大呢?那就赶紧动手试一试吧!
那么这实现的第一步,我们需要修改编译器前端的代码,来支持与数组处理有关的语法。

修改编译器前端

在编译器前端,我们首先要增加与数组有关的语法规则。要增加哪些语法规则呢?我们来看看一个最常见的使用数组的例子中,都会涉及哪些语法特性。
let names:string[] = ["richard", "sam", "john"];
let ages:number[] = [8, 18, 28];
let a2:number[][] = [[1,2,3],[4,5]];
for (let i = 0; i< names.length; i++){
println(names[i]);
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何在编程语言中增加对数组类型的支持。作者首先讨论了在编译器前端进行的修改,包括对数组类型、数组字面量和下标表达式的语法规则的扩展,以及相应的AST节点对象的创建和语法解析程序的修改。此外,文章还提到了语义分析方面的增强,包括类型处理和左值分析等工作。在运行时的功能部分,文章详细介绍了PlayArray对象的设计和内置函数的实现,以支持基本的数组操作。最后,文章提到了修改编译器后端,以生成正确的汇编代码,从而编译成可执行文件。整体而言,本文深入浅出地介绍了如何在编程语言中增加对数组类型的支持,对于想要了解编程语言设计和实现的读者来说,具有很高的参考价值。文章内容涵盖了语法处理、内存布局设计和访问数组元素等关键知识点,为读者提供了全面的技术指导。

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

全部留言(3)

  • 最新
  • 精选
  • 奋斗的蜗牛
    老师,改造后的数组语法好像还是左递归的

    作者回复: 没错。不过,并不是所有的左递归文法都是难以处理的。有机会我会结合PEG给大家单独开一节。你有时间可以先了解一下PEG。

    2021-10-19
    1
  • ifelse
    学习打卡
    2022-09-26归属地:浙江
  • 奋斗的蜗牛
    这块的知识太赞了
    2021-10-21
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部