关于chlang 这是个玩具解释器,通过完成它学习了许多关于编译器前端的知识点 github地址 本来这是个c语言项目,由于c语言实现实在过于繁琐,遂弃坑转为java,采用maven的项目管理结构 本语言主要参考了《自制编程语言》、c4的源代码 本文更新于2017.06.21 词法分析 词法分析器所在代码 主要有三个java文件构成,不讲一些自动机相关知识,默认已知 TOKEN_TYPE.java 主要描述符号类型,带有RW开头的表示Reserved Word,也就是保留关键词 »
问题 最近在写一个解释器,碰到一个关于控制流程问题,有感而发 起初我按照bnf范式写了一堆生成抽象语法树的代码,在eval.java中准备从tree root出发进行遍历计算每一个表达式(解释语句)。其中有一个核心函数recursionEvalAstNode每次递归传入每个节点(的子节点)。所以函数这个参数就是树上的节点parentAstNode。那么问题来了 包含一些控制流程的语句(break、continue、return,但if不是很明显) 比如说的return statement,一旦执行到这里,就应该退回wrap-function执行的地方,并把返回节点interpret result(可能是含有子节点的expression节点)存储在栈或者寄存器里" »
本篇 本篇是这个系列的第三篇,谢谢各位的建议 环境 保持与之前的版本一致,源码版本是express.js 4.14.1 response源码 Object.create 打开response.js,从上往下看代码,代码具体戳这里 var res = module.exports = { __proto__: http.ServerResponse.prototype }; 上一篇我们讲到request对象和http. »
先安装go1.4版本 因为go1.5以后的版本不再使用c语言参与,需要使用GO1.4版本的工具链接编译。 $ apt-get install gcc libc6-dev 在$HOME目录新建目录golang目录,设置环境变量 $ GOROOT=$HOME/golang/go $ PATH=$PATH:$GOROOT/bin 在 $HOME/golang下,下载1.4源码 »