首页
学习
活动
专区
工具
TVP
发布

实现JavaScript语言解释(一)

因此为了更好地理解JavaScript的语言特性,我就自己动手实现了一个叫做Simple的JavaScript语言解释,这个解释十分简单,它基于TypeScript实现了JavaScript语法的子集...编译 编译可以理解成语言的转换,它会把源文件从一种形式的代码转换成另外一种形式的代码,它只是负责转换代码,不会真正执行代码的逻辑。...解释 解释顾名思义就是会对我们的代码进行解释执行,它和编译不一样,它不会对源代码进行转换(最起码不会输出中间文件),而是边解释边执行源代码的逻辑。...Simple解释 由于Simple不会对编写的JavaScript代码进行中间代码转换,它只会解释并且执行代码的逻辑,所以它是一个不折不扣的JavaScript语言解释。...Simple的架构设计 我们编写的代码其实就是保存在计算机硬盘上面的字符串文本,而实现语言解释的本质其实就是教会计算机如何才能理解并执行这些文本代码。那么计算机如何才能理解我们写的东西呢?

1.2K30

实现JavaScript语言解释(三)

前言 上篇文章我为大家介绍了语法解析的一些基本概念,以及如何通过自定义的DSL语言实现Simple语言解释的语法树解析。...因此Simple解释执行代码的过程就是:从根节点开始执行当前节点的evaluate函数然后递归地执行子节点evalute函数的过程。...在实现Simple语言解释的时候,我参照了JavaScript作用域的概念实现了一个叫做Environment的类,我们来看看Evironment类的实现: // lib/runtime/Environment.ts...总结 在本篇文章中我给大家介绍了Simple解释是如何执行代码的,其中包括闭包和this绑定的内容,由于篇幅限制这里忽略了很多内容,例如for和while循环的break语句是如何退出的,函数的return...实现JavaScript语言解释-一 实现JavaScript语言解释-二

67610
您找到你想要的搜索结果了吗?
是的
没有找到

实现JavaScript语言解释(二)

end": { "line": 1, "column": 21 } } } ] 在语法解析(Syntax Analysis)阶段,Simple解释会根据定义的语法规则来分析单词之间的组合关系...在语法解析阶段,如果Simple解释发现输入的Token字符串不能通过既定的语法规则来解析,就会抛出一个语法错误(Syntax Error),例如赋值语句没有右表达式的时候就会抛出Syntax Error...那么对于Simple解释来说,它的语法规则又是什么呢?...细心的你可能发现在上面的例子中所有语句都是以分号;结尾的,这是因为为了简化语法解析的流程,Simple解释强制要求每个表达式都要以分号结尾,这样我们才可以将重点放在掌握语言的实现原理而不是拘泥于JavaScript...对于程序员来说最清晰的解释应该是直接看代码了,所以我们可以来看一下Simple语言语法解析的代码部分。

51010

Python语言编译解释

编译型语言 先整体编译,再执行 运行速度快,任意改动需重新编译 可脱离编译环境运行 解释语言解释,边执行 运行速度慢 部分改动无需整体重新编译 不可脱离解释环境运行 编译型与解释语言列表...二、Python解释种类 CPython 官方版本的解释。这个解释是用C语言开发的,所以叫CPython。CPython是使用最广的Python解释。...我们通常说的、下载的、讨论的、使用的都是这个解释。 Ipython 基于CPython之上的一个交互式解释,在交互方式上有所增强,执行Python代码的功能和CPython是完全一样的。...PyPy 一个追求执行速度的Python解释。采用JIT技术,对Python代码进行动态编译(注意,不是解释),可以显著提高Python代码的执行速度。...绝大部分CPython代码都可以在PyPy下运行,但还是有一些不同的,这就导致相同的Python代码在两种解释下执行可能会有不同的结果。

1.4K20

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 用c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 用c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 用c语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC 这一篇讲讲在...tryC中词法分析是怎样构建的 词法分析是什么玩意 回想一下上一篇我们说的词法分析阶段,编译做了这样一件事: 对源程序进行阅读,并将字符序列,也就是源代码中一个个符号收集到称作记号(token)的单元中

