其他
彻底理解编译器工作原理
大家好,我是小风哥,这是一篇首发于2020年8月的文章,看自己三年前写的文字有种时空穿越的感觉,在这里也鼓励大家尝试记录下点什么东西,以证明这个世间我们曾经来过,话不多说,以下是正文。
编译器就是一个普通程序,没什么大不了的
编译器是一个将高级语言翻译为低级语言的程序。
while (y < z) {
int x = a + b;
y += x;
}
提取出每一个单词:词法分析
T_While while
T_LeftParen (
T_Identifier y
T_Less <
T_Identifier z
T_RightParen )
T_OpenBrace {
T_Int int
T_Identifier x
T_Assign =
T_Identifier a
T_Plus +
T_Identifier b
T_Semicolon ;
T_Identifier y
T_PlusAssign +=
T_Identifier x
T_Semicolon ;
T_CloseBrace }
这些token想表达什么意思:语法分析
语法树是不是合理的:语义分析
根据语法树生成中间代码:代码生成
Loop: x = a + b
y = x + y
_t1 = y < z
if _t1 goto Loop
中间代码优化
x = a + b
Loop: y = x + y
_t1 = y < z
if _t1 goto Loop
代码生成
add $1, $2, $3
Loop: add $4, $1, $4
slt $6, $1, $5
beq $6, loop