Skip to content

Latest commit

 

History

History
85 lines (52 loc) · 3.29 KB

File metadata and controls

85 lines (52 loc) · 3.29 KB
  1. 编译器:将“高级”语言转换成“低级”语言的程序,不过转换成另一种语言也行。
  2. 高级:适合程序员
  3. 低级:适合机器

语言类应用程序

编译器的构成

image.png

  • 前端(分析阶段):分析语言程序,收集必要信息
  • 后端(综合阶段):利用收集到的信息,生产目标语言程序
  • IR(Intermediate Representation):中间表示

添加优化阶段,这和系统无关

image.png

前端(分析阶段)

前后端构成 image.png

工业上前端的词法分析、语法分析、语义分析技术已经非常成熟,如华为方舟编译器的这几个部分全都没有。因此最后的中间代码优化才是最重要的。

position = initial + rate * 60

词法:标识符、数字、运算符 语法:包含算术运算 的 赋值语句 语义:position、initial、rate属于数值类型 物理定律:当前位置 = 初始位置 + 速度 * 时间

词法分析器(Lexer/Scanner)

词法分析器(Lexer/Scanner):将字符流转换成词法单元(Token)

image.png

语法分析器(Parser)

语法分析器:构建词法单元之间的语法结构,生成语法树

语法分析器y

语义分析

语义分析器:语义检查,如类型检查,“先声明后使用”等约束检查

语义分析

中间代码优化器

中间代码优化器:编译时计算、消除冗余临时变量

最简单的就是自动删除没用的变量,如这里的t1 代码优化器

代码生成器

代码生成器:生成目标代码,包括指令选择寄存器分配 代码生成器

符号表

符号表:收集&管理变量名函数名相关信息

符号表

为了方便表达作用域、嵌套结构,符号表可能嵌套

后端(综合阶段)