顾名思义,静态库可以理解为该库相对于可执行目标文件是静态的,而动态库相对于可执行文件是动态的。静态库跟可执行文件捆绑在一起,不需要依赖操作系统中其它库;动态库则一般固定在操作系统的特定位置,如/usr/lib目录中,如果可执行文件依赖于动态库,一旦该库被移动或损坏,则无法运行。有兴趣可以进行以下测试 …...
Read more →
后进者先出,先进者后出,这就是数据结构中的"栈"。栈是一种相当简单的数据结构,但应用十分广泛,例如编程语言中的函数调用栈、浏览器的前进后退功能。本文讲的是栈的另一个常见应用场景,编译器利用栈实现表达式求值。初次见到这种实现思路的时候,我不禁叫绝,一个简单的栈还能玩出花。
例如,一 …...
Read more →
cbc 编译器是《自制编译器》中实现的。由于 cbc 编译器是在 32 位机器上工作的,而现在大部分都是 64 位,即使按照官方文档进行处理,编译时也会出现各种错误,因此想到了用 docker 搭建 32 位的系统。
$ docker run -d -ti --name cbc -v …...
Read more →
一个简单的词法分析程序如下:
开始; 调用识别器; 判断是否为关键字或标识符,如果是,跳转到步骤 4;如果否,跳转到步骤 5; 查关键字表(KT表,keyword table),如果是关键字则记录该标记该值为K.TOKEN;否则查填标识符表(IT表,identifier table),识别该值为 …...
Read more →