<bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 首頁 > 空調 >

    實現一個AST解釋器(續(xù)):簡化的AST

    實現一個AST解釋器(續(xù)):簡化的AST

    在之前的文章《JavaScript黑科技:實現一個AST解釋器》中,提到了用于執(zhí)行的、簡化的AST。

    形如:

    {"type":"File","program":{"type":"Program","body":[{"type":"ExpressionStatement","expression":{"type":"CallExpression","callee":{"type":"MemberExpression","object":{"type":"Identifier","name":"console"},"property":{"type":"Identifier","name":"log"}},"arguments":[{"type":"StringLiteral","value":"jshaman"}]}}]}}

    AST如何獲得呢?

    使用astexplorer是一種方法,但不太便捷。

    作為程序員,最理所當然的方法,自然是用程序生成。

    在NodeJS中可以用babel方便的生成JavaScript代碼的AST。如下所示:

    但此AST含有代碼行號、位置、注釋等眾多冗長信息。

    因此,還需再進一步,去除這些不需要的內容。

    去除方法,即是從AST這個JSON對像中刪除不需要節(jié)點。代碼如下:

    var parser = require("@babel/parser");

    //從JS代碼生成AST

    var js_code = "console.log("jshaman");"

    var ast = parser.parse(js_code);

    //簡化AST

    minify_ast(ast);

    function minify_ast(ast){

    for(var key in ast){

    //要刪除的節(jié)點名稱

    var delete_ast_types = ["start","end","loc","errors","comments","directives"];

    for(i=0; i< delete_ast_types.length; i++){

    if(key == delete_ast_types[i]){

    console.log("刪除AST節(jié)點:", key);

    delete ast[key]

    }

    }

    if(typeof(ast[key]) == "object"){

    console.log("進入子節(jié)點:", JSON.stringify(ast[key]));

    minify_ast(ast[key]);

    }

    }

    return ast;

    }

    ast = JSON.stringify(ast);

    console.log("簡化后的AST:", ast);

    運行結果如下:

    由圖中可見,最終生成了簡化的AST。

    責任編輯:Rex_08

    關鍵詞: parser type NodeJS
    推薦閱讀
    欧美国产在线一区,免费看成年视频网页,国产亚洲福利精品一区,亚洲一区二区约美女探花
    <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 主站蜘蛛池模板: 色婷婷.com| 亚洲人成无码www久久久| 97精品人人妻人人| 精品国产免费一区二区三区| 少妇无码av无码专区线| 免费大学生国产在线观看p| 一级毛片免费观看不卡视频| 777xxxxx欧美| 正在播放年轻大学生情侣| 国内精品18videosex性欧美| 亚洲色图欧美色| 99久久国产综合精品麻豆| 波多野结无码高清中文| 国语自产精品视频在线区| 亚洲男女性高爱潮网站| 777精品成人影院| 欧美亚洲另类热图| 国产无遮挡又黄又爽免费网站| 九九视频高清视频免费观看| 69视频免费观看l| 欧美午夜精品久久久久免费视 | 浪潮AV色综合久久天堂| 国产黄大片在线观看| 亚洲国产精品xo在线观看| 久久黄色精品视频| 欧美激情在线播放一区二区三区| 国产-第1页-浮力影院| 两个小姨子完整版| 欧美毛多水多肥妇| 国产乱子伦精品免费女| avidolzhd| 无码a级毛片日韩精品| 国产伦理电影网| 中文在线免费观看| 色一情一区二区三区四区| 日本动漫黄观看免费网站| 囯产精品一品二区三区| juy051佐佐木明希在线观看| 欧美日韩亚洲一区二区三区| 国产砖码砖专区| 亚洲人成中文字幕在线观看 |