55130

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析

: 对源程序进行阅读,并将字符序列,也就是源代码中一个个符号收集到称作记号(token)的单元中 帮编译执行词法分析阶段的模块,就叫词法分析啦。...词法分析以源码字符串为输入,输出为标记流(token stream),即一连串的标记,比如对于源代码中间: num = 123.4; 这样一个赋值语句中,变量num算是一个token,“=”符号算是一个...,就得到这样一个标记流: {Sym, num}, {'=', assign}, {Num, 123.4} 词法分析的具体实现 由于词法分析对于各个语言基本都是大同小异,在其他地方也有很多用途,并且手工构造的话实际上是一个很枯燥又容易出错的活计...但对于我们这样一个简单的解释来说,手工构造词法分析,并且完全不涉及到正则表达式的知识,理解起来也并不是很困难啦。...词法分析真正干活的函数们 首先需要说明一下,源码字符串为输入,输出为标记流(token stream),这里的标记流并不是一次性将所有的源代码翻译成长长的一串标记串,而是需要一个标记的时候再转换一个标记

1.2K00

c语言爱心代码详解_C语言程序源代码

1、love图案的C语言爱心代码 C语言爱心代码如下: #include int main() { int i, j, k, n = 0, x = 0, y = 50; //爱心的头部没有规律...printf("e"); y--; } else break; } printf("\n"); } printf("\n\n\n\n\n\n\n\n\n\n\n\n"); return 0; } 已把大量C语言源码整理为一个压缩包关注微...信 公 众 号:“CC加加” 回复:“源码” 即可获取 效果展示: 2、心形图案的C语言爱心代码 代码如下: #include int main() { int i,...m++) printf("%c", c);//输出右半部分字符小爱心 printf("\n"); //每一行输出完毕换行 } for (i=1; i<=3; i++) { //下3行中间没有空格...} 效果展示: 3、复杂动态C语言爱心代码 代码如下: #include #include #include #include <tchar.h

8.9K20

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 用c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 用c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 用c语言手搓一个...写一个能执行代码解释不仅是一件很有(zhuang)趣(bi)的事情,大概也可以作为刚学习完c语言的一个练手的小项目啦 不同于大部分常见的其他只支持四则运算的所谓”手工解释“教程,我们希望在代码结构尽量清晰的...,尤其在没有生成中间代码的情况下; 参考资料 《编译原理及其实践》 c4 用四个函数和很少的代码就完成了功能相当完善的 C 语言编译, 并且能够自举;我自己写作的时候也借鉴了c4的许多实现思想

40420

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 用c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 用c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 用c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 用c语言手搓一个...编译解释的区别不同 通常我们说的 “编译” 是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码,后者往往是以二进制的形式被称为目标代码(object code)。...而解释是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,它并不会把源代码预编译成机器码,而是一行一行地分析源代码并且直接执行,相对编译而言可能效率较为低下,但实现也相对简单,并且容易在不同的机器上进行移植

46210

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析

符号表 我们先来回顾一下符号表的定义: 符号表是一种用于语言翻译(例如编译解释)中的数据结构。...在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。...int currentlevel = 0; 对于函数作用域我们可以这样处理:在函数调用时加深作用域层,并把需要传入的参数插入符号表;并在函数退出的时候,删除该作用域层的所有变量,并减少作用域层,对应代码如下...pointer.list[index].value; } match(']'); } return temp; } 在变量定义语句中对变量的处理 由于是动态类型语言...函数 tryC的函数实现完整代码:这个函数做了以下几件事: 对变量的作用域进行控制; 将函数参数中的变量直接插入作用域; 保存当前词法分析的源代码位置和token,并跳转到函数定义时的源代码位置和token

1.1K00

