作为一个整体,Swift 编译器主要负责 将 Swift 源代码转换为高效的可执行机器 法典。但是,Swift 编译器前端也支持许多 其他工具,包括 IDE 与语法着色、代码的集成 完成和其他便利。本文档提供了一个 对 Swift 编译器主要组件的高级描述:
解析器是一个简单的递归下降解析器 (在 lib/Parse 中实现) 带有集成的手动编码词法分析器。解析器负责 生成没有任何语义或 键入信息,并针对语法问题发出警告或错误 与输入源。
语义分析(在lib / Sema中实现)是 负责获取解析后的 AST 并将其转换为 格式良好、完全经过类型检查的 AST 形式,发出警告 或源代码中语义问题的错误。语义 分析包括类型推断,并在成功时指示它 可以安全地从生成的、经过类型检查的 AST 生成代码。
The Clang importer(在lib/ClangImporter中实现) 导入 Clang 模块和 将他们导出的 C 或 Objective-C API 映射到相应的 Swift API。生成的导入 AST 可以通过语义分析来引用。
Swift 中间语言 (SIL) 是一种 高级、特定于 Swift 的中间语言,适用于 进一步分析和优化 Swift 代码。SIL 一代 阶段(在 lib/SILGen 中实现) 将类型检查的 AST 降低到所谓的“原始”SIL 中。的设计 SIL 在 docs/SIL.rst 中有描述。
SIL 保证 转换(在 lib/SILOptimizer/MANDATORY 中实现) 执行其他数据流诊断 影响程序的正确性(例如使用 未初始化的变量)。这些转变的最终结果 是“规范”的 SIL。
SIL 优化(在 lib/SILOptimizer/Analysis、lib/SILOptimizer/ARC、lib/SILOptimizer/LoopTransforms 和 lib/SILOptimizer/Transforms 中实现) 对 程序,包括(例如)自动引用计数 优化、去虚拟化和通用专用化。