论文部分内容阅读
本文研究了如何借助于LEX和YACC两个工具,完成从C语言程序代码到目标代码的翻译工作,并设计实现了一个C语言的编译器。该编译器分为前端和后端两个部分,前端用语法制导翻译的方法,在语法分析的过程中,完成源代码的语义检测工作,并且逐步地进行代码的转换。编译器前端以一棵语法树的形式作为输出,该语法树是源程序经过翻译后得到的中间表示形式。编译器后端的优化部分以这棵语法树作为输入,并且在这棵语法树的基础上完成基本块划分、控制流分析、块内优化和循环优化等工作,然后以优化过的语法树作为输出。代码生成部分根据所给语法树,以语句为单位进行目标代码生成。在代码生成部分,作者结合代码优化的基本原则和目标处理器的实际结构特点,构造了相应的寄存器分配算法,并制定了适合于目标处理器的优化策略,从而使编译器产生的代码具有较高的执行效率。
最后实现的编译器结构灵活,具有良好的可扩展性和可移植性,而且产生的代码具有较高的执行效率,达到了项目要求。本文按照编译的顺序阐述了编译器中各部分的构造过程,同时就各部分中的实现问题给出了基本思想,数据结构与实现算法。