跟 Windows 不同,在 Linux 中的文件扩展名仅仅是方便用户肉眼判断类型而已,将扩展名换掉并不会影响使用。
后进者先出,先进者后出,这就是数据结构中的”栈”。栈是一种相当简单的数据结构,但应用十分广泛,例如编程语言中的函数调用栈、浏览器的前进后退功能。本文讲的是栈的另一个常见应用场景,编译器利用栈实现表达式求值。初次见到这种实现思路的时候,我不禁叫绝,一个简单的栈还能玩出花。
cbc 编译器是《自制编译器》中实现的。由于 cbc 编译器是在 32 位机器上工作的,而现在大部分都是 64 位,即使按照官方文档进行处理,编译时也会出现各种错误,因此想到了用 docker 搭建 32 位的系统。
出于现实的考虑,不得不使用多台性能不怎么样的电脑一起玩耍,主要还是为了分摊机器的内存。最先考虑到的是 docker,毕竟现在运行环境都是用 docker 部署的,我想通过docker run -v 远程目录:容器目录 image一条命令来实现,果真是图样图森破,sometime naive,docker 目前还不支持挂载远程目录吧。
一个简单的词法分析程序如下: