William A

最新文章

网络协议入门

刚系统学习网络协议不久,苦于一直找不到适合自己思路的教程,只好东拼西凑地阅读各种文章书籍,好不容易才拼凑出便于自己理解的网络协议说明书。 该说明书从最常用的网络程序——浏览器入手。 OSI 模型把网络通信工作分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层;实际上使用的 TCP/IP 模型则划分五层(貌似一 开始是划分为四层的,把现在的数据链路层和物理层划到一起):应用层(对 …

虚拟机实现原理

虚拟机是由软件实现的计算机。 以下是一个由 JavaScript 实现的虚拟机。 let virtualMachine = function(program) { let programCounter = 0; let stack = []; let stackPointer = 0; while (programCounter < program.length) { let …

表达式解析

之前想写一篇《栈实现的表达式求值》,鸽了。这段时间又在学习编译原理,也有了一些想法,恰好看见Data Structure - Expression Parsing,如获至宝,感觉有点意思。 算术表达式可以使用三种不同但效果等效的的表示法来表示。这些表示法如下: 中缀表示法 前缀表示法(波兰表示法) 后缀表示法(逆波兰表示法) 中缀表示法(Infix Notation) 例如a - b + c,操作 …

词法分析

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

语法分析

语法分析是编译前端部分的重要部分。 # todo class PlusMinus: def __init__(self, left, op, right): self.left = left self.op = op self.right = right def __str__(self): return '({} {} {})'.format(self.left, …