栈实现的表达式求值

编译原理 算法与数据结构
后进者先出,先进者后出,这就是数据结构中的"栈"。栈是一种相当简单的数据结构,但应用十分广泛,例如编程语言中的函数调用栈、浏览器的前进后退功能。本文讲的是栈的另一个常见应用场景,编译器利用栈实现表达式求值。初次见到这种实现思路的时候,我不禁叫绝,一个简单的栈还能玩出花。 例如,一 …...
Read more →

cbc 编译器

编译原理
cbc 编译器是《自制编译器》中实现的。由于 cbc 编译器是在 32 位机器上工作的,而现在大部分都是 64 位,即使按照官方文档进行处理,编译时也会出现各种错误,因此想到了用 docker 搭建 32 位的系统。 $ docker run -d -ti --name cbc -v …...
Read more →

远程 coding 实现

工具
出于现实的考虑,不得不使用多台性能不怎么样的电脑一起玩耍,主要还是为了分摊机器的内存。最先考虑到的是 docker,毕竟现在运行环境都是用 docker 部署的,我想通过docker run -v 远程目录:容器目录 image一条命令来实现,果真是图样图森破,sometime …...
Read more →

词法分析

编译原理
一个简单的词法分析程序如下: 开始; 调用识别器; 判断是否为关键字或标识符,如果是,跳转到步骤 4;如果否,跳转到步骤 5; 查关键字表(KT表,keyword table),如果是关键字则记录该标记该值为K.TOKEN;否则查填标识符表(IT表,identifier table),识别该值为 …...
Read more →

PhpStorm 中使用 Docker 镜像的 PHP CLI Interpreter

工具 PHP
自学 PHP 以来,除了初学时期,一直都不太喜欢用集成环境如 MAMP、WAMP 之类的,这些工具虽然用起来很方便,但不符合我折腾的个性,而且灵活性有所欠缺,还可能会降低自己的好奇心;当然重要的是服务器一般也不会使用集成环境。这不,PHP 又出新版本了,想尝尝鲜,集成工具没有更新,不就得自己折腾么。 …...
Read more →