首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现JavaScript语言解释(一)

因此为了更好地理解JavaScript的语言特性,我就自己动手实现了一个叫做Simple的JavaScript语言解释,这个解释十分简单,它基于TypeScript实现了JavaScript语法的子集...项目介绍 编译 vs 解释 在开始了解Simple的实现原理之前,我们先来搞清楚两个基本的编译原理概念:编译(Compiler) vs 解释(Interpreter)。...解释 解释顾名思义就是会对我们的代码进行解释执行,它和编译不一样,它不会对源代码进行转换(最起码不会输出中间文件),而是边解释边执行源代码的逻辑。...Simple解释 由于Simple不会对编写的JavaScript代码进行中间代码转换,它只会解释并且执行代码的逻辑,所以它是一个不折不扣的JavaScript语言解释。...综上所述,一个语言解释的软件架构大体是这样的: 上面其实也就是Simple的软件架构,接着让我们来看一下词法分析的具体实现。

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

实现JavaScript语言解释(二)

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

53610

Python语言编译解释

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

1.5K20

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 这一篇讲讲在...但对于我们这样一个简单的解释来说,手工构造词法分析,并且完全不涉及到正则表达式的知识,理解起来也并不是很困难啦。

58930

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

词法分析能够对源码字符串做预处理,以减少语法分析的复杂程度。...,就得到这样一个标记流: {Sym, num}, {'=', assign}, {Num, 123.4} 词法分析的具体实现 由于词法分析对于各个语言基本都是大同小异,在其他地方也有很多用途,并且手工构造的话实际上是一个很枯燥又容易出错的活计...但对于我们这样一个简单的解释来说,手工构造词法分析,并且完全不涉及到正则表达式的知识,理解起来也并不是很困难啦。...循环的原因有以下几个: 处理错误: 如果碰到了一个我们不认识的字符,可以指出错误发生的位置,然后用while循环跳过当前错误,获取下一个token并继续编译; 跳过空白字符; 在我们实现的tryC语言中...对变量的处理需要以下几个步骤: 获取完整的变量名: 在符号表中查找变量: 如果在符号表中找到了变量,根据变量不同的类型,返回不同的token值; 如果没有找到,在符号表中间插入新的变量 关于符号表具体的内容,会独立出一篇文章来解释

1.3K00

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语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC 一个小目标...这一系列教程希望面向初学者,使用c语言手工实现一个简单的解释来玩,不需要您掌握除了c语言以外的其他前置知识,也不需要您学习过编译原理的相关知识(当然如果能对简单的数据结构有所了解的话会更好,比如树、栈等

41620

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语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC 需要了解的一些基本概念...而解释是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,它并不会把源代码预编译成机器码,而是一行一行地分析源代码并且直接执行,相对编译而言可能效率较为低下,但实现也相对简单,并且容易在不同的机器上进行移植

48410

「 giao-js 」用js写一个js解释

前言 在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释,用 JSJS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!...什么是解释 (Interpreter) ? 解释是在运行时运行的语言求值,它动态地执行程序的源代码。解释解析源代码,从源代码生成 AST(抽象语法树),遍历 AST 并逐个计算它们。...解释 (Interpreter) 工作原理 ?...rhs: 2 } 解释解析 Ast,得到 LHS 节点,接着收集到操作符(operator)节点+,+操作符表示需要进行一次加法操作,它必须有第二个节点来进行加法操作.接着他收集到 RHS 节点。...的规范文档,文档所描述的格式被用作操作 JAvaScript 源代码的通用语言

46.4K20

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行的解释虽然不算什么大工程,但相关的原理还是稍微有些复杂的,可能需要多花一些时间理解程序的运行过程; 代码可能难以调试...手把手教你构建 C 语言编译c4的一个重写版,附有详细的中文教程 Let's Build a Compiler, by Jack Crenshaw 一个英文的初学者教程,讲解如何实现一个编译

1.3K00

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

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

77700

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

