Ch1 Intro
编译流程

- 解释器 vs. 编译器 (Interpreter vs. Compiler)
- 解释器方便错误诊断 (Error Diagnosis)
- 编译器得到的代码更加高效

编译器

- Ch1 Intro
- 编译流程
- 词法分析:Lexical Analysis
- 语法分析:Syntax Analysis
- 词法分析 vs. 语法分析
- 语义分析:Semantic Analysis
- 中间代码生成:Intermediate Code Generation
- 优化:Optimization
- 目标代码生成:Target Code Generation
词法分析:Lexical Analysis
- Lexical Analysis: Scanning (词法分析:扫描)
- Lexical Analyzer: Scanner (词法分析器:扫描器)
- Recognize Words (Lexemes) -> Tokens & Symbol Table (识别单词(词素)-> 生成标记和符号表)
- Token:
- token-name: id, number, keywords, operators, etc. (标记名:标识符、数字、关键字、运算符等)
- attribute-value: a pointer to the symbol table (属性值:指向符号表的指针)
语法分析:Syntax Analysis
- Syntax Analysis: Parsing (语法分析:解析)
- Syntax Analyzer: Parser (语法分析器:解析器)
- Produce the Grammatical Structure (生成语法结构)
- The Relationships among Tokens (标记之间的关系)
- Tree-like Intermediate Representation (树状中间表示)
- Parse Tree (解析树)
- Parser generates the Parse Tree, from which produces the Syntax Tree (解析器生成解析树,从中生成语法树)
- Syntax Tree: Simplified Parse Tree (语法树:简化的解析树)
- Interior Node: Operation (内部节点:操作)
- Children: Arguments of the Operation (子节点:操作的参数)
词法分析 vs. 语法分析
- 做着相似的事情:处理字符串
- 词法分析 (Scanning):拆分字符串成 Lexemes,并抽象成 Tokens
- 语法分析 (Parsing):整理 Tokens 的逻辑关系
语义分析:Semantic Analysis
- Semantic Analysis (语义分析)
- computing additional info needed for compilation (计算编译所需的附加信息)
- which is not regarded as syntax (这些信息不被视为语法)
- checking source code semantic consistency with the language definition (检查源代码与语言定义的语义一致性)
- Intermediate Code Generation (中间代码生成)
- Intermediate Representations (IR), e.g., Syntax Tree, etc. (中间表示,例如语法树等)
- Low-level or Machine-like IR (低级或类似机器的中间表示)
- LLVM-IR (LLVM, Clang), Gimple (GCC), etc. (LLVM-IR(LLVM,Clang),Gimple(GCC)等)
- Three-address Code, with at Most Three Operands per Instruction (三地址码,每条指令最多三个操作数)
- Static Single Assignment (SSA) (静态单赋值)
- Every variable is only assigned (defined) once and defined before used. (每个变量只能被赋值(定义)一次,并且在使用前必须定义。)
优化:Optimization
- Optimization (优化)
- Improve the IR for Better Target Code (改进中间表示以生成更好的目标代码)
- Better: Faster, Smaller, Greener (更好:更快、更小、更环保)
目标代码生成:Target Code Generation
- Target Code Generation (目标代码生成)
- Instruction Selection (指令选择)
- RISC vs. CISC
- RISC: Reduced Instruction Set Computer (精简指令集计算机)
- CISC: Complex Instruction Set Computer (复杂指令集计算机)
- Intel Manual: > 6000 Pages (英特尔手册:超过 6000 页)
- Register Allocation (寄存器分配)
- Graph Coloring Problem (图着色问题)
- Evaluation Order (计算顺序)
- Arrange the Computation Order for Less Register Occupation (安排计算顺序以减少寄存器占用)
- NPC (Non-Polynomial Complete) Problem (非多项式完全问题)