最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • AST深入浅出一

    正文概述 掘金(cd1234)   2021-06-03   490

    什么是AST(抽象语法树)

    AST是一种分层的程序表示,根据编程语言的语法来呈现源代码结构,每个 AST 节点对应一个源代码项。

    上面说法的确很抽象,可以看下面的代码表示,可以看出来源码和下面树中的节点是一一对应的

    function add(a,b){
    	return a+b
    }
    add(1,2)
    
    // 转换成语法树
    {
        "type": "Program",
        "body": [
          {
            "type": "FunctionDeclaration",
            "id": {
              "type": "Identifier",
              "start": 9,
              "end": 12,
              "name": "add"
            },
            "params": [
              {
                "type": "Identifier",
                "name": "a"
              },
              {
                "type": "Identifier",
                "name": "b"
              }
            ],
            "body": {
              "type": "BlockStatement",
              "body": [
                {
                  "type": "ReturnStatement",
                  "argument": {
                    "type": "BinaryExpression",
                    "left": {
                      "type": "Identifier",
                      "name": "a"
                    },
                    "operator": "+",
                    "right": {
                      "type": "Identifier",
                      "name": "b"
                    }
                  }
                }
              ]
            }
          },
          {
            "type": "ExpressionStatement",
            "expression": {
              "type": "CallExpression",
              "callee": {
                "type": "Identifier",
                "name": "add"
              },
              "arguments": [
                {
                  "type": "Literal",
                  "value": 1,
                  "raw": "1"
                },
                {
                  "type": "Literal",
                  "value": 2,
                  "raw": "2"
                }
              ],
              "optional": false
            }
          }
        ]
      }
    
    

    这是一个 在线js转ast语法 的网站,感兴趣可以体验下。

    编译原理

    首先来看下浏览器的编译原理如下,可以看出来浏览器对js的编译和解释都需要源代码通过词法分析语法分析转换成AST

    AST深入浅出一

    词法分析Tokenize

    词法分析:是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。

    其作用是将一行行的源码拆解成一个个 token。所谓 token,指的是语法上不可能再分的、最小的单个字符或字符串。以上面代码为例子,以下就是生成的token序列:

    AST深入浅出一

    语法分析parse

    语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.

    其作用是将上一步生成的 token 数据,根据语法规则转为 AST。同时也会去验证语法,语法有错的话会抛出语法错误

    parseApi

    可以通过安装插件recast生成AST语法树

    npm i recast -S

    // c创建parse.js
    const recast = require("recast");
    const code =
      `
      function add(a, b) {
        return a + b
      }
      add(1,2)
      `
    const ast = recast.parse(code);
    const add  = ast.program.body
    console.log(add)
    // 运行 node parse.js
    

    AST深入浅出一

    AST用途

    • 打包编译:webpack、rollup、babel等

    • 语法检查:JSLint、JSHint、Prettier

    • IDE的错误提示、格式化、高亮、自动补全等

    • 代码混淆压缩:UglifyJS2

    • 多端开发框架:Mpvue、Taro等

    • ...


    起源地下载网 » AST深入浅出一

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元