项目github地址及源码: https://github.com/yunwei37/tryC 这一章开始进入解释的核心部分: 语法分析; 我们来看看两个概念,EBNF和递归下降文法,以及如何用这两个方法来计算...BNF与上下文无关文法 Backus-Naur符号(就是众所周知的BNF或Backus-Naur Form)是描述语言的形式化的数学方法,由John Backus (也许是Peter Naur)开发,最早用于描述...Algol 60编程语言的语法。...BNF语法定义的语言是一个字符串集合,可以按照下述规则书写,这些规则叫做书写规范(产生式规则),例如一个四则运算表达式可以表示为: exp -> exp op exp | ( exp ) | number...通常我们在编译构建中使用的都是上下文无关文法。

1.7K00

计算机语言&Python解释

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

79910

小兔JS教程(二)-- JavaScript 解释语言的特点

解释语言和编译型语言 在我们程序猿的编程生涯中,遇到的编程语言,比如CC++,Java,PHP,JavaScript等,都可以分为两类,即解释语言和编译型语言。...比如JavaScript,就是典型的解释语言。 1479804533187077633.jpg 而编译型语言,就相当于别人已经把英文文献翻译好了,你直接看中文就OK了。...2.只要你愿意,随时随地可以引入外部的js脚本,并且立即执行。...JavaScript是一种解释型的语言解释到哪里就执行到哪里,所以,它往往不会在一个地方等待,而是先把所有的代码执行完了再说。...,可去查看知乎上的讨论,本人在此不做多余的解释,我个人倾向于认为他是编译型语言

1.1K50

Node.js REPL(交互式解释)

Node.js REPL(Read Eval Print Loop:交互式解释) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应...Node 自带了交互式解释,可以执行以下任务: 读取 - 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。...执行 - 执行输入的数据结构 打印 - 输出结果 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。 Node 的交互式解释可以很好的调试 Javascript 代码。...简单的表达式运算 接下来让我们在 Node.js REPL 的命令行窗口中执行简单的数学运算: $ node > 1 +4 5 > 5 / 2 2.5 > 3 * 6 18 > 4 - 1 3 > 1...---- 停止 REPL 前面我们已经提到按下两次 ctrl + c 键就能退出 REPL: $ node > (^C again to quit) >

64640

Java 答疑:编译解释有何区别?Java 语言属于编译型编程语言还是解释型编程语言

文章目录 前言 一、Java 与 Java 字节码 二、什么是编译(Compiler) 三、什么是解释(Interpreter) 四、编译解释有何区别? 五、Java 语言属于哪种语言?...总结 前言 我们都知道开发语言整体分为两类,一类是编译型编程语言,一类是解释型编程语言。那么你知道二者有何区别吗?编译解释又各自有何区分?...三、什么是解释(Interpreter) 解释是直接执行用编程语言编写的指令的程序。只有在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度不如编译后的程序运行的快。...语言既不属于编译型编程语言也不属于解释型编程语言,因为它由 Java 编译编译为字节码文件,然后仍需要有 JVM 将字节码解释翻译为目标机器语言,先编译后解释。...总结 在本文中我们解释了什么是编译,什么是解释,并对二者进行了比较,从原理层面指出 Java 语言既不属于编译型编程语言也不属于解释型编译语言

66530

C语言的日常实践(十四)】constkeyword详细解释

const是C语言keyword,它定义一个变量不同意变更。使用const在一定程度上,可以提高节目的安全性和可靠性。其他。解const的作用,在看别人的代码时,对理解对方的程序有一定帮助。...从这里可以看出,const修饰的是变量,跟常量是不同的,常量是被编译放在内存中的仅仅读区域,当然也就不可以去改动它。 而”仅仅读变量“则是在内存中开辟一个地方来存放它的值。...仅仅只是这个值由编译限定不同意被改动。const就是用来限定一个变量不同意被改变的修饰符。.../*file.c——定义一些全局变量*/ const doubule PI = 3.141; /*file2.c——使用在其它文件里定义的全局变量*/ extern const double PI; 其次是将常量放在一个....c和file2.c包括constant.h会造成每个文件都有统一的标识定义声明。

35500
领券