基于LLVM的编译器的设计与实现毕业论文.doc

基于LLVM的编译器的设计与实现毕业论文.doc

ID:207374

大小:1.39 MB

页数:97页

时间:2017-07-03

基于LLVM的编译器的设计与实现毕业论文.doc_第1页
基于LLVM的编译器的设计与实现毕业论文.doc_第2页
基于LLVM的编译器的设计与实现毕业论文.doc_第3页
基于LLVM的编译器的设计与实现毕业论文.doc_第4页
基于LLVM的编译器的设计与实现毕业论文.doc_第5页
资源描述:

《基于LLVM的编译器的设计与实现毕业论文.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、太原科技大学学士学位论文基于LLVM的编译器的设计与实现毕业论文目录第一章绪论11.1什么是编译器11.2总会有编译器的开发需求11.3为什么做这个项目2第二章设计什么样的编译器和语言42.1做一个什么样的编译器42.1.1利用LLVM实现一门新语言42.1.2利用flex和bison完成词法分析和语法分析52.2设计一个什么样的语言62.2.1计算机可以做什么62.2.2本设计的语言——leechee7第三章相关技术的介绍83.1Flex83.1.1Flex输入文件的格式83.2Bison93.2.1Bison的语法文件93.2.2文法规

2、则的语法103.2.3文法设计需要注意的问题113.3LLVM123.3.1LLVMIR123.3.2LLVM对三段式设计的实现133.3.3利用LLVM完成代码优化15第四章语言和编译器的设计174.1语言设计17III太原科技大学学士学位论文4.1.1leechee的数据组成174.1.2leechee的文法规则184.1.3leechee的词法规则244.1.4leechee的输入输出274.2抽象语法树284.2.1抽象语法树的用处284.2.2leechee语法树的设计284.3语法制导翻译314.3.1利用Bison实现语法制导

3、翻译方案324.3.2均分代码生成工作32第五章编译器的实现335.1抽象语法树的实现335.1.1NodeAST335.1.2类型345.1.3表达式365.1.4语句425.1.5声明465.2符号表505.3分析栈515.4中间代码生成的上下文525.5输入输出535.6代码优化55第六章用例说明566.1用例程序566.2使用步骤58结束语59致谢60参考文献61III太原科技大学学士学位论文附录62附录Ⅰ英文资料翻译62附录Ⅱ程序代码73III太原科技大学学士学位论文第一章绪论1.1什么是编译器编译器(compiler)也是一个计

4、算机程序,它把用某种编程语言(源语言)编写的代码转变成另一种计算机语言(目标语言,通常是二进制形式的目标代码)。转变源码最普遍的原因是为了生成执行的程序。编译器,这个名字主要是指把高级编程语言翻译成低级语言(比如,汇编语言或者机器码)的程序。如果翻译出来的程序能够在有着不同于编译器自身运行的CPU或者操作系统的计算机上运行,这种编译器就是交叉编译器(cross-compiler)。能够把低级语言翻译成高级语言的程序则叫做逆编译器(decompiler)。把高级语言翻译成其他高级语言的程序,通常被称为语言翻译器(languagetransla

5、tor)。语言重写器(rewriter)通常是指能够转变表达式而不改变所属语言的程序。一个编译器通常执行的操作有:词法分析,预处理,语法分析,语义分析(语法制导翻译),代码生成,和代码优化[1]。编译器软件的正确性非常重要,因为不正确的编译器行为产生的程序错误,通常很难被发现,也很难解决;为此,编译器的实现者付出了大量的努力来保证他们的软件的正确性。1.2总会有编译器的开发需求现在常用的语言都已经有很多优秀的编译器,比如C语言有GCC和ICC;C++有G++和I++;Java有JAVAC和GCJ。然而这些常用语言本身就一直在改变,不断地完善

6、。因而,实现这些语言的编译器也必须做出相应的改动。语言自身的改变,有的是为了弥补自身的缺陷,例如java语言从设计至今,其体积已经增大了几倍;有的是为了适应新的软件开发需求,比如为了更容易地开发大型软件。94太原科技大学学士学位论文除了那些成熟语言的改动会带来编译器软件编程的需要外,新语言的诞生也需要编译器程序员来完成新语言的实现工作。比如现在不断涌现的各种脚本语言,都需要编译器程序员来编写这些语言的编译器。新语言的设计(创造),有的是为了适应特殊领域的编程需要,比如SQL(StructuredQueryLanguage),是为关系数据库管

7、理系统专门设计的专用语言。有的是为了更好地利用各种系统资源(尤其是硬件资源),比如OpenCL(OpenComputingLanguage),是为了更好地开发异构平台的计算能力而设计的。可以看到作为编程语言的实现软件(或者不同语言间的翻译软件)的编译器,对它的编程需求一直都存在。我们总有需要实现新的编译器,或者改动现有编译器的时候。图1.1一个典型编译器执行的操作1.3为什么做这个项目94太原科技大学学士学位论文开发高性能的应用软件,除了一个良好的软件架构外,还需要一门符合要求的高效的编程语言来实现软件的设计,和一个高质量的编译器来把高级语

8、言写的程序翻译成计算机硬件能够执行的机器代码。编程语言和编译器扮演着辅助软件设计和实现,以及开发计算机计算能力的角色。它们都会深刻影响软件的实际性能;编程语言还会影响软件开发的效

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。