美文网首页
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

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