欢迎来到天天文库
浏览记录
ID:58489296
大小:220.00 KB
页数:33页
时间:2020-05-17
《中间代码生成.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机科学与工程学院课程设计报告题目全称:常用边缘算法的实现学生学号:姓名:王嘉指导老师:职称:指导老师评语:签字:课程设计成绩:设计过程表现设计报告质量总分编译器中间代码生成的研究与实现作者:王嘉学号:指导老师:吴洪摘要:在编译器的翻译流水线中,中间代码生成是处于核心地位的关键步骤。它的实现基于语法分析器的框架,并为目标机器代码的实现提供依据。虽然在理论上没有中间代码生成器的编译器也可以工作,但这将会带来编译器的高复杂度,低稳定性和难移植性。现代编译理论不仅要求中间代码的生成,还要求基于中间代码的优化。本文研究并实现了
2、一个轻量级类C语言的中间代码生成器,并就中间代码生成的原理进行了细致的阐述。关键字:中间代码生成、语法制导翻译、翻译模式、语法树、三地址码一、目的及意义在编译器的分析综合模型中,前端将源程序翻译成一种中间表示,后端根据这个中间表示生成目标代码。目标语言的细节要尽可能限制在后端。尽管源程序可以直接翻译成目标语言,但使用与机器无关的中间形式具有以下优点:1.重置目标比较容易:不同机器上的编译器可以在已有前端的基础上附近一个适合这台新机器的后端来生成。2.可以在中间表示上应用与机器无关的代码优化器。本文介绍如何使用语法制导方法
3、,基于一种轻量级的类C语言FineC的词法分析器和语法分析器,一遍地将源程序翻译成中间形式的编程语言结构,如声明、赋值及控制流语句。为简单起见,我们假定源程序已经经过一遍扫描,生成了相应的词法记号流和符号表、词素表结构。基于FineC语法标准的语法分析器框架也已经能够正常工作。我们的任务就是补充这个框架,使其在语法分析的过程中生成相应的中间代码,并将必要的变量和函数声明存放在一个符号表链中。二、目标语言词法和语法标准:这里定义一个编程语言称作FineC(“fine”指代轻量、精妙)。它是一种适合编译器设计方案的语言。本质
4、上是C语言的一个限制了数据类型、算术操作、控制结构和处理效率的轻量子集。1.FineC语言的词法描述:[1]语言的关键字:elseifreturnwhileintvoid所有的关键字都是保留字,并且必须是小写[2]下面是专用符号:+-*/<<=>>===!==;,{}()/**/RELOP={<<=>>===!=}ADDOP={+-}MULOP={*/}[3]其他标记是NUM和ID,由正则表达式定义:ID=letter(letter
5、digit)*NUM=digitdigit*letter=a
6、…
7、z
8、A
9、…
10、Zdigi
11、t=0
12、…
13、9小写和大写字母是有区别的[4]空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开NUM、ID关键字[5]注释用通常的C语言符号/*…*/围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。不支持单行//注释。FineC语言的词法分析器输出记号流,记号是一个二元组(tokentype,lexeme)。tokentype包含了记号的类型,lexeme包含记号的词素。例如一个标识符gcd的记号是(ID,6)。6表示这个标识符在符号表的第7项里(与首元的距离是
14、6,可以把这个整数看作指向符号表的指针)。词法分析器后面的步骤分析这个标识符时,就可以根据此指针访问符号表,并取出它的词素,也就是字符串“gcd”。又例如一个整型值36的记号是(NUM,36)。这里的36不是指向符号表的指针,而是NUM类型的数值。编译器会根据tokentype决定lexeme的含义。1.FineC语言的语法描述语法分析器调用词法分析器,对源程序做一遍词法分析,返回的记号流放在缓冲区tokens中。在FineC的实践中,我们用一个vector容器来存放词法分析器返回的这些记号。语法分析器在这
15、个缓冲区(容器)之上,进行匹配、回溯等必要的操作,实现语法分析。常见的语法分析方法有三种:带回溯的递归下降法、预测分析法(不带回溯的递归下降)以及常用于语法分析器自动生成的LR文法分析。前两者属于自顶向下的分析,后者属于自底向上的分析。FineC的语法分析器基于带回溯的递归下降法实现,在分析的过程中可能产生递归和回溯。当发生回溯时,意味着出现了某个记号的匹配失败,但在其之前某些记号可能已经被成功匹配并扫描。因此回溯到上层调用时,不仅要恢复指向记号流的指针,也需要考虑是否已经生成了无效的中间代码,并对其进行撤销。语法分析器
16、的原理和实现不是本文讨论的范畴,这里只给出FineC语言的文法标准和简单的语义解释,供中间代码生成时建立翻译模式使用:(1)program-->declaration-list程序由一个声明表组成(2)declaration-list-->declarationdeclaration-list
17、declaration
此文档下载收益归作者所有