代码解释执行
tyler_download
这个作者很懒,什么都没留下…
展开
-
自制monkey语言编译器:符号系统与代码执行
前几节,我们介绍了如何使用语法解析算法对代码进行解析。语法解析的目的是为了明白代码语句的意图,例如对于语句: c = a + b; 语法解析后,编译器就明白代码是想把变量a和b的值相加,再把结果赋值给变量c.然而要想实现这样的结果,编译器还得需要不少辅助信息,例如变量a和b对应的数值是多少,这些辅助信息我们会存储在一种称之为符号表的数据结构中。 在前几节语法解析时,代码实际上建造了一种树形结构,...原创 2018-02-16 18:07:53 · 491 阅读 · 0 评论 -
自制Monkey语言编译器:解释执行return语句和错误处理控制
在高级编程语言中,大多含有一个指令叫return,也就是程序的执行指令流遇到该语句后不再往下执行,而是返回上一层,如果return后面附带数据的话,程序会把数据夹带到调用栈上一层的代码执行路径。本节我们就给Monkey语言编译器增加解释执行return语句的功能,完成本节代码后,编译器能解释执行如下代码: 代码中存在两个if 间套,内层if执行return语句附带返回整数10,外层if 最后...原创 2018-04-03 17:57:39 · 475 阅读 · 0 评论 -
自制Monkey语言编译器:解释执行if..else判断语句
任何编程语言都少不了条件判断语句,Monkey语言也一样,有自己的If…else条件判断指令,本节我们看看如何解释执行该条件判断语句。根据我们原有的解释执行机制,我们只要在原框架的基础上添加若干代码就可以实现本节功能。当本节代码完成后,执行结果如下: 如图中的if else 语句被编译器解释执行后,在控制台的输出如下: 根据输出可知,编译器在执行了if里面的条件判断后,执行了if模块里...原创 2018-03-29 16:56:13 · 721 阅读 · 0 评论 -
自制Monkey语言编译器:实现函数闭包功能和为语言增加复杂数据结构
Monkey语言有点类似于JS,它的函数可以当做参数进行传递,而且语法支持函数闭包功能,例如下面代码: let newAdder = fn(x) { return fn(y) { return x + y;};}; let addTwo = newAdder(3); addTwo(2); 在上面代码中,我们把newAdder定义为一个函数变量,该函数里面又返回一个函数,在第二次定义变量ad...原创 2018-05-28 15:53:40 · 323 阅读 · 0 评论 -
自制Monkey编程语言编译器:增加数组操作API和Mapsh数据类型
前一节,我们为Monkey语言以及其编译器增加了内置API len,以及数组数据类型,内置的len函数调用能作用到数组和字符串上,分别返回数组的元素个数和字符串的字符长度。本节我们继续增加三个能作用到数组上的内置API,这样Monkey语言能更方便的支持数组操作。 我们在这里要增加的第一个API叫first。他返回数组首个元素,也就是它的作用与myArray[0]等价,但用first获得首个元素...原创 2018-07-13 11:55:31 · 383 阅读 · 0 评论