第1章 **语言及编译程序概述
计算机语言是人类指导计算机工作的工具,为了便于操作,**语言一般较接近于数学语言和工具语言,比较直观、自然和易于理解。但一般来说,计算机无法理解和直接执行**语言,因此我们要为计算机构造编译程序,由编译程序将**语言程序翻译成计算机能够识别的机器语言,然后交给计算机去执行。
这一章的内容主要是有关编译程序和**语言及其语法描述的一些基本概念。
1.1学习要点
1.1.1程序语言的定义
一个程序语言是一个记号系统。如同自然语言一样,程序语言主要是由语法和语义两方面定义的。有时,语言定义也包含语用信息,语用主要是有关程序设计技术和语言成分的使用方法,它使语言的基本概念与语言的外界(如数学概念或计算机的对象和操作)联系起来。任何语言程序都可看作是一定字符集(称为字母表)上的一个字符串。合乎语法的字符串才算是一个合法的程序。
语言的语法是用来形成一个合法程序的一组规则。这些规则的一部分称为词法规则,另一部分称为语法规则(或产生规则)。语言的词法规则是指单词符号的形成规则。语法规则则规定了如何从单词符号形成更大的结构(即语法单位),因此,语法规则也可以说是语法单位的形成规则。一般程序语言的语法单位有:表达式、语句、分程序、函数、过程和程序等等。词法规则和语法规则定义了程序��言的形成规则,而程序的意义则由语言的语义规则来定义。语义规则规定了语言的单词符号和语法单位的意义,是定义一个程序意义的一组规则。
程序语言的语法规则是用文法来描述的,构成文法的规则必须是准确而且易于理解的,并具有相当强的描述能力,足以描述各种不同的结构。现今的程序语言一般用上下文无关文法来描述。
1.1.2 **语言的分类根据其功能和构成规则,**语言可以分为以下几类:
(1)强制式语言(Imperative Language),也称过程式语言。其特点是命令驱动,面向语句。一个强制式语言程序是由一系列的语句组成,每个语句的执行引起若干存储单元中的值的改变。如FORTRAN、C、PASCAL、Ada等等。
(2)应用式语言(Applicatire Language),也称函数式语言。这类语言更注重程序所表示的功能,而不是一个语句接一个语句地执行。程序的开发过程是从前面已有的函数出发构造出更复杂的函数,对初始数据集进行操作直至*终的函数可以用于从初始数据计算出*终的结果。如LISP、ML等。
…… 程序设计语言编译原理是计算机专业的一门核心课程,在计算机专业教学中占有十分重要的地位。该课程具有很强的理论性、技术性和实践性,学生在学习时普遍感到内容抽象、不易理解、难以掌握。为了帮助学生及其他初学者正确理解概念和原理,把握**和难点,掌握解题技巧,我们依据中国计算机学会、全国高校计算机教育研究会制定的“计算机科学与技术教程(CCC2002)”对编译原理课程教学的基本要求,并以陈火旺院士等编写的在国内使用广泛并荣获全国高校**教材一等奖的《程序设计语言编译原理(第三版)》教材的结构和内容为主线,编写了这本学习辅导书。
本书共分为8章。第1章包括编译程序的组成和**语言及其语法描述;第2章是词法分析,主要涉及正规式与有限自动机的内容;第3章介绍自上而下语法分析,主要是LL(1)分析以及递归下降分析法和预测分析法;第4章介绍自下而上语法分析,主要包括算符优先分析和LR分析;第5章介绍属性文法和语法制导翻译的基本概念与方法;第6章是语义分析和中间代码产生;第7章包括运行时存储空间组织和符号表的内容;第8章包括优化与目标代码生成的内容。
书中每一章均包括学习要点、典型题解析和习题及解答。学习要点中简要归纳了该部分的主要内容和需要**掌握的知识点,着重理清其中的概念、原理和方法,为学生理解和掌握课程内容提供指导;典型题解析针对那些具有普遍性的问题,特别是针对学生在学习中遇到的**和疑难问题,详尽地进行分析和讨论,旨在帮助学生拓宽思路,加深对课程内容的理解,提高分析和解决问题的能力;习题及解答选编了适当数量的各类习题,提供给读者练习,所有习题均给出了参考解答。本书所选的例题和习题主要来源于两个方面:一是《程序设计语言编译原理(第三版)》教材中的习题,二是历年来全国计算机领域各**大学和研究所的研究生入学考试试题。为了便于学生复习考试,我们还在附录中选编了若干典型试卷,包括4套研究生入学考试全真试卷和2套模拟试卷。
本书不仅是计算机专业编译原理课程的学习指导书,也是研究生入学考试的复习参考书,对于计算机专业自学考试和各类软件考试的考生以及其他需学习或了解编译原理的人员也有一定的参考价值。
本书第1章、第2章由周会平编写,第3章、第4章由王挺编写,第7章、第8章由钟求喜编写。刘春林编写第5章、第6章,并负责*后统稿。在本书的编写过程中得到了陈火旺院士的鼓励和指导,得到了国防科技大学计算机学院领导和同事的支持和帮助,在此表示衷心感谢。
由于作者水平有限,书中疏漏之处恳请读者批评指正。