compiler-design-note
编译原理保研笔记
代码优化的局部优化在那里做的
基本块
语法分析的定义和作用
语法分析可以将词法分析获得的词法单元转化为抽象语法树,使得编译器更方便的对程序进行分析和优化,同时还可以检查源代码是否存在语法错误并及时报错
c语言中函数在不同作用域可以定义同名变量,如何实现
在编译过程中,编译程序用来记录源程序中各种名字特性信息的表格叫符号表
编译器有符号表,每个作用域有对应的一个符号表
编译中寄存器分配有哪些方法
最常用的是图着色算法,图着色算法首先需要进行活跃变量分析,然后用图着色算法使得相邻的活跃变量具有不同的颜色,从而之后分配不同的寄存器
程序编译的流程
词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
- 词法分析: 将源代码转化为词法单元(Token),为后续的语法分析提供基础符号序列,并去除如注释等无用信息。
- 语法分析: 将词法单元转化为抽象语法树,使得编译器更方便的对程序进行分析和优化,同时还可以检查源代码是否存在语法错误并及时报错
- 语义分析: 检查语法树中的语义一致性,如变量的类型匹配、作用域等,确保程序逻辑正确。
- 中间代码生成: 将语法树转换为中间代码,这是一种与具体机器无关的表示形式,最常用的是LLVM-IR,为后续优化和目标代码生成做准备。
- 代码优化: 对中间代码进行性能优化,如Mem2Reg,函数内联,死代码删除等,以提高程序执行效率。
- 目标代码生成: 将优化后的中间代码转换为机器码或汇编代码,为目标平台生成可执行的程序。
编译执行和解释执行的优劣
编译执行的效率高,占用资源少,适合复杂程序,但兼容性较差,如windows的编译程序不能在unix运行
解释执行不依赖平台,开发速度快,出现bug概率相对较小,但解析需要时间,执行效率低
什么是文法
文法是对语言结构的定义和描述
句柄
最左简单短语
LL分析法和LR分析法
LL分析法是自上而下的分析法,LR分析法是自下而上规约的分析法
- Title: compiler-design-note
- Author: Charles
- Created at : 2024-09-29 08:04:43
- Updated at : 2024-09-29 08:08:21
- Link: https://charles2530.github.io/2024/09/29/compiler-design-note/
- License: This work is licensed under CC BY-NC-SA 4.0.
recommend_articles
recommend_articles
Comments