资讯专栏INFORMATION COLUMN

JS淬炼: Syntax Parser

wuaiqiu / 1109人阅读

摘要:语法分析利用词法分析的结果建立上下文关系语法树。一般情况下,我们不会直接和语法树打交道,但会在进行代码压缩语法高亮重编译关键字匹配和作用域判断时间接涉及到。传统的引擎直接根据语法树的的结果进行解释执行,导致效率比较为低下。

一门语言的执行,大致经历下面这些过程:词法分析 -- 语法分析 -- 语义分析 -- 中间代码生成 -- 优化代码 -- 代码生成。

在Javascript中,Syntax Parser的作用是进行词法分析语法分析

A program that reads your code and determines what it does and if its grammar is valid.

词法分析挨个字符地扫描代码,把关键token识别出来。语法分析利用词法分析的结果建立上下文关系语法树 Abstract Syntax Tree (AST)。一般情况下,我们不会直接和语法树打交道,但会在进行Uglify代码压缩、IDE语法高亮、Babel重编译、关键字匹配和作用域判断时间接涉及到。

var AST = "is Tree";

传统的Javascript引擎直接根据语法树的的结果进行解释执行,导致效率比C/C++较为低下。一些最新的Javascript引擎(如V8),会将部分Javascript代码编译成为目标代码以提高执行效率。

介绍几个Javascript的Syntax Parser

esprima

acorn

Reference

javascript-ast-tutorial

javascript-syntax-tree

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91199.html

相关文章

  • JS淬炼: Array进阶

    摘要:的这种实现方式导致了一些尴尬问题,比如删除元素元素遍历。后面的参数被忽略掉了,表示并没有要插入的元素。其实,的本质是跟踪中的,并始终保持值是。这时候,虽然不大可能,可能会在中间某个中被用户重新定义。但是在上进行这种操作是很糟糕的。 在Javascript中,array是一个类数组的object。顾名思义,它能够在一个变量上存储多个值。 数组是值的有序集合。每个值叫做一个元素,而每个元素...

    jimhs 评论0 收藏0
  • 精读《手写 SQL 编译器 - 智能提示》

    摘要:经过连续几期的介绍,手写编译器系列进入了智能提示模块,前几期从词法到文法语法,再到构造语法树,错误提示等等,都是为智能提示做准备。 1 引言 词法、语法、语义分析概念都属于编译原理的前端领域,而这次的目的是做 具备完善语法提示的 SQL 编辑器,只需用到编译原理的前端部分。 经过连续几期的介绍,《手写 SQL 编译器》系列进入了 智能提示 模块,前几期从 词法到文法、语法,再到构造语法...

    ztyzz 评论0 收藏0
  • 精读《syntax-parser 源码》

    摘要:引言是一个版语法解析器生成器,具有分词语法树解析的能力。实现函数用链表设计函数是最佳的选择,我们要模拟调用栈了。但光标所在的位置是期望输入点,这个输入点也应该参与语法树的生成,而错误提示不包含光标,所以我们要执行两次。 1. 引言 syntax-parser 是一个 JS 版语法解析器生成器,具有分词、语法树解析的能力。 通过两个例子介绍它的功能。 第一个例子是创建一个词法解析器 my...

    yuanxin 评论0 收藏0
  • JS淬炼: Primitive vs. Object

    摘要:值传递引用传递是值传递,是引用传递。但这影响会根据父类是属于还是而有微妙差别。我们设想有一个父类,和两个继承了他的子类和。这时,子类修改该不会影响到父类本身,更不会传递到其他子类上。 Javascript有两种基本数据类型,Primitive和Object。Object是properties的聚合,其property可以是Object也可以是Primitive。Primitive只有v...

    Hancock_Xu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<