JavaScript中的 抽象语法树 AST
AST
抽象语法树(Abstract Syntax Tree)也称为AST语法树,指的是源代码语法所对应的树状结构。也就是说,一种编程语言的源代码,通过构建语法树的形式将源代码中的语句映射到树中的每一个节点上。
而在JavaScript中,JS引擎会把源代码转换成AST,解释器再基于AST生成字节码,提供给计算机。顺便说一句,JS引擎中还有优化编译器,它会花费更多的时间处理AST,生成优化后的机械码(比解释器interpreter生成的字节码更高效)
程序代码本身可以被映射成为一棵语法树,而通过操纵语法树,我们能够精准的获得程序代码中的每一个精确的节点。例如声明语句,赋值语句,而这是用正则表达式所不能准确体现的地方。esprima提供了一个在线解析JavaScript代码的地址,可以清楚地观察到js代码被转化为JSON格式,由一个个具体的符号组成
AST Explorer 也可以让你对 AST 节点有一个更好的感性认识:AST会把代码本身(body)和注释(comments)分开,然后代码语句也会进行区别:函数声明、变量声明、表达式语句等等。
作用
抽象语法树的作用非常的多,比如编译器、IDE、压缩优化代码等。在JavaScript中,虽然我们并不会常常与AST直接打交道,但却也会经常的涉及到它。例如使用UglifyJS来压缩代码或babel转换代码,实际这背后就是在对JavaScript的抽象语法树进行操作。
JavaScript中的 抽象语法树 AST相关推荐
- 3.02 使用bison在语法分析中构建抽象语法树AST
如果你已经储备bison的相关基础知识,阅读理解下面的代码会轻松得多.没有bison基础的同学请点击查看bison基本的语法规则及相关介绍. 在文章1.06 使用Flex和Bison手写词法分析器和语 ...
- 简单学习Java中的抽象语法树(AST)
概述 抽象语法树(AST)是一种数据结构,代表了一种编程语言的抽象语法.它通常在编译器中用来解析源代码和生成机器代码. 在Java中,AST通常由一个解析器创建,该解析器读取源代码并创建一个树状结构, ...
- 理解Babel是如何编译JS代码的及理解抽象语法树(AST)
Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是? 很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器 ...
- 什么是抽象语法树(AST)
原创: 弗拉 码农翻身 作者: 弗拉@重度前端 https://segmentfault.com/a/1190000017992387 已经获得作者独家授权发布,老刘做了改编. 张大胖一上班,领导就扔 ...
- java抽象语法树(ast),【你应该了解的】抽象语法树AST
团队:skFeTeam 本文作者:李世伟 作为前端程序员,webpack,rollup,babel,eslint这些是不是经常用到?他们是打包工具,代码编译工具,语法检查工具.他们是如何实现的呢?本 ...
- 抽象语法树AST以及babel原理
什么是AST? 借用一下百度百科的解释: 在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示.它以树 ...
- php7 ast,PHP7新特性之抽象语法树(AST)带来的变化详解
本文分析了PHP7新特性之抽象语法树(AST)带来的变化.分享给大家供大家参考,具体如下: 这里大部分内容参照 AST 的 RFC 文档而成:https://wiki.php.net/rfc/abst ...
- 高级前端基础-JavaScript抽象语法树AST
前言 Babel为当前最流行的代码JavaScript编译器了,其使用的JavaScript解析器为babel-parser,最初是从Acorn 项目fork出来的.Acorn 非常快,易于使用,并且 ...
- js最小化浏览器_「译」解析、抽象语法树(ast) +如何最小化解析时间的5个技巧...
前言 该系列课程会在本周陆续更新完毕,主要讲解的都是工作中可能会遇到的真实开发中比较重要的问题以及相应的解决方法.通过本系列的课程学习,希望能对你日常的工作带来些许变化.当然,欢迎大家关注我,我将持续 ...
最新文章
- Docker学习(五)-----Docker查看日志
- BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
- 梯度下降和EM算法,kmeans的em推导
- 信息学奥赛C++语言: 魔方
- Redis命令性能优化及事务使用过程
- DSP之通信之MMC控制器
- c#类似跑马灯抽签小程序
- 微信小程序开发视频分享
- 重温前端基础(一) HTML、CSS、H5C3
- Postgres copy命令导入导出数据
- HBase中MemStore flush的源码解析
- c语言tab什么意思_收藏 | C语言最全入门笔记
- 手机端 h5 video 的全屏事件
- 2021-06-11认识征信、了解征信,个人征信有什么影响?
- Loup Verlet计算统计力学的创始人
- 2022年全球市场砂纸总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 2-Pyridinylacetic acid,2-吡啶基乙酸,CAS号:13115-43-0
- webinspect导出报告选择项
- 二维笛卡尔坐标系下的角的概念
- ‘struct lws_context_creation_info’ has no member named ‘ws_ping_pong_interval’