JavaScript中AST详解
什么是AST
在了解AST之前⾸先需要知道javascript的⼯作原理,javascript是⼀种解释型语⾔,通过词法分析语法分析之后构建出抽象语法树。如果javascript解析器⽆法构建出语法树时就会报出语法错误,从⽽结束此次编译过程(平时遇到语法错误提⽰时,就是此阶段报的错误)。整个javascript引擎⼯作流程可以,看以下的流程图。
javascript⼯作流程图.jpeg
从图⽚中就可以看到,第⼆个阶段就是形成AST(abstract syntax code)的过程,存在传统语⾔变成可执⾏代码之前都会经历以下三个阶段: 1.词法分析词法分析是将字符流(char stream)转换为记号流(token stream),就像英⽂句⼦⼀个个单词独⽴翻译,举例:
代码:var result = testNum1 - testNum2;
词法分析后 :
NAME "result"
EQUALS
NAME "testNum1"
MINUS
NAME "testNum2"
SEMICOLON
这个过程会将由字符组成的字符串分解成有意义的代码块,这些代码块统称为token.举个例⼦: let a = 1, 这段程序通常会被分解成为下⾯这些词法单元: let 、a、=、1、 ;空格是否被当成此法单元,取决于空格在这门语⾔中的意义。
2.语法分析,将token stream转换成⼀个由元素嵌套所组成的代表了程序语法结
vuejs流程图插件构的树,这个树就是抽象语法树(AST)
3.将抽象语法树(AST) 转化成可执⾏代码
AST的结构
这⾥⽤到⼀个很好⽤的在线JavaScript解析器Esprima
例如
// Life, Universe, and Everythingfu
function add(a,b){
return a+b;
}
转化成AST的结构如下
recast的官⽅⼿册
编程语⾔的实现,从AST(抽象语法树)开始Parser API
babel插件⼿册
理解JavaScript的编译过程与运⾏机制jsflowchart
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论