解析阶段是 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 元素时,解析器需要
来源: packages/svelte/src/compiler/phases/1-parse/state/element.js52-406
`