一款PL/0编译器的设计与实现毕业论文

 2021-04-12 04:04

摘 要

计算机在现实生活中越来越普及,汇编语言和高级程序设计语言作为对机器语言的改进,虽然不能被机器或计算机直接接受,但大大方便了书写阅读以及算法交流。而编译技术则是计算机系统软件重要的组成部分之一,它不仅是计算机技术中发展最迅捷、最完善的一部分,也是计算机技术发展成效的象征。

编译的过程就是在不改变语言语义的条件下,把高级语言转化为低级语言(如高级语言转化为汇编语言,或者汇编语言转化为机器语言等),然后对编译出来的目标代码进行优化、运行以及计算。这些都是编译技术的一次次蜕变。

本系统的编程语言为C 。论文主要介绍的是该课题的开发背景,具体需要实现的功能以及实现整个编译器的步骤和方法,主要解释了它的特点、思想以及在实现过程中遇到的问题和解决办法。

关键词:汇编语言;高级语言;编译技术

Design and Implementation of a PL/O Compiler

ABSTRACT

Computer is becoming more and more popular in real life, assembly language and advanced programming language as the improvement of machine language, although not directly accepted by the machine or computer, but greatly facilitate the writing and reading and algorithm exchange. Compiling technology is one of the important components of computer system software. It is not only the most rapid and perfect part of computer technology, but also a symbol of the development of computer technology.

The process of compiling is to transform high-level language into low-level language (such as high-level language into assembly language or assembly language into machine language) without changing language semantics, and then optimize and run the compiled object code As well as calculations. These are the transformation of the technology again and again.

The programming language of this system is C . The paper mainly introduces the development background of the subject, the functions that need to be realized and the steps and methods of realizing the whole compiler. It mainly explains its characteristics, thoughts and problems and solutions in the process of implementation.

Key words:Assembly Language; High-level Language; Compilation Technology

目 录

1 绪论 - 1 -

1.1 开发背景 - 1 -

1.2 开发目标及意义 - 1 -

1.3 国内外发展情况 - 2 -

2 理论基础 - 3 -

2.1 编译系统概述 - 3 -

2.1.1 什么是编译器 - 3 -

2.1.2 编译器的产生 - 3 -

2.2 编译器的结构 - 4 -

2.3 编译程序的开发 - 5 -

2.3.1 历史与发展 - 5 -

2.3.2 开发注意事项 - 6 -

2.3.3 编译技术和软件工具 - 6 -

3 编译器的实现 - 7 -

3.1 PL/O编译器的基本结构 - 7 -

3.2词法分析部分 - 7 -

3.2.1 概述 - 7 -

3.2.2 词法分析的实现 - 8 -

3.3 语法分析部分 - 11 -

3.3.1 概述 - 11 -

3.3.2 PL/O语言文法规则 - 12 -

3.3.3 语法分析的实现 - 13 -

3.4 语义分析部分 - 15 -

3.4.1 概述 - 15 -

3.4.2 语义分析的实现 - 16 -

3.5 代码生成部分 - 16 -

3.5.1 概述 - 16 -

4 编译器的使用方法及测试 - 18 -

4.1 使用方法 - 18 -

4.2 测试源文件 - 18 -

结 论 - 20 -

致 谢 - 21 -

1 绪论

1.1 开发背景

计算机科学与技术如此迅捷的发展,我们身边也出现了不少计算机技术的身影。为了满足不同的需求,各种各样的计算机程序被编写出来,运用在不同的领域。当然,有计算机程序就一定有相应的高级程序设计语言。程序设计语言多种多样,如何让自己编写的程序能让计算机或者机器读懂,这就需要编译器作为一个翻译,让各种语言编写的代码转化成目标语言的代码。

自1960年以来,编译器设计就始终活跃在计算机科研方面的最前端。尽管编译技术是一种历史悠久而且相当完善的计算机技术,但编译器作为一种高效的“翻译”工具,加上科技的发展,编译器必然要紧跟时代的步伐进行更新。计算机软硬件水平不断提高,计算机程序涉及的方面越来越广,设计需求也越来越多,导致编译器的设计也越来越复杂,也会占用更多的时间空间和算法。编译器设计在大体思想上没有本质的变化,内部结构却和以前大不相同。当然,相关科研技术人员也会继续完善的编译技术来解决先前编译器无法完成当前需求的问题[1][1]。

另外,编译技术涉及到的很多其他技术比如语言的文法、语法词法分析器等等在生活中也十分普及。

1.2 开发目标及意义

