13、编译器 II:代码生成

Jack编译器代码生成详解

编译器 II:代码生成

在编程领域,将高级程序转换为二进制代码的编译器就像一个神奇的魔术师。大多数程序员认为编译器是理所当然的,但仔细思考,这种转换能力近乎魔法。接下来,我们将深入探讨如何构建一个针对 Jack 语言的编译器,这是一种简单、现代的基于对象的语言。

1. 代码生成概述

高级程序员使用变量、表达式、语句、子程序、对象和数组等抽象构建块来描述程序的功能。编译器的任务就是将这些语义转换为目标计算机能理解的语言,在我们的例子中,目标计算机是之前章节描述的虚拟机。

在这个过程中,我们会以 Point 类为例,展示如何将高级功能逐步转换为虚拟机代码。Point 类包含了所有可能的变量类型(字段、静态、局部和参数)和子程序类型(构造函数、方法和函数),还展示了函数调用、构造函数调用和方法调用等特性。

2. 变量处理

编译器的基本任务之一是将源高级程序中声明的变量映射到目标平台的主机 RAM 上。在 Jack 语言中,所有基本类型(int、char 和 boolean)都是 16 位宽,与 Hack RAM 的地址和字宽相同,因此每个 Jack 变量都可以精确映射到内存中的一个字。

不同类型的变量有不同的生命周期:
- 类级静态变量 :由类中的所有子程序全局共享,在程序执行的整个过程中应保持单个副本存活。
- 实例级字段变量 :每个对象(类的实例)必须有一组私有的字段变量,当对象不再需要时,这些内存必须释放。
- 子程序级局部和参数变量 :每次子程序开始运行时创建,子程序终止时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值