编译器原理
词法分析器
语法分析器
语义分析器
中间代码生成
- 符号表
- 独立机器的代码优化器
- 代码生成器
- 依赖于机器的代码优化器
- 目标机器代码
position = inital + rate * 60
name | value |
---|---|
position | ... |
inital | ... |
rate | ... |
<id,1><=><id,2><+><id,3><><60>*
表达式的语法特征
- 任何一个标识符都是表达式
- 任何一个数都是表达式
- 如果e1和e2都是表达式那么
- e1+e2
- e1*e2
- (e1)
例:position = inital + rate * 60
initial+rate60 分析树*
graph TD;
表达式-->表达式A;
表达式A-->initial;
表达式-->+;
表达式-->表达式B;
表达式B-->表达式B1;
表达式B1-->rate;
表达式B-->*;
表达式B-->表达式B2;
表达式B2-->数60;
<id,1><=><id,2><+><id,3><><60>*
-
语法分析器语法树
graph TD; =-->id,1; =-->+; +-->id,2; +-->*; *-->id,3; *-->inttofloat; inttofloat-->60;
中间代码生成器
t1 = inttofloat(60)
t2 = id3 * t1
t3 = id2 + t2
id1 = t3
- 代码优化器
t1 = id3 * 60
id1 = id2 + t1
- 代码生成器
MOVF id3,R2
MULF #60,R2
MOVF id2,R1
ADDF R2,R1
MOVF R1,id1
概述
-
解释器
- 解释器不生成目标代码,而是直接执行源程序所指定的运算
- 解释器也需要对源程序进行词法,语法,语义
符号表管理 – 记录源程序中使用的变量的名字,收集各种属性