老早就想搞一个完整的解释器,不过呢,通用语言的解释器比较庞大,不太好写。写一个 JSON 解释器比较合适,要素不多,好掌握一点,而且在忽略一些细节之后,代码量极少,对于入门者了解解释器甚至编译器到底在干什么很有帮助。
根据 https://www.json.org 的介绍,JSON 由以下结构组成: …...
Read more →
虚拟机是由软件实现的计算机。
以下是一个由 JavaScript 实现的虚拟机。
let virtualMachine = function(program) { let programCounter = 0; let stack = []; let stackPointer = 0; while …...
Read more →
之前想写一篇《栈实现的表达式求值》,鸽了。这段时间又在学习编译原理,也有了一些想法,恰好看见Data Structure - Expression Parsing ,如获至宝,感觉有点意思。
算术表达式可以使用三种不同但效果等效的的表示法来表示。这些表示法如下:
中缀表示法 前缀表示法(波兰表示法) …...
Read more →
在需要恢复控制权的位置设置一系列 label:一个位于开始位置,另一个在每个 return 语句后面。我们还设置了一个 state 变量,用于在多次函数调用时告诉我们下次应该在哪里恢复控制权。在每次返回前,都需要更新 state 变量,使其指向正确的 label。而在调用后,我们都会通过 …...
Read more →
一个简单的 8086 汇编子程序(函数)。
assume cs:code code segment main: mov ax, 1000h call add1 mov ax, 4c00h int 21h add1: add ax, 1 ret code ends end main 标号main可以简 …...
Read more →