编译原理实验 02 | Cool 语言堆栈机
2022-05-30
1. 操作说明
命令 | 含义 |
---|---|
int | 将整数数添加到栈中 |
+ | 栈中压入 + |
s | 栈中压入 s |
e | 计算栈顶表达式的值(详见下文) |
d | 打印栈中内容 |
x | 退出 |
e
命令的作用:
- 如果
+
在栈顶,那么+
出栈,栈顶两整数弹出并相加,将结果压入栈 - 如果
s
在栈顶,那么s
出栈,下面两个选项在栈内交换
2. 栈的实现
2.1 内部成员变量
cool
语言是一种面向对象的语言,所有函数和值都是以对象的形式存在,栈的实现也要以对象的形式进行。由于不能直接创建数组,我们的栈使用嵌套的方式进行,栈内有 3 个变量:
top
:栈顶元素rest
:栈中剩余元素,是当前Stack
的子Stack
size
:当前栈的深度,1 为最底层(打印输出时会减 1,即从第 0 层往上爬)。同时利用该数判断栈是否为空
2.2 初始化函数
Stack
类的核心就是它的初始化函数,在该函数中我们可以看到,栈是在 rest
的嵌套中实现的。
: ;
2.3 入栈操作
入栈操作借助 init
实现:
: ;
因为在 Cool
语言中不能直接对 self
赋值,我们只能通过下面的方式进行入栈操作:
stack <- stack.
2.4 出栈操作
出栈操作只需让当前的栈变为 rest
即可:
: ;