JavaScript高级语法之解释器(Interpreter)
目录
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)相关推荐
- JavaScript|JavaScript 高级语法——详细汇总
JavaScript 高级语法 目录 JavaScript 高级语法 一.变量提升和函数提升 作用域的概念 1. 变量提升 ① 变量提升 ② 变量提升后,与外界同名变量不会相互影响 ③ 多次声明变量 ...
- 深入 JavaScript 高级语法
深入 JavaScript 高级语法 点击 28. 深拷贝.事件总线 27. 防抖和节流 26. BOM.DOM.浏览器事件 25. Cookie 24. IndexedDB 23. JSON.Sto ...
- 跟随coderwhy老师 系统学习 深入JavaScript高级语法
深入JavaScript高级语法 昨天偶然看到这个 没想到codewhy老师还有这系列的课程 果断重新快速学一遍 这里面的内容比较系统 不用我一个一个去找小视频 后续的知识点更新以codewhy及后面 ...
- 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 ...
- JavaScript高级语法之异步Promise(2:深入)
目录 1 JavaScript的异步执行 1.1 概述 1.2 回调函数 1.3 事件监听 1.4 发布/订阅 1.5 异步操作的流程控制 1.6 串行执行 1.7 并行执行 1.8 并行与串行的结合 ...
- JavaScript高级语法之一等公民——函数(高阶函数)
JavaScript中一等公民 -- 函数 在JavaScript中,函数是非常重要的,并且是一等公民.所谓的一等公民到底是什么呢? 首先,函数的使用是非常灵活的: 其次函数可以作为另外一个函数的参数 ...
- JavaScript高级语法打包 - babel插件安装配置报错!Error: Cannot find module ‘@babel/preset-preset.env‘
目录 1. 插件安装和配置 2. 运行打包 - 报错信息 3. 解决办法 1. 插件安装和配置 安装babel转换器相关的包: npm i babel-loader @babel/core @babe ...
- JavaScript高级语法-面向对象编程模式的特性及实现
@写在前面:对于初学者友好,变量声明没有采取ES6+标准,且学且珍惜
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
最新文章
- GitLab 配置邮箱
- 5个可以帮助你提高工作效率的新AI工具
- 成为Java高手的25个学习要点
- 10岁宝宝制作的三国演义题材的海报
- 关于ASP.NET 中站点地图sitemap 的使用【转xugang】
- webpack中设置jquery为全局对象
- java session丢失_跨域造成session丢失
- Memcached - In Action
- word 2010中正文页码如何从第1页开始?
- L2TP协议笔记1---L2TP概念及协议流程分析
- 三大运营商回应“提速降费”:认真落实各项要求
- lumen 下使用自定义配置文件
- 温暖的《北国之恋》_ing
- 笔记本电脑排名_商务轻薄本什么品牌好? 五款高性能轻薄商务笔记本电脑排名...
- 通​过​C​a​c​t​i​监​控​w​i​n​d​o​w​s​资​源
- SQLServer简繁互换
- 前端开发和后端开发哪个难学
- 如何用计算机学唱歌,男孩学唱歌教程 男生如何练习唱歌?
- C语言if和汇编jcc程序对比,汇编 JCC指令表与笔记
- 收购江铃重汽!沃尔沃卡车将在中国生产重型卡车
热门文章
- FN-8112MET系列RTL8188单通道WiFi模块应用选型参考
- 彻底理解面向对象,看完这一篇就够了
- 软件设计师考试笔记-(7)
- “重走长征路,共铸铁军魂“ 拉练活动总结
- GDAL+Python实现栅格影像处理之小斑块去除
- C程序设计--案例(2015年江苏大学程序设计考研试题 -- 编程题)
- Docker在Uber服务部署中的应用
- 失败了,让我们共同买单
- FineUI秘密花园(五) — 按钮控件
- BZOJ_P2563 阿狸和桃子的游戏(贪心)