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

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

前言 在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释,用 JSJS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!...什么是解释 (Interpreter) ? 解释是在运行时运行的语言求值,它动态地执行程序的源代码。解释解析源代码,从源代码生成 AST(抽象语法树),遍历 AST 并逐个计算它们。...解释 (Interpreter) 工作原理 ?...一个完全使用 javascript 实现的,小型且快速的 javascript 解析 本次实践我们将使用 acorn.js ,它会帮我们进行词法分析,语法解析并转换为抽象语法树。...我们这节来实现 1+1 加法的解释。首先我们通过AST explorer,看看 1+1 这段代码转换后的 AST 结构。 ?

46.5K20

实现JavaScript语言解释(一)

因此为了更好地理解JavaScript的语言特性,我就自己动手实现了一个叫做Simple的JavaScript语言解释,这个解释十分简单,它基于TypeScript实现了JavaScript语法的子集...项目介绍 编译 vs 解释 在开始了解Simple的实现原理之前,我们先来搞清楚两个基本的编译原理概念:编译(Compiler) vs 解释(Interpreter)。...解释 解释顾名思义就是会对我们的代码进行解释执行,它和编译不一样,它不会对源代码进行转换(最起码不会输出中间文件),而是边解释边执行源代码的逻辑。...综上所述,一个语言解释的软件架构大体是这样的: 上面其实也就是Simple的软件架构,接着让我们来看一下词法分析的具体实现。...反之,如果状态机发现没有新的字符可以输入而自己又处于一个非终止的状态,它就会抛一个叫做Unexpected EOF的错误 以上就是使用有限状态机来实现词法分析的一个简单例子,Simple解释的词法分析实现和上面的步骤是一样的

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

    实现JavaScript语言解释(二)

    end": { "line": 1, "column": 21 } } } ] 在语法解析(Syntax Analysis)阶段,Simple解释会根据定义的语法规则来分析单词之间的组合关系...在语法解析阶段,如果Simple解释发现输入的Token字符串不能通过既定的语法规则来解析,就会抛出一个语法错误(Syntax Error),例如赋值语句没有右表达式的时候就会抛出Syntax Error...那么对于Simple解释来说,它的语法规则又是什么呢?...细心的你可能发现在上面的例子中所有语句都是以分号;结尾的,这是因为为了简化语法解析的流程,Simple解释强制要求每个表达式都要以分号结尾,这样我们才可以将重点放在掌握语言的实现原理而不是拘泥于JavaScript...下面是一个分别使用浏览原生API和使用JQuery API来实现同样任务的例子: 外部DSL 和内部DSL不同,外部DSL没有依赖的宿主环境,它是一门独立的语言,例如HTML和CSS等。

    59310

    实现一个 BrainFuck 解释

    最近用 Python 实现了一个BrainFuck 解释,简单介绍一下过程。...实现 BrainFuck 解释 我们使用测试驱动设计的方法来实现 Brainfuck 解释,首先需要约定一下 Brainfuck 解释的接口: 约定接口 def execute(code: str...具体的实现可以看源代码仓库。 可能的改进 这个 Brainfuck 解释实现已经比较完善了,不过受限于 Python,整体的执行效率不会特别高。...我们可以将这个字节码保存到文件中,然后用更高效的编程语言(C,Rust)实现字节码解释,来执行这段字节码,效率可以显著提升。...总结 这个 Brainfuck 语言的解释总体上比较简单,但还是反映了使用虚拟机的方式来实现解释的主要流程。

    61610

    实现一个Brainfuck解释

    最近用 Python 实现了一个BrainFuck 解释,简单介绍一下过程。...-- more --> 实现 BrainFuck 解释 我们使用测试驱动设计的方法来实现 Brainfuck 解释,首先需要约定一下 Brainfuck 解释的接口: 约定接口 def execute...具体的实现可以看源代码仓库。 可能的改进 这个 Brainfuck 解释实现已经比较完善了,不过受限于 Python,整体的执行效率不会特别高。...我们可以将这个字节码保存到文件中,然后用更高效的编程语言(C,Rust)实现字节码解释,来执行这段字节码,效率可以显著提升。...总结 这个 Brainfuck 语言的解释总体上比较简单,但还是反映了使用虚拟机的方式来实现解释的主要流程。

    58660

    解释模式

    一、简介 1、解释模式给定一个语言,定义它的文法的一种表示,并定义一个解释,这个解释器使用该表示来解释语言中的句子。...2、类成员 (1)AbstractExpression(抽象表达式):声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。...(2)TerminalExpression(终结符表达式):实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个interpreter()方法。...(3)NonterminalExpression(非终结符表达式):为文法中的非终结符实现解释操作。 (4)Context:包含解释之外的一些全局信息。 3、UML ?...4、所属类别:行为型 二、C++程序 1 // 解释模式.cpp : 定义控制台应用程序的入口点。

    96670

    解释模式

    解释模式 解释模式Interpreter Pattern提供了评估语言的语法或表达式的方式,它属于行为型模式,这种模式实现了一个表达式接口,该接口解释一个特定的上下文,解释模式通常被用在SQL解析...描述 在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性,如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用编译原理中的解释模式来实现了。...解释模式是给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析解释语言中的句子,也就是说,用编译语言的方式来分析应用中的实例。...优点 扩展性好,由于在解释模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现,在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。...缺点 执行效率较低,解释模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。

    72000

    解释模式

    解释模式,简单来讲就是一个简版的编译,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。...解释模式能对一些较频率执行的文法转换为一种特定的文法类型,不过解释模式也有其不足,就是如果文法较为复杂的话,就得需要将每一个文法转换成至少一个类,如果包含许多规则的文法可能难以维护和管理。...这个时候就需要其他的技术,就是我们最开始提到的语法分析程序或编译来处理。 解释模式的基本类结构图很简单,最基本的实现也很简单。...image.png 1 package day_13_interpreter; 2 3 /** 4 * 包含解释之外的一些全局信息,或者说这就是解释解释得文法 5 * @author..."); 17 } 18 19 } 1 package day_13_interpreter; 2 3 /** 4 * 终结符表达式,实现与文法中的终结符相关联的解释操作 5 *

    88360

    使用Rust实现一个Brainfuck解释

    不过你想笑就笑吧,很快就会轮到编译嘲笑你了,你会被告知自己写的解释有多么的慢。 Brainfuck 是一种简单且最小的图灵完备编程语言。...Brainfuck 可以通过解释实现,也能通过编译实现。当然本章将先实现一个解释。我会使用 Rust 来编写这个解释并省略了一部分无关紧要的代码,以使得核心逻辑清晰。...jtable.insert(i, j); } } Ok(Code { instrs, jtable }) } } brainfuck 解释实现...Brainfuck 的解释执行需要首先定义一个无限长的纸带(字节数组),当前指针 SP,Opcode 源代码以及程序计数 PC,然后通过一个主循环匹配不同的指令并解释执行。...PS W:\WorkSpace\Rust\brainfuck> 在测试中,基于中间语言的解释大概要比原始解释快 5 倍左右。

    1K30

    解释模式

    解释模式: 解释模式是类的行为模式。给定一个语言之后,解释模式可以定义出其文法的一种表示,并同时提供一个解释。客户端可以使用这个解释解释这个语言中的句子。...组成 模式所涉及到4个角色: 抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。...比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释就是终结符表达式。...适用场景: 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树,可以使用解释模式。而当存在以下情况时该模式效果最好 该文法的类层次结构变得庞大而无法管理。...效率不是一个关键问题,最高效的解释通常不是通过直接解释语法分析树实现的,而是首先将他们装换成另一种形式,例如,正则表达式通常被装换成状态机,即使在这种情况下,转换仍可用解释模式实现,该模式仍是有用的

    828100

    Ipython 解释

    进入ipython 通常我们并不使用Python自带的解释,而是使用另一个比较方便的解释——ipython解释,命令行下输入: ipython 即可进入ipython解释。...所有在python解释下可以运行的代码都可以在ipython解释下运行: print "hello, world" hello, world 可以进行简单赋值操作: a = 1 直接在解释中输入变量名...,会显示变量的值(不需要加print): a 1 b = [1, 2, 3] ipython magic命令 ipython解释提供了很多以百分号%开头的magic命令,这些命令很像linux系统下的命令行命令...中的内容写入文件: %%writefile hello_world.py print "hello world" Writing hello_world.py 使用 ls 查看当前工作文件夹的文件: %ls 驱动...查看函数帮助和函数源代码(如果是用python实现的): # 导入numpy和matplotlib两个包 %pylab # 查看其中sort函数的帮助 sort??

    1.2K10

    解释模式

    最有效的解释通常不是通过直接解释解释树来实现的,而是首先将它们转换为另一种形式来实现的。 例如,正则表达式通常转换为状态机。但即便如此,翻译也可以通过解释模式实现,因此该模式仍然适用。...实现语法中非终结符的解释操作。解释通常在表示 R1 到 Rn 的变量上递归调用自身。...调用解释(interpreter)操作 代码示例 实现一个简单函数绘图语言解释解释下面代码: rot is 0; origin is (0, 0); scale is (2,20); for T from...编译原理相关知识 解释模式常用于对简单语言的编译或分析实例中,为了掌握好它的结构与实现,必须先了解编译原理中的“文法、句子、语法树”等相关概念。...由于在解释模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。 缺点 执行效率较低。

    31130
    领券