编译原理

编译原理课程主要内容词法分析:从正则表达式到确定性有穷自动机语法分析语法分析:自顶向下方法语法分析:自底向上方法抽象语法语义分析活动记录中间代码生成基本块和轨迹包含在 中间代码生成 之内处理 IR 之后指令选择活跃变量分析寄存器分配垃圾回收面向对象语言循环优化部分章节有比较完整的笔记详见链接全部章节内容的概要在下面的 A4 cheat paper 中

Read More

常微分方程

一阶微分方程

可分离变量的方程

如果微分方程 $\displaystyle \frac{dy}{dx} = F(x, y)$ 可以化为 $\displaystyle \frac{dy}{dx} = f(x)g(y)$ 的形式那么这个微分方程是可分离变量的方程

只需要两边积分就能够得到该微分方程的通解

$$\boxed{\int \frac{1}{g(y)} dy = \int f(x) dx + C} $$

Read More

中间代码生成

中间代码生成

中间代码/中间表示 (Intermediate Representation, IR)

AST -> IR1 -> IR2 -> … -> IRk -> asm

IR 是一种抽象的机器语言旨在表达目标机器的操作而不涉及过多与指令集有关的细节相比于直接生成目标架构的汇编语言代码将源代码首先转为 IR 能够有效地提高编译器的模块化以及可移植性考虑需要将高级语言转为不同目标架构的汇编语言

Read More

活动记录

冯诺依曼架构中的编译器需要将所有的 CODE 转换为汇编指令并为 DATA 分配空间活动记录是通过编译器实现的使得程序在运行时存储或传递函数或过程的局部变量返回地址参数等信息的数据结构一般是栈帧

Read More

语义分析

符合语法的程序不一定有有意义或是程序员期望的语义

狭义上的语义分析是编译器前端的最后一部分手段是对 AST 做一些分析和变换目的是确定程序的某些静态属性例如变量的声明与作用域变量与表达式的类型函数调用是否符合定义等等最后语义分析将把 AST 转换为某种中间表示IR

Read More

语法分析:自底向上方法

语法分析器从词法分析器获得 Token 序列确认该序列是否可以由语言的文法生成然后

  • 对于语法错误的程序报告错误信息
  • 对于语法正确的程序生成语法分析树例如抽象语法树Abstract Syntax Tree, AST

自底向上指的是从输入的串出发尝试将其归约到文法开始符号以分析树Parse Tree的角度来看自底向上方法从所有叶节点尝试构建出分析树

Read More