<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>
  • 首頁(yè) > 空調(diào) >

    實(shí)現(xiàn)一個(gè)AST解釋器(續(xù)):簡(jiǎn)化的AST

    實(shí)現(xiàn)一個(gè)AST解釋器(續(xù)):簡(jiǎn)化的AST

    在之前的文章《JavaScript黑科技:實(shí)現(xiàn)一個(gè)AST解釋器》中,提到了用于執(zhí)行的、簡(jiǎn)化的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是一種方法,但不太便捷。

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

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

    但此AST含有代碼行號(hào)、位置、注釋等眾多冗長(zhǎng)信息。

    因此,還需再進(jìn)一步,去除這些不需要的內(nèi)容。

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

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

    //從JS代碼生成AST

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

    var ast = parser.parse(js_code);

    //簡(jiǎn)化AST

    minify_ast(ast);

    function minify_ast(ast){

    for(var key in ast){

    //要?jiǎng)h除的節(jié)點(diǎn)名稱

    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é)點(diǎn):", key);

    delete ast[key]

    }

    }

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

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

    minify_ast(ast[key]);

    }

    }

    return ast;

    }

    ast = JSON.stringify(ast);

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

    運(yùn)行結(jié)果如下:

    由圖中可見(jiàn),最終生成了簡(jiǎn)化的AST。

    責(zé)任編輯:Rex_08

    關(guān)鍵詞: 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>
  • 主站蜘蛛池模板: 免费黄色网址网站| 最近最新的免费中文字幕| 综合激情网五月| 欧美成人免费tv在线播放| 成年女人18级毛片毛片免费| 日本边添边摸边做边爱喷水| 够够了太深了h1v3| 国产精品日本一区二区不卡视频| 又粗又大又猛又爽免费视频| 亚洲一区日韩一区欧美一区a| 一个人hd高清在线观看| 97视频免费在线| 欧美黑人粗暴多交高潮水最多| 扒开双腿猛进入女人的视频| 国产欧美久久一区二区三区| 亲密爱人免费观看完整版| 久久99精品久久久久久动态图| 18禁男女无遮挡啪啪网站| 精品国产成人亚洲午夜福利| 日韩免费一级片| 国产精品欧美成人| 亚洲人成免费电影| 99re66热这里都是精品| 粗大的内捧猛烈进出小视频| 日本免费的一级v一片| 国产激情在线视频| 亚洲欧洲日产韩国在线| yellow字幕网在线zmzz91| 里番库全彩本子彩色h可知子 | 国产精品亚洲а∨无码播放不卡| 偷自拍亚洲视频在线观看99| 中文成人无字幕乱码精品区| 黄页网址在线免费观看| 欧美一级视频在线观看欧美| 国产麻豆一精品一av一免费| 免费国产在线观看不卡| 一级黄色片在线观看| 美美女高清毛片视频免费观看| 日本精品少妇一区二区三区| 啪啪调教所29下拉式免费阅读| 中文综合在线观|