Clang CFE

常用的Clang前端组件和库

  • LLVM Support Library: LLVM libSupport库提供了许多底层库和数据结果,包括命令行option处理,各种容器和系统抽象层,用于文件系统访问
  • The Clang "Basic" Library: 提供了追踪和操纵source bufferssource buffers的位置,diagnosticstoken,抽象目标以及编译语言自己信息的low-level实用程序。还部分由可以用在其他非C语言比如SourceLocationSourceManager,DiagnositicsFileManager等。其中Diagnositics这个子系统是编译器和普通写代码人交流的主要组成部分,它会诊断当前代码那些不正确,按照严重程度产生warning或error,每个诊断会有唯一ID,sourceLocation会负责管理
  • The Driver Library : 和Driver相关的库
  • Precompiled Header: Clang支持预编译Header的两个实现
  • The Frontend Library: 这个库包含在Clang库之上构建的功能,比如输出diagnosistics的几种方法
  • The Lexer and Preprocessor Library: 词法分析和预处理的库,包含了Token、Annotation、Tokens、TokenLexer、Lexer等词法类,还有Parser library和AST语法树相关的比如Type、ASTContext、QualType、DeclarationName、DeclContext以及CFG类
  • The Sema Library: 解析器调用此库时,会对输入进行语义分析。对有效的程序,Sema为解析构造一个AST
  • The CodeGen Lirary: 用AST作为输入,生成LLVM IR代码

libClang

Driver

Driver是Clang面向用户的接口,用来解析Option设置,判断决定调用的工具链,最终完成整个编译过程

Driver 的流程是按照 ArgList - Actions - Jobs 来的