目录

1 词法分析器

2 句法解析器

3 字节码生成器

4 字节码解释器


JavaScript解释器的作用,是执行JavaScript源码。它通常可以包含四个组成部分。

  • 词法分析器(Lexical Analyser)
  • 句法解析器(Syntax Parser)
  • 字节码生成器(Bytecode generator)
  • 字节码解释器(Bytecode interpreter)

1 词法分析器

词法分析器的作用,是将一行行的源码拆解成一个个词义单位(token)。所谓“词义单位”,指的是语法上不可能再分的、最小的单个字符或字符组合。

首先,词法分析器会扫描(scanning)代码,提取词义单位;然后,会进行评估(evaluating),判断词义单位属于哪一类的值。

var sum = 30;// 词法分析后的结果
["var" : "keyword","sum" : "identifier","="   : "assignment","30"  : "integer",";"   : "eos" (end of statement)
]

上面代码中,源代码经过词法分析后,返回一组词义单位,以及它们各自的词类。

2 句法解析器

句法解析器的作用,是将上一步生成的数组,根据语法规则,转为抽象语法树(Abstract Syntax Tree,简称AST)。如果源码符合语法规则,这一步就会顺利完成,生成一个抽象语法树;如果源码存在语法错误,这一步就会终止,抛出一个“语法错误”。

{operation: "=",left: {keyword: "var",right: "sum"}right: "30"
}

上面代码中,抽象语法树的一个节点是赋值操作符(=),它两侧的词义单位,分别成左侧子节点和右侧子节>点。

通常,这一步是整个JavaScript代码执行过程中最慢的。

3 字节码生成器

字节码生成器的作用,是将抽象语法树转为JavaScript引擎可以执行的二进制代码。目前,还没有统一的JavaScript字节码的格式标准,每种JavaScript引擎都有自己的字节码格式。最简单的做法,就是将语义单位翻成对应的二进制命令。

4 字节码解释器

字节码解释器的作用是读取并执行字节码。

JavaScript高级语法之解释器(Interpreter)相关推荐

  1. JavaScript|JavaScript 高级语法——详细汇总

    JavaScript 高级语法 目录 JavaScript 高级语法 一.变量提升和函数提升 作用域的概念 1. 变量提升 ① 变量提升 ② 变量提升后,与外界同名变量不会相互影响 ③ 多次声明变量 ...

  2. 深入 JavaScript 高级语法

    深入 JavaScript 高级语法 点击 28. 深拷贝.事件总线 27. 防抖和节流 26. BOM.DOM.浏览器事件 25. Cookie 24. IndexedDB 23. JSON.Sto ...

  3. 跟随coderwhy老师 系统学习 深入JavaScript高级语法

    深入JavaScript高级语法 昨天偶然看到这个 没想到codewhy老师还有这系列的课程 果断重新快速学一遍 这里面的内容比较系统 不用我一个一个去找小视频 后续的知识点更新以codewhy及后面 ...

  4. JavaScript高级语法

    目录 1.Exception 1.1.异常概述 1.1.1.Error 对象属性 1.1.2.Error Name Values 1.2.try-catch异常捕捉 1.3.异常演示 1.3.1.Ev ...

  5. JavaScript高级语法之异步Promise(2:深入)

    目录 1 JavaScript的异步执行 1.1 概述 1.2 回调函数 1.3 事件监听 1.4 发布/订阅 1.5 异步操作的流程控制 1.6 串行执行 1.7 并行执行 1.8 并行与串行的结合 ...

  6. JavaScript高级语法之一等公民——函数(高阶函数)

    JavaScript中一等公民 -- 函数 在JavaScript中,函数是非常重要的,并且是一等公民.所谓的一等公民到底是什么呢? 首先,函数的使用是非常灵活的: 其次函数可以作为另外一个函数的参数 ...

  7. JavaScript高级语法打包 - babel插件安装配置报错!Error: Cannot find module ‘@babel/preset-preset.env‘

    目录 1. 插件安装和配置 2. 运行打包 - 报错信息 3. 解决办法 1. 插件安装和配置 安装babel转换器相关的包: npm i babel-loader @babel/core @babe ...

  8. JavaScript高级语法-面向对象编程模式的特性及实现

    @写在前面:对于初学者友好,变量声明没有采取ES6+标准,且学且珍惜

  9. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

最新文章

  1. GitLab 配置邮箱
  2. 5个可以帮助你提高工作效率的新AI工具
  3. 成为Java高手的25个学习要点
  4. 10岁宝宝制作的三国演义题材的海报
  5. 关于ASP.NET 中站点地图sitemap 的使用【转xugang】
  6. webpack中设置jquery为全局对象
  7. java session丢失_跨域造成session丢失
  8. Memcached - In Action
  9. word 2010中正文页码如何从第1页开始?
  10. L2TP协议笔记1---L2TP概念及协议流程分析
  11. 三大运营商回应“提速降费”:认真落实各项要求
  12. lumen 下使用自定义配置文件
  13. 温暖的《北国之恋》_ing
  14. 笔记本电脑排名_商务轻薄本什么品牌好? 五款高性能轻薄商务笔记本电脑排名...
  15. 通​过​C​a​c​t​i​监​控​w​i​n​d​o​w​s​资​源
  16. SQLServer简繁互换
  17. 前端开发和后端开发哪个难学
  18. 如何用计算机学唱歌,男孩学唱歌教程 男生如何练习唱歌?
  19. C语言if和汇编jcc程序对比,汇编 JCC指令表与笔记
  20. 收购江铃重汽!沃尔沃卡车将在中国生产重型卡车

热门文章

  1. FN-8112MET系列RTL8188单通道WiFi模块应用选型参考
  2. 彻底理解面向对象,看完这一篇就够了
  3. 软件设计师考试笔记-(7)
  4. “重走长征路,共铸铁军魂“ 拉练活动总结
  5. GDAL+Python实现栅格影像处理之小斑块去除
  6. C程序设计--案例(2015年江苏大学程序设计考研试题 -- 编程题)
  7. Docker在Uber服务部署中的应用
  8. 失败了,让我们共同买单
  9. FineUI秘密花园(五) — 按钮控件
  10. BZOJ_P2563 阿狸和桃子的游戏(贪心)