当前位置 博文首页 > 文章内容

    AST语法树的生成

    作者: 栏目:未分类 时间:2020-10-17 18:00:51

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    AST语法树的生成

    一、前言

    • 在上一篇博客 Vue编译器初探 我们了解到,Vue 里面将模板字符串 template 编译成渲染函数 render 字符串这个过程中,有两个重要的步骤:
      • template -> AST语法树 (parse)
      • AST语法树 -> 目标平台代码 (generate)
    • 而其中,parse 的函数定义在 ./src/compiler/parser/index.js 里面
      下面,我们就来分析一下这个 parse 函数是如何生成 AST 语法树的

    二、Parse

    • 保持传统,还是整理了一份关系图出来,不过因为这个关系有那么忆点点复杂,只能把图“竖”着放上来,如果想看横图可以到这里去看:关系横图
      Image text

    三、总结

    • 关系图那么大主要是因为需要编译处理的粒度都精细到了每一个html标签的每一个属性,但是从整体去看,无非就是调用了一个 parseHTML 函数去一点一点解析 template 字符串,并且在合适的 token 调用合适的钩子函数,比如在解析开始标签的时候执行 start 钩子,start 钩子函数会初步地处理标签的 v-for、v-if、v-else 等这些指令,而所谓的处理就是在这个标签的描述对象上面添加一些特殊的属性来更细致地描述这个标签。
    • 最后,整个 template 字符串解析完毕后,得到的就是一个描述整个DOM关系的 AST 对象。这就是 AST 语法树的生成
    • 生成 AST 语法树后,AST 对象就会被 generate 成目标平台代码,不过这些都是后话了。