25th Jun, AD 2024 20240703 编译原理 《编译原理》课程主要内容:词法分析:从正则表达式到确定性有穷自动机、语法分析(语法分析:自顶向下方法、语法分析:自底向上方法)、抽象语法、语义分析、活动记录、中间代码生成、基本块和轨迹(包含在 中间代码生成 之内、处理 IR 之后)、指令选择、活跃变量分析、寄存器分配、垃圾回收、面向对象语言、循环优化。部分章节有比较完整的笔记(详见链接),全部章节内容的概要在下面的 A4 cheat paper 中: Read More
5th May, AD 2024 20240510 常微分方程 一阶微分方程 可分离变量的方程 如果微分方程 $\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
4th May, AD 2024 20240623 中间代码生成 中间代码生成 中间代码/中间表示 (Intermediate Representation, IR) AST -> IR1 -> IR2 -> … -> IRk -> asm IR 是一种抽象的机器语言、旨在表达目标机器的操作而不涉及过多与指令集有关的细节。相比于直接生成目标架构的汇编语言代码,将源代码首先转为 IR 能够有效地提高编译器的模块化以及可移植性(考虑需要将高级语言转为不同目标架构的汇编语言)。 Read More
21st Apr, AD 2024 20240421 活动记录 冯诺依曼架构中的编译器需要将所有的 CODE 转换为汇编指令,并为 DATA 分配空间。活动记录是通过编译器实现的,使得程序在运行时,存储或传递:函数或过程的局部变量、返回地址、参数等信息的数据结构,一般是栈帧。 Read More
21st Apr, AD 2024 20240421 语义分析 符合语法的程序不一定有有意义或是程序员期望的语义。 狭义上的语义分析是编译器前端的最后一部分,手段是对 AST 做一些分析和变换,目的是确定程序的某些静态属性,例如变量的声明与作用域、变量与表达式的类型、函数调用是否符合定义等等。最后,语义分析将把 AST 转换为某种中间表示(IR)。 Read More
30th Mar, AD 2024 20240505 一元函数的反常积分 对于 $\displaystyle \int_{1}^{+\infty} \frac{1}{x} dx$ 和 $\displaystyle \int_{0}^{1} \frac{1}{x} dx$,如何计算这两个“定积分”的值?这两个积分的值是否存在? Read More
29th Mar, AD 2024 20240422 语法分析:自底向上方法 语法分析器从词法分析器获得 Token 序列,确认该序列是否可以由语言的文法生成,然后: 对于语法错误的程序,报告错误信息 对于语法正确的程序,生成语法分析树,例如抽象语法树(Abstract Syntax Tree, AST) 自底向上指的是,从输入的串出发,尝试将其归约到文法开始符号。以分析树(Parse Tree)的角度来看,自底向上方法从所有叶节点尝试构建出分析树。 Read More