菜单

解析阶段

相关源文件

解析阶段是 Svelte 编译器管道的第一步,负责将原始 Svelte 组件源代码(`.svelte` 文件)转换为抽象语法树(AST)。此结构化表示随后会传递给分析阶段进行进一步处理。解析器处理 Svelte 组件的所有语法元素,包括 HTML 标记、JavaScript 表达式、组件指令和特殊的 Svelte 块。

解析过程概述

解析阶段接收 Svelte 组件的原始源代码,并将其转换为结构化的 AST 表示,以便后续的编译器阶段更容易分析和转换。

来源: packages/svelte/src/compiler/index.js72-90 packages/svelte/src/compiler/phases/1-parse/index.js

解析器入口点

解析器在主 `compile` 函数中初始化,并通过 `_parse` 函数调用。源代码首先经过预处理(移除 BOM 字符),然后传递给解析器。

来源: packages/svelte/src/compiler/index.js22-51

解析器实现

解析器被实现为一个有状态的对象,它跟踪在源代码中的位置并维护一个正在解析的元素的堆栈。主要的解析逻辑涉及逐个字符地读取源代码,识别不同类型的语法元素,并创建相应的 AST 节点。

来源: packages/svelte/src/compiler/phases/1-parse/index.js packages/svelte/src/compiler/phases/1-parse/state/element.js packages/svelte/src/compiler/phases/1-parse/state/tag.js

元素解析

解析过程中很大一部分是处理 HTML 元素及其属性。每种元素类型都有特定的解析规则,尤其是对于 Svelte 的特殊元素和指令。

常规 HTML 元素

解析常规 HTML 元素时,解析器需要

  1. 识别元素名称
  2. 解析其属性
  3. 检查它是否是自闭标签
  4. 递归解析其子节点(对于非自闭标签)

来源: packages/svelte/src/compiler/phases/1-parse/state/element.js52-406

特殊元素:script 和 style

`