C语言实现http下载(附代码

本次给大家分享一个C语言实现http的下载。比如做OTA升级功能时,我们能直接拿到的往往只是升级包的链接,需要我们自己去下载,这时候就需要用到http下载。...如果状态码为302,则从头里提取出重定向地址,用新的地址重新开始下载动作 (3)如果传送方式是chunked的,则进行分段读取数据并拼接 (4)如果是404或其他状态码则打印错误信息 缺陷: 太多错误处理,让代码看起来不太舒服...增大读写buffer缓冲区 改为多线程,使用Range字段分段读取,最后再拼在一起 代码: /******************************************************...****** Copyright (C), 2016, Leon, All Rights Reserved....FileName: download.c coding: UTF-8 Description: 实现简单的http下载功能 Author: Leon Version: 1.0 Date: 2016-12

18410

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计

项目github地址及源码: https://github.com/yunwei37/tryC 需要了解的一些基本概念 编译解释的区别不同 通常我们说的 “编译” 是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码...而解释是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,它并不会把源代码预编译成机器码,而是一行一行地分析源代码并且直接执行,相对编译而言可能效率较为低下,但实现也相对简单,并且容易在不同的机器上进行移植...解释与编译仅在代码生成阶段有区别,而在前三个阶段如词法分析、语法分析、语义分析基本是一样的。...(实际上完成一个可以跑起来的解释并不难,而且还是一件很有成就感的事,不是嘛?)...tryC编译的设计: 从上面可以看出,我们的tryC解释需要这三个模块: 词法分析 语法分析 语义分析和解释执行 需要这两个数据结构(用来在阶段之间保存或传递值): token,用来在词法分析和语法分析之间传递标记

1.6K00

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言

项目github地址及源码: https://github.com/yunwei37/tryC 一个小目标 这一系列教程希望面向初学者,使用c语言手工实现一个简单的解释来玩,不需要您掌握除了c语言以外的其他前置知识...写一个能执行代码解释不仅是一件很有(zhuang)趣(bi)的事情,大概也可以作为刚学习完c语言的一个练手的小项目啦 不同于大部分常见的其他只支持四则运算的所谓”手工解释“教程,我们希望在代码结构尽量清晰的...这里的部分是过了一年之后大二学编译原理的时候,把当时的代码用相对比较规范完善的方式重写了一遍,也因此希望把它整理成一个简单的教程,让c语言的初学者也可以愉快地搓一个解释玩;或者让学过编译原理的同学,能够把理论和实践联系起来...需要了解的前置知识 c语言的指针、函数指针、结构体等 递归的思想 心理准备 写一个600行的解释虽然不算什么大工程,但相关的原理还是稍微有些复杂的,可能需要多花一些时间理解程序的运行过程; 代码可能难以调试...,尤其在没有生成中间代码的情况下; 参考资料 《编译原理及其实践》 c4 用四个函数和很少的代码就完成了功能相当完善的 C 语言编译, 并且能够自举;我自己写作的时候也借鉴了c4的许多实现思想;

1.3K00

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2

array array_name length; | // 数组定义 statement的代码实现...布尔表达式和算术表达式的代码之前已经讲过了,这里看看statement的实现,以及如何在语法分析的同时解释执行: 这里使用的方法是,对于流程控制语句,在语法分析的时候就进行条件判断,如果if判断失败或者...代码块: 在一个statement中通过花括号包含多个语句 double statement() { if (token == '{') { match('{');...statement()) return RETURNFLAG; } match('}'); } .... if语句 由于tryC解释是边进行语法分析...,边解释执行的,因此如果不需要解释执行执行某一个语句块,就调用函数 skipStatments() 跳过该语句块,不对其进行语法分析,不解释执行;(在if语句和while语句中使用): ...

76900

计算机语言&Python解释

1.3高级语言 高级语言包含c,c++,java,php,python,go,和汇编语言相比,高级语言对程序员更加友好,开发效率更高。...如CC++、Delphi 解释类 执行方式类似于日常生活的"同声翻译",程序源代码一遍由操作系统自带的解释“翻译”成机器语言,一遍执行,所以效率相对较低,而且不能生产可独立执行的文件,因此程序不能脱离解释...,执行源码文件 2.解释把源代码解释便声称机器码指令,边交给CPU执行。...不同的操作系统已经自带了解释 优点 1.跨平台性好,因为解释已经做好了对不同平台的交互处理,用户写的源代码不要考虑平台差异,一份代码,所有平台都能直接运行。...这个解释是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释

78810
领券