资源描述:
《国防科大编译原理第二章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章:高级语言机器语法描述2.1程序语言的定义2.2高级语言的一般特性2.3程序语言的语法描述2.1程序语言的定义-关于语言的一些概念语言=语法+语义+语用。一、字母表和符号串字母表:符号的非空有限集例:={a,b,c}符号:字母表中的元素例:a,b,c符号串:符号的有穷序列例:a,aa,ac,abc,..空符号串:无任何符号的符号串(ε)符号串集合:由符号串构成的集合。二、单词符号和词法规则单词符号:语言中具有独立意义的最基本结构。词法规则:单词符号的形成规则。2.1.1语法:一个程序设计语言是一个符号系统。
2、语言的词法规则和语法规则定义了程序的结构形式,是判断输入字符串是否构成一个形式上正确程序的依据。三、语法单位和语法规则语法单位:由单词符号形成的具有更大的独立语法意义结构。如表达式:0.5*X1+C,一般的程序语言的语法单位有表达式、语句、分程序、函数、过程和程序等。语法规则:语法单位的形成规则。2.1.2语义一、语义问题语义定义一个语言单词符号和语法单位的意义。离开语义,语言只不过是一堆符号的集合。对于编译来说,只有了解程序的语义,我们才能知道把它翻译成什么样的目标指令代码。二、语义规则和程序语义规则:程序语言的
3、语义是指这样一组规则,使用它可以定义一个程序的意义,这些规则称为语义规则。程序:从本质(语义)上说,一个程序是描述一定数据的处理过程。(从语法上看)程序设计语言中的程序和其他语法单位形成一定层次结构。程序的语法/语义问题:层次结构中有哪些语法单位,其语义如何?--2.2节如何描述这些语法单位?--2.3节。2.2高级语言的一般特性2.1.1高级语言的分类:一、强制式语言过程式语言。特点是命令驱动,面向语句。如C、PASCAL等。二、应用式语言函数式语言。特点是注重程序功能,从已有函数出发构造新的函数,构造新函数的过
4、程中对初始数据进行计算得到最终结果。如LISP等。三、基于规则的语言逻辑程序设计语言。特点是规则驱动,从事实出发,运用逻辑规则,推导出问题的结果。程序基本结构包括事实和规则两部份。如PROLOG等四、面向对象语言把数据和对数据的操作封装在一起,构成对象。支持封装性、继承性和多态性。本课程主要讲解过程式语言程序的编译,因此涉及的语法和语义以过程式语言的为主。构造其他类型语言程序的编译程序与之类似。2.2.2程序结构高级语言程序通常由若干子程序段构造,一些语言还引入类、程序包等更高级的结构。一、FORTRAN语言程序由
5、主程序和若干个辅助程序段(子程序、函数段或数据块)构成。二、PASCAL语言允许子程序嵌套。一个PASCAL程序可以看作是操作系统调用的子程序。三、JAVA语言面向对象高级语言,支持面向对象的特性,重要概念为类和继承。程序由类定义和实现构成。一个JAVA程序可看作是一个特定类的实例化。过程式语言程序的层次结构。P142.2.3数据类型和操作“数据”表示外部事务的属性,是大多数程序数据语言的最基本的概念。程序运行过程就是对计算机存储器中的数据加工的过程,而变量是数据存储地址的抽象。数据的含义包括数据的值和数据的类型。
6、数据类型的三要素:(1)用于区别这种类型的数据对象的属性。(一个实数由三部份组成)(2)这种类型的数据对象可以具有的值。(取值范围、精度)(3)可以作用于这种类型的数据对象的操作。(+、-、*、/)一、初等数据类型:数值数据:整数、实数等。可对其施行算术运算(+、-、*、/等)逻辑数据:布尔型数据。可对其施行逻辑运算(and,or,not等)字符数据:字符型或字符串型数据。用于符号处理。指针类型:指针类型的数据对象的值指向另一些数据。名字和标识符名字:用来表示数据对象、函数和过程。具有一定的内涵,如代表数据时,其涵
7、义涉及该数据的值、类型等。又可看成是一个抽象的存储单元的代表,如变量(intcount)。标识符:字母和数字组成,以字母开头的字符串,用来表示名字。名字的属性包括类型和作用域,类型决定名字具有什么样的值,值在计算机内的表示方式,以及可以对它施加的运算。作用域规定名字的值的存在范围。“静态”名字:通过说明语句或隐性规则约定名字的类型。可在编译时对其合法性进行检查。(无需在运行时检查或转换)“动态”名字:名字的类型只有在程序运行时才能确定。需在程序运行时收集、确定其性质,并进行必要的类型转换。二、数据结构——相互之间存
8、在一种或多种特定关系的数据元素的集合。由初等数据定义复杂数据结构的常见方式有:1.数组:一个数组是由同一类型数据组成的n维矩形结构。沿着每一维的距离称为一个下标,数组的每个元素位置可通过每一维的下标来确定,每个数组元素占用同样大小的存储空间,同时数组元素由数组名连同下标值来命名,如A[1,2,3,..,x]。确定数组:编译时已确定数组占用空间大小。可变数组: