美文网首页
JS编译——AST

JS编译——AST

作者: 依然还是或者其他 | 来源:发表于2021-03-08 23:06 被阅读0次

JS编译——AST

AST

抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

在JavaScript中,虽然我们并不会常常与AST直接打交道,但却也会经常的涉及到它。例如使用UglifyJS来压缩代码,bable对代码进行转换,ts类型检查,语法高亮等,实际这背后就是在对JavaScript的抽象语法树进行操作。

AST在线转换器

转换解析流程

  1. 生成AST:词法解析、语法解析
  2. 遍历和更新AST
  3. 将AST重新生成源码

下面利用esprima引擎做的解析

原程序

let code = 'const a = 1';

解析后的AST

Script {
  type: 'Program',
  body:
   [ VariableDeclaration {
       type: 'VariableDeclaration',
       declarations: [Array],
       kind: 'const' } ],
  sourceType: 'script' }

对AST做遍历、修改

const estraverse = require('estraverse');

estraverse.traverse(ast, {
    enter: function (node) {
        node.kind = "var";
    }
});

生成新的AST

Script {
  type: 'Program',
  body:
   [ VariableDeclaration {
       type: 'VariableDeclaration',
       declarations: [Array],
       kind: 'var' } ],
  sourceType: 'script' }

生成新的源码

const escodegen = require("escodegen");
const transformCode = escodegen.generate(ast)

//var a = 1;

参考

一看就懂的JS抽象语法树
AST 原理分析
AST in JS

相关文章

  • JS编译——AST

    JS编译——AST AST 抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Synt...

  • vue源码目录设计

    compiler 包含vue.js所有编译相关代码。包括把模版解析成ast树,ast语法树优化,代码生成等工具。 ...

  • JavaScript的工作原理:解析、抽象语法树(AST)+ 提

    摘要: JS的"编译原理"。 原文:JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个...

  • 2018-03-29

    js_Ast structure seems that it is a pure ast tree, but i ...

  • 使用typescript来修改js文件

    原理 使用typescript把源代码读成ast,然后修改ast结构,然后将ast重新还原成js代码,最后将js代...

  • Vue源码解析之Template转化为AST的实现方法

    什么是AST 在Vue的mount过程中,template会被编译成AST语法树,AST是指抽象语法树(abstr...

  • 类的加载

    可执行程序生成过程 预编译:展开宏,头文件,生成.i文件 编译:生成抽象语法树AST,AST 是抽象语法树,结构上...

  • 编译原理术语解释

    编译流程 词法分析(生成token流)->语法分析(生成AST)→语义分析(AST)→生成字节码(生成IR ,可跳...

  • 各种笔记

    编译器:Source code -- Lexer --> tokens -- Parser --> AST(ab...

  • JavaScript AST实现原理解密

    AST在前端编译时的出镜率非常高,项目中会经常用到。比如用babel来进行ES6的语法转换,用uglify-js进...

网友评论

      本文标题:JS编译——AST

      本文链接:https://www.haomeiwen.com/subject/bmryqltx.html