编译原理之编译器的结构

中间代码生成


生成中间代码有易于目标机器语言上的生成,在本篇中将采用三地址法的中间表示形式,很像汇编语言,每个指令具有三个运算分量,每个运算分量都像一个寄存器。
t1=intofloat(60)
t2=id3*t1
t3=id2+t2
id1=t3

每个三地址赋值指令右边只能有一个运算符且具有优先级。

代码优化


这里的代码优化表现为可以找把三行的代码优化成两行以提高运行效率
t1=id3*60
id1=id2+t1

代码生成

LDF    R2,id3
MULF R2,R2,#60.0
LDF    R1,id2
ADDF R1,R1,R2
STF    id1,R1

符号表管理

符号表提供的功能是记录一个名字(变量)的存储分配、它的类型、作用域,对于过程名字(方法),还包括参数数量和类型,参数传递方法(传值还是传引用)和返回类型。
符号表数据结构为每个变量名字创建了一个记录条目,记录的字段就是名字的各个属性,这个数据结构 允许编译器迅速查找到每个名字的记录,并且能快速的找到。

将多个步骤组合成趟

多个活动可以组合成一趟,每趟读入一个输入文件,并产生一个输出文件。前端步骤中的词法分析、语法分析、语义分析,以及中间代码分析可以组合成为一趟,代码优化可以是一个可选的趟,然后一个为特定目标机生成代码的后端趟。

编译器的构造工具

语法分析器的生成器:可以根据一个程序设计语言的语法描述生成语法分析器。
扫描器的生成器:可以根据一个语言的语法单元的正则表达式描述生成词法分析器。
语法制导的翻译引擎:可以生成一组用于遍历分析树并生成中间代码的例程。
代码生成器的生成器:依据一组关于如何把中间语言的每个运算翻译成为目标机上的机器语言的规则,生成一个代码生成器。
数据流分析引擎:可以帮助惧数据流信息,即程序中的值如何 从程序中的一个部分传递到另一部分,是代码优化的一个重要部分。
编译器的构造工具集:提供了可用于构造编译器的不同阶段的例程的完整集合。

你可能感兴趣的:(编译原理)