解析器

2025/3/13 Vue3编译

# 文本模式

模式 能否解析标签 是否支持 HTML 实体
DATA
RCDATA
RAWTEXT
CDATA
  • 遇到标签 <tilte> <textarea> 会进入 RCDATA 模式
  • <style> <iframe> <noFrames>, <noscript> 等会进入 RAWTEXT 模式
  • <!CDATA[ 字符串会进入 CDATA 模式

文本解析的模式 (opens new window)

# 递归下降算法构造 ast

由于创建 token 和 构造模板 ast 具有同构性,因此两者可以同时进行。

  1. 解析标签
    • 清除多余标签
    • 清除空格
    • 解析属性
  2. 递归解析子节点
    • 解析插值表达式
    • 文本节点
    • 注释文本
  3. 解析结束标签
    • 标签是否正常关闭

在解析子节点 parseChildren 的过程中,会调用解析标签节点 parseElement 的方法,从而间接调用 parseChildren 的方法,从而产生一个新的状态机

上一级 parseChildren 函数的调用用于构造上级模板的 ast, 被递归调用的下级 parseChildren 函数用于构造下级模板的 ast,最终构造一个树形结构的 ast

parser (opens new window)

Last Updated: 2026/06/09/ 06:29:26