compiler-design-note

compiler-design-note

Charles Lv7

编译原理保研笔记

代码优化的局部优化在那里做的

基本块

语法分析的定义和作用

语法分析可以将词法分析获得的词法单元转化为抽象语法树,使得编译器更方便的对程序进行分析和优化,同时还可以检查源代码是否存在语法错误并及时报错

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.
Comments