![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
30天自制红孩儿解释器
文章平均质量分 62
英语名称为redboy
王伟1982
我是数据分析与处理行业的数据采矿工,软件业的代码搬运工,通信业的协议打包工,互联网业的安全检查工
展开
-
30天自制红孩儿解释器 第23天 语句出错提示(一) 错误原因列表编制 第四部分 异常处理--报出程序错误
30天自制红孩儿解释器 第23天 语句出错提示(一) 错误原因列表编制 第四部分 异常处理--报出程序错误程序有语法错误是很正常的现象。无论是编译器还是解释器都必须能够精确地提示出出错的原因。出错的行号与列号这样的具体位置,以便于程序员的修改。为了便于解释器的自身的开发,必须把异常处理的报错,单独列为一个模块。第23天 语句出错提示(一) 错误原因列表编制按照分类有编译时错误,执行时错误。在之前的若干天的编程中,已经有一些零散的错误提示。现在总结整理一下。例如如下的报错[e.原创 2021-09-30 22:42:52 · 91 阅读 · 0 评论 -
30天自制红孩儿解释器 第22天 解析函数(七)内部系统函数处理
30天自制红孩儿解释器 第22天 解析函数(七)内部系统函数处理内部函数是一个可以直接被语言调用的程序包不需要声明包含哪些文件,目前默认包含所有的系统函数第22天第一版本原来的程序是如下内容function test() {a=1;b=2;c=3;return a+b;}function square(a) {return a*a;}function cube(a) {return a*a*a;}1+tect()+square(3)+cube(3);现在假设 square(a)和c原创 2021-09-29 21:42:27 · 117 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第21天 解析函数(六)嵌套函数处理
自著——30天自制红孩儿解释器 第21天 解析函数(六)嵌套函数处理符号表 就是 存储变量以及函数名之类的符号的一个数据结构。下面开始设计这个数据结构。考虑到变量有类型,名称,值,所属的作用域。还有变量的标识符。设计了如下的 变量与函数名的存储的数据结构。针对变量类型:variable :{id,type,text,value,ref: [{lineno,position}] , level,parentid}针对函数类型:function_name{id,type,tex...原创 2021-09-28 21:22:21 · 135 阅读 · 0 评论 -
30天自制红孩儿解释器 第20天 解析函数(五)函数体语句划分与解析
30天自制红孩儿解释器 第20天 解析函数(五)函数体语句划分与解析新增加一个返回语句:<return statement> :== return <simple expression> ;第20天第一版本程序需求:目前的程序语句都在一行里,本版本程序支持 程序写在多行中。 执行如下的程序:function test() {a=1;b=2;c=3;if(c==3){a=3;while (b<10) {b=b+1;c=c+1;...原创 2021-09-27 22:21:58 · 127 阅读 · 0 评论 -
30天自制红孩儿解释器 第19天 解析函数(四)函数的定义与调用的匹配检验
30天自制红孩儿解释器 第19天 解析函数(四)函数的定义与调用的匹配检验计算形式参数与实际参数的个数,必须相等,否则报错。实现:修改 symbol_table_operation.js 的symbol_table_insertvarsymbol_table_insertformalparameterexecute_javascript_lib.js 中的execute_function_parameter_list<HTML><HEAD><TITL.原创 2021-09-26 22:35:59 · 120 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第18天 解析函数(三)解析函数调用语句的名称和实际参数列表
自著——30天自制红孩儿解释器 第18天 解析函数(三)解析函数调用语句的名称和实际参数列表<call function statement> :== <function_name> (<parameter_list>)<parameter_list>:== null | <simple_expression> , <parameter_list>第18天第一版本的程序需求如下:function testadd(a,b原创 2021-09-25 22:40:13 · 137 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第17天 解析函数(二)解析函数名和形式参数列表
自著——30天自制红孩儿解释器 第17天 解析函数(二)解析函数名和形式参数列表函数定义的BNF定义如下 :<call function definition>:==function <function_name> ( <argument_list> ){<statement_list>}<argument_list> :== null | <variable_name> , <argument_list>第..原创 2021-09-24 21:36:06 · 128 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第三部分 函数 第16天 解析函数(一)准备工作,数据结构定义
自著——30天自制红孩儿解释器 第三部分 函数 第16天 解析函数(一)准备工作,数据结构定义在计算机的编程语言中,函数是一种很重要的模块化开发的特性。几乎所有的语言都提供对函数的支持。本程序解释的程序中也有函数。函数在程序中,分成以下的几个部分,函数的声明,函数的定义,(也可以说成是函数的具体的实现内容)还有函数的调用语句。 其中 在像C语言之类的静态类型的语言中有函数的声明部分。在动态的语言中没有函数的声明部分。例如 javascript.第16天 解析函数(一)准备工作,数...原创 2021-09-23 21:52:33 · 129 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第15天 执行IF和WHILE 语句(2)嵌套情况
自著——30天自制红孩儿解释器 第15天 执行IF和WHILE 语句(2)嵌套情况在对条件控制语句与循环控制语句进行解析或者是执行时,不得不考虑的一个问题是,变量的作用域,是局限于某一层控制结构内,还是在整个函数的内部,或者是从第一次使用的位置直到该函数结束的位置。本程序的决定是 变量不需要声明,变量的作用域是从第一次使用的位置开始,直到该函数结束的位置,是该变量的作用域。在这种情况下,符号表目前不用修改,现在的重点解决的问题是,确定子条件语句,解析后的返回的结束点的位置信息。第15原创 2021-09-22 21:14:51 · 134 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第14天 执行IF和WHILE 语句(1)简单情况
自著——30天自制红孩儿解释器 第14天 执行IF和WHILE 语句(1)简单情况在第13天对IF进行了解析,今天开始对IF条件语句执行,首先对BNF进行修改。<if statement> :== IF <if statement body>| IF <if statement bo`y> ELSE <else body>| IF <if statement body> [else if <if statement ...原创 2021-09-21 21:24:40 · 166 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第13天 条件语句简介
自著——30天自制红孩儿解释器 第13天 条件语句简介条件控制语句的表现形式有许多种。下面介绍一下。三目操作符的条件表达式 逻辑关系表达式 ? 值 :值T-SQL 语言中的CASE 表达式 case 变量名 when 值 then 结果值 when 值2 then 结果值2 else 结果值3 endc 语言中的switch 语句 switch (变量名) case 值 : 结果值 ; case 值2 : 结果值2 ; default : ;最常用的,几乎各种高级计算机...原创 2021-09-20 21:47:32 · 98 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第12天 解释执行关系表达式
自著——30天自制红孩儿解释器 第12天 解释执行关系表达式执行 a=10;b=a>4;b被赋值为1.第12天第一版本的程序需求:执行赋值语句 a=10;b=a>4;实现:仿照 parse_relation_exp 创建execute_relation_exp函数,增加一个 符号表的形式参数,在返回值的对象中,新加一个符号表的属性。同样操作的还有 execute_logic_exp<HTML><HEAD><TITLE> 3...原创 2021-09-19 22:30:20 · 120 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第11天 程序重构整理
自著——30天自制红孩儿解释器 第11天 程序重构整理在第9天和第10天时,新增加了一些执行的函数,这些函数与解析时使用的函数有较大的相似性,放在一起有一些混乱,现在把执行的函数,统一地放入执行函数库。方便管理与维护。同时新增加一个符号表的操作函数的单独的文件。增加 parse_assign_compound_statement函数第11天第一版本程序修改一下之前的遗留的错误。symbol_table_operation.js文件的代码如下:function sysmbol原创 2021-09-18 22:04:17 · 155 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第10天 变量替代
自著——30天自制红孩儿解释器 第10天 变量替代在第9天的基础上,继续执行赋值语句,今天需要执行的是, a=10;b=a+1;这样的语句。需要先能够做到 变换成 a=10;b=10+1; 再归结成已解决的问题。这就是变量名替代成它的值的任务。BNF 修改如下:<factor> :== <number> | ( <simple_exp> )| <variable_name>第10天第一版本的程序需求:执行赋值语句 a=10;b=a...原创 2021-09-17 23:16:56 · 125 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第9天 解析简单的赋值语句
自著——30天自制红孩儿解释器 第9天 解析简单的赋值语句在第8天的基础上,到了对赋值语句的解析与执行的时候了。下面举一个赋值语句的简单的例子。 做法是一贯的。从最简单的出发,再逐渐地增加复杂度。a=3; 是一个例子,最主要的特征是有一个等号,左边有一个变量名,右边是一个数值 ,这个语句的含义很简单,把3这个数值赋给a 这个变量。分号是语句的结束符。上面是对赋值语句的直观的印象与含义解释。下面给出一个 赋值语句的比较严格的BNF定义如下:<assign statment>.原创 2021-09-16 22:07:14 · 143 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第8天记录变量名
自著——30天自制红孩儿解释器 第8天记录变量名在第7天的编程中,涉及到了对变量名的记录,也就是把变量名存入到符号表的操作。今天来完善这个操作。 变量名的长度应该是有限制的。本程序对变量名的长度限制是最长64个字符。超过该限制的字符,将报出 变量名超长的编译时错误。在WEB界面上新加入一个报错的显示区。<HTML><HEAD><TITLE> 30天自制解释器 8.1 </TITLE><META NAME="Generator"原创 2021-09-15 22:29:24 · 139 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第二部分 变量 第7天 符号表
自著——30天自制红孩儿解释器 第二部分 变量 第7天 符号表第7.1节 引言在第一部分的内容中,只关注了常量的计算。本部分中,将引入变量。 为了很好的存储与引用变量,设计了符号表。什么是符号表呢? 符号表 就是 存储变量以及函数名之类的符号的一个数据结构。下面开始设计这个数据结构。考虑到变量有类型,名称,值,所属的作用域。还有变量的标识符。设计了如下的 变量与函数名的存储的数据结构。针对变量类型:variable :{id,type,text,value,ref: [{lin..原创 2021-09-14 22:08:38 · 127 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第6天 支持更多的操作符
自著——30天自制红孩儿解释器 第6天 支持更多的操作符在第5天时,已经实现了带括号的四则混合运算的式子的计算。为了在以后能够实现 对条件语句的解释执行,现在需要加上关系操作符与逻辑操作符。优先级是 运算操作符 优先于 关系操作符,关系操作符优先于逻辑操作符。关系操作符的解释执行的结果只有真与假两种值。分别用1和0 来表示。1表示真。表达式的BNF定义在第5天的基础上,增加以下的内容。<relation_exp> :== <simple_exp> >...原创 2021-09-13 22:54:58 · 127 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第5 天 为四则混合运算加上括号
自著——30天自制红孩儿解释器 第5 天 为四则混合运算加上括号在第4天的4.3版本的程序中,没有对括号的支持,今天提供对括号改变运算的优先级的功能。四则混合运算的表达式的BNF定义在第4天的基础上,作如下的修改。<factor> :== <number> | ( <simple_exp> )第五天的第一版程序需求:计算 2*(2+3)*3 的式子。实现:修改parse_factor 函数,处理有括号的情况。当发现有左括号时,立即向右寻找...原创 2021-09-12 22:36:27 · 148 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第四天 挑战四则混合运算
自著——30天自制红孩儿解释器 第四天 挑战四则混合运算在第三天的3.1程序中,如果输入1+34+2/20 输出是1.85 这个结果明显是错误的。原因在于程序没有正确地处理因优先级而引起的运算顺序的变化。即需要先算乘除法,然后算加减法。在优先级相同时,才按照从左到右的顺序进行运算。今天就来解决这个问题。对于四则混合运算的表达式的BNF定义如下:<simple_exp> :== <term> | <term> + <term> | &l原创 2021-09-11 22:02:56 · 175 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第三天 实现 A+B-C+D
自著——30天自制红孩儿解释器 第三天 实现 A+-C+D算术表达式,不仅有 形如 A+B的最简单的形式,还有更复杂一点的形式例如 A+B-C+D+E-F。第3.1版本的程序需求 只有一个优先级的表达式的计算。 计算的顺序是从左到右。实现 开始时取 前两个操作数和一个操作符。计算的结果作为第一个操作数。以后每次从数组中取一个操作符,再取一个操作数,作为第二个操作数。进行计算。直到到达计算式的结尾处。以一个操作符和两个操作数进行计算的过程,独立成为一个函数。html页面代码如下:原创 2021-09-10 22:37:58 · 127 阅读 · 0 评论 -
自著——30天自制红孩儿解释器 第2天 A+B-C+D运算的准备 :得到词语的数组
自著——30天自制计算机语言解释器 第2天 A+B-C+D运算的准备 :得到词语的数组根据第一天的开发,发现,程序解析时处理的最基础的单元是词语(TOKEN),所以需要在做其它事情之前,先把整个表达式拆分成多个词语,以方便之后的处理。例如 1+2+3+4 处理成如下的数组1 5 1 1 0 ----------2 8 + 1 1 ----------3 5 2 1 2 ----------4 8 + 1 3 ----------5 5 3 1 4 ----------6 8 + 1原创 2021-09-09 22:26:55 · 125 阅读 · 0 评论 -
自著——30天自制计算机语言解释器 第一天 环境准备 小试牛刀
自著——30天自制计算机语言解释器 第一部分 常量第一天 环境准备 小试牛刀简要介绍万事开头难,所以,从最简单的事情上入手,增强信心后,再逐渐增加难度。程序开发要经历如下的三关,解释器的开发也是如此。第一关是通过编译,让程序可以运行起来。第二关是让程序调试好,使程序能够运行得到正确的结果。第三关是优化程序的性能,让程序运行得更快,更稳定。开发解释器的需求,来自于在T-SQL的开发中,原有的EVAL函数对其中的语句有比较严格的限制。 所以 需要新的函数库,以增强其功能。所以准备.原创 2021-09-08 22:37:18 · 259 阅读 · 0 评论 -
自著——30天自制计算机语言解释器 序言
自著——30天自制计算机语言解释器 序言解释器开发的体会本书分为四个部分,层层递进,就像上楼的四个台阶一样。也像程咬金将军 练武功的三招半一样。 前三关是必须攻克的关口。第四关只要过到一半,开发就可以完工了。程序就达到60分的合格线了。只过三关,得到50分。还不能合格。完全地过了第四关,就得到了70分。如果能够做到如下的程度,才有实际的意义。努力吧!!得到了90分,才估计在语言的开发者中排名前50%的位置。得到了95分,估计在开发者中的排名升到前25%的位置,得到了97分,估计在开发者原创 2021-09-07 22:13:01 · 287 阅读 · 0 评论 -
自著——30天自制计算机语言解释器 目录
自著——30天自制计算机语言解释器 目录第一部分 常量第1 天 环境准备 从最简单的开始1+1第2 天 A+B-C+D运算的准备 :得到词语的数组第3 天 实现A+B-C+D第4 天 挑战四则混合运算第5 天 为四则混合运算加上括号第6天 支持更多的操作符第二部分 变量第7天 符号表第8天记录变量名第9天 解析简单的赋值语句第10天 变量替代第11天 程序重构整理第12天 解释执行关系表达式第13天 条件语句简介与解析第14天 执行IF和WHILE 语句(1...原创 2021-09-06 23:00:24 · 201 阅读 · 0 评论