编译器十分复杂,有些要几百行代码,有些甚至几百万行都不够,因此设计这样一个翻译工具不是一件简单的事情。除了专门设计编译器的人员,很少有人会试着去编写一个完整的编译器,但基本上任何方式的计算都会用到编译器,所以理论上计算机从业人员都应当熟悉编译器的机构和如何使用编译器。此外,命令解释程序和界面程序的设计和编译器的设计有着异曲同工之妙,这也是计算机程序设计中很常见的。因此,能熟知甚至运用编译器的开发技术还是有很有意义的。

当然,编译器的设计也不是很简单的,涉及到很多其他技术比如程序设计语言、语言理论和软件工程等等。

编译器实际上是一种很机械化的设计,它必须能够把一种语言转化为机器可以执行的语言。编译器的使用者很难更改自己拿到手设计的语言或是目标机器能够识别的语言,所以编译器设计过程中能否进行相对应的、正确的分析和转化决定了这个编译器的质量[2][2]。

1.3 国内外发展情况

任何较为成熟的技术在后续发展方面,提高效率必然是首要目标,编译技术也不例外。编译的效率集中体现在产出的目标代码运行时会占用多少时间和空间,因此时间和空间便是编译器设计的过程中最需要注意的两个地方。在编译的设计过程中,代码优化是最有技术含量的一部分。代码优化一般是指寻找源代码或是中间代码的特征值,随后把这些特征值通过一定的算法进行一个转化,希望在做到时间效率和空间效率平衡的情况下能够不改变源代码本身的意思。

开发编译程序有着很大的实用价值及意义。一种高级语言编写出来的程序是否能够达到该程序设计的需求,很大一部分和这个语言的编译器有关。因此,我国不少高等院校的研究人员都在尝试对这一方面进行更深入的了解。他们大部分是在对一些高级语言的编译器进行研究,提高编译效率或者优化设计的同时,把优化或是其他有用的技术植入到指定的编译器中 (如.NET编译器)。

而国外近几年的发展方向则和国内完全不同。国外的开发人员为了更加简化输入程序的信息,在编译过程中加入的很多更为复杂的算法,这也就需要更复杂的程序设计语言作为支撑,比如专门用来编译函数的Hindley-Milner类型的算法 [3][3]。

另外,国内外的科研人员对编译技术进行了如此多的改进和优化,但没有改变其基本的思想和原理,编译原理也逐渐成为高等院校计算机学科中必不可少的课程。

在1983年,GNU计划公开发起。GNU工程也带来了无数强有力而免费的计算机工具,其中就有数不清编译器,这些编译器在当时甚至可以编译所有计算机程序语言,而且这些编译器的源代码也是免费的。2000年前后,SGI公司发布了编译器Pro64的源代码,这也就是Open64的前身[4][4]。Open64经过不断的改进和优化,目前作为一个分析全面的编译器,被用于很多大型的科研项目中。

2 理论基础

2.1 编译系统概述

2.1.1 什么是编译器

能够将方便人类理解、书写、修改的计算机程序语言转化成机器可以识别或者运行的低级计算机程序语言,这样的一种系统软件,我们称之为编译器。当我们把拿到手的源程序(如Pascal、C 等语言的程序)输入到编译器中,经过一系列的分析和转化,从而得到目标代码。目标代码一般为汇编语言或特定的机器语言 [5][5]。

图2.1 编译器的作用

2.1.2 编译器的产生

在1940年前后,冯诺依曼开创了存储程序计算机的先河,这让高级代码和程序的实现提上了日程。在此之前,计算机程序的编写都是由机器语言完成的,这不仅让程序编写的效率十分低下,同样也耗费了大量的计算机的时间和空间。这时便有了汇编语言,用汇编语言编写程序大幅减少了人力物力,但作为一种较低级的计算机程序语言,自然还是有很多的不足之处。为了解决汇编语言的不足之处,早期的科研人员又发明了高级计算机程序语言,这些高级程序语言用相似于数学定义或是普通文字的一种语言作为代码编写计算机程序。用这些代码写的程序不需要指定的机器去运行[6][6]。

科技不断的发展,各方各面的研究也相继铺开,高级程序设计语言也慢慢被更多的人所熟知,编译器的设计也不再是天方夜谭。编译器一开始最大的难点在于源程序的分析,而当文法规则被人们所理解时,分析问题也就迎刃而解。程序分析部分解决了那下一步自然是自动构造,相应的也就产生了分析程序生成器的初始原型。和分析程序相类似,扫描程序也随着对自动机的熟悉和理解逐渐被开发出来。加上人类对于生成目标代码方法的优化,编译器的整体框架就搭建好了,并且沿用至今。

您需要先支付 80元 才能查看全部内容!立即支付

课题毕业论文、开题报告、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找,优先添加企业微信。