第三章程序设计语言基础知识_第1页
第三章程序设计语言基础知识_第2页
第三章程序设计语言基础知识_第3页
第三章程序设计语言基础知识_第4页
第三章程序设计语言基础知识_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章程序设计语言基础知识3.1、程序设计语言概述3.2、语言处理程序基础3.1程序设计语言概述

程序设计语言是为了书写计算机程序而设计的符号语言,用于对计算过程进行描述、组织和推导。程序设计语言的广泛使用始于1957年出现的FORTRAN,其发展和演化已经超越了运行程序的机器。3.1程序设计语言概述3.1.1基本概念1.低级语言和高级语言

计算机硬件只能识别由0、1字符序列组成的机器指令,因此机器指令是基本的计算机语言。用机器语言编制程序效率低、可读性差,也难以理解、修改和维护。因此,人们设计了汇编语言,用容的符号代替0、1序列,来表示机器指令中的操作码和操作数。例如,用ADD表示加法、SUB表示减法等。虽然使用汇编语言编写程序的效率和程序的可读性有所提高,但汇编语言是面向机器的语言,其书写格式在很大程度上取决于特定计算机的机器指令。机器语言和汇编语言被称为低级语言。人们开发了功能更强、抽象级别更高的语言以支持程序设计,因此就产生了面向各类应用的程序设计语言,即高级语言,常见的有Ja、C、C++、C#、Python、PHP等。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。3.1程序设计语言概述3.1.1基本概念2.编译程序和解释程序

目前,尽管人们可以借助高级语言与计算机进行交互,但是计算机仍然只能理解和执行由0、1序列构成的机器语言,因此高级程序设计语言需要翻译,担负这一任务的程序称为“语言处理程序”。由于应用的不同,程序语言的翻译也是多种多样的。它们大致可分为汇编程序、解释程序和编译程序。用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个称为汇编程序的翻译程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。3.1程序设计语言概述3.1.1基本概念3.程序设计语言的定义般地,程序设计语言的定义都涉及语法、语义和语用3个方面。(1)语法。语法是指由程序设计语言基本符号组成程序中的各个语法成分(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号(单词)构成语法成分的规则称为语法规则。程序设计语言的语法可通过形式语言进行描述。(2)语义。语义是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义是指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义。一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。(3)语用。语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。3.1程序设计语言概述3.1.2程序设计语言的分类和特点程序设计语言发展概述

程序设计语言的发展是一个不断演化的过程,其根本的推动力就是对抽象机制的更高要求,以及对程序设计活动更好地支持。具体地说,就是把机器能够理解的语言提升到也能够很好地模仿人类思考问题的形式。 FORTRAN(“FORmulaTRANslator”的缩写)是第一个高级程序设计语言,在数值计算领域积累了大量高效而可靠的程序代码。 ALGOL(ALGOrithmicLanguage)诞生于晶体管计算机流行的年代,ALGOL60是程序设计语言发展史上的一个里程碑,主导了20世纪60年代程序语言的发展,并为后来软件自动化及软件可靠性的发展奠定了基础。 PASCAL语言是一种结构化程序设计语言,由瑞士苏黎世联邦工业大学的沃斯(N.Wirth)1971年正式发表。3.1程序设计语言概述3.1.2程序设计语言的分类和特点 C语言是20世纪70年代发展起来的一种通用程序设计语言,其主要特色是兼顾了高级语言和汇编语言的特点,简洁、丰富、可移植。UNIX操作系统及其上的件都是用C编写的。C提供了高效的执行语句并且允员直接访问操作系统和底层硬件,适用于系统级编程和实时处理应用。 C++是在C语言的基础上于20世纪80年代发展起来的,与C兼容。在C++中,主要的是增加了类机制,使其成为一种面向对象的程序设计语言。 Ja产生于20世纪90年代,其初始用途是开发网络浏览器的小应用程序,但是作为一种通用的程序设计语言,Ja得到非常广泛的应用。Ja保留了C++的基本语法、类和继承等概念,删掉了C++中一些不好的特征,因此与C++相比,Ja更简单,其语法和语义更合理。 C#(CSharp)是由Microsoft公司开发的一种面向对象的、运行于.NETFramework的高级程序设计语言,相对于C++,这个语言在面进行了限制和增强。3.1程序设计语言概述3.1.2程序设计语言的分类和特点 PHP(HypertextPreprocessor)是一种在服务器端执行的、嵌入HTML文档的脚本语言,其语言风格类似于C语言,由网站编程人员广泛运用。 Python是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用的原型。Python也是一种脚本语言,它支持对操作系统的底层访问,也可以将Python源程序翻译成字节码在Python虚拟机上运行。 JaScript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加动态功能,为用户提供更流畅美观的浏览效果。通常,将JaScript脚本嵌入在HTML中来实现自身的功能。

3.1程序设计语言概述3.1.3程序设计语言基本成分1.数据成分

(1)常量和变量。

(2)全局量和局部量。

(3)数据类型2.运算成分

程序设计语言的运算成分指明允的运算符号及运算规则。大多数高级程序设计语言的基本运算可以分成算术运算、关系运算和逻辑运算等类型,有些语言如C(C++)还提供位运算。运算符号的使用与数据类型密切相关。为了明确运算结果,运算符号要规定优先级和结合性,必要时还要使用圆括号。3.1程序设计语言概述3.1.3程序设计语言基本成分3.控制成分

(1)顺序结构

3.1程序设计语言概述3.1.3程序设计语言基本成分3.控制成分

(2)选择结构

3.1程序设计语言概述3.1.3程序设计语言基本成分3.控制成分

(3)循环结构

3.1程序设计语言概述3.1.3程序设计语言基本成分3.控制成分C/C++提供的控制语句如下。

(1)复合语句。复合语句用于描述顺序控制结构。

(2)if语句和switch语句

(3)循环语句4.函数

函数是程序模块的主要成分,它是一段具有独立功能的程序。C程序由一个或多个函数组成,每个函数都有一个名字,其中有且仅有一个名字为main的函数,作为程序运行时的起点。函数的使用涉及3个概念:函数定义、函数声明和函数调用3.2语言处理程序基础

语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要有汇编程序、编译程序和解释程序3种基本类型。3.2语言处理程序基础3.2.1汇编程序基础1.汇编语言

汇编语言是为特定计算机设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。汇编语言源程序由若干条语句组成,一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句。(1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。基本的指令如ADD、SUB和AND等,书写指令语句时必须遵循相应的格式要求。(2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作。(3)宏指令语句。在汇编语言中,还允将多次重复使用的程序段定义为宏。3.2语言处理程序基础3.2.1汇编程序基础2.汇编程序

汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序。汇编程序的基本工作包括:将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令和宏指令。由于汇编指令中形成操作数地址的部分可能在后面才能确定,所以汇编程序一般需要扫描两次源程序才能完成翻译过程。3.2语言处理程序基础3.2.2编译程序基础1.编译过程概述

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言程序或机器语言程序)。编译程序的工作过程可以分为6个阶段。实际的编译器中可能会将其中的某些阶段结合在一起进行处理。下面简要介绍各阶段实现的主要功能。

3.2语言处理程序基础3.2.2编译程序基础(1)词法分析

词法分析阶段是编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。源程序可以被看成是一个多行的字符串。

(2)语法分析

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”“程序”等。语法规则就是各类语法单位的构成规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。如果源程序中没有语法错误,语法分析后就能正确地构造出其语法树;否则就指出语法错误,并给出相应的诊断信息。词法分析和语法分析本质上都是对源程序的结构进行分析。3.2语言处理程序基础3.2.2编译程序基础(3)语义分析

语义分析阶段主要分析程序中各种语法结构的语义信息,包括检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被翻译成正确的目标代码。语义分析的一个主要工作是进行类型分析和检查。程序设计语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。在确认源程序的语法和语义之后,就可对其进行翻译,同时改变源程序的表示。对于声明语句,需要记录所遇到的符号的信息,因此应进行符号表的填查工作。3.2语言处理程序基础3.2.2编译程序基础(4)中间代码生成

中间代码生成阶段的工作是根据语义分析的输出生成中间代码。“中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。(5)代码优化

由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在计算时间上和存储空间上有很大的浪费。当需要生成高效的目标代码时,就必须进行优化。优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。由于中间代码是不依赖于具体机器的,此时所作的优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关3.2语言处理程序基础3.2.2编译程序基础(6)目标代码生成

目标代码生成是编译器工作的后一个阶段。这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。(7)符号表管理

符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。3.2语言处理程序基础3.2.2编译程序基础(8)出错处理

用户编写的源程序不可避免地会有一些错误,这些错误大致可分为静态错误和动态错误。动态错误也称动态语义错误,它们发生在程序运行时,例如变量取零时作除数、引用数组元素下标越界等错误。静态错误是指编译时所发现的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误称为语法错误;而语义分析时发现的运算符与运算对象类型不合法等错误属于静态语义错误。3.2语言处理程序基础3.2.2编译程序基础2.词法分析

词法分析过程的本质是对构成源程序的字符串进行分析,是一种对象为字符串的运算。语言中具有独立含义的小语法单位是符号(单词),如标识符、无符号常数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。 1)正规表达式

运算符“|”“·”“*”分别称为“或”“连接”和“闭包”。在正规式的书写中,连接运算符“·某省市略。运算符的优先级从高到低顺序排列为“*”“·”“|”。3.2语言处理程序基础3.2.2编译程序基础 2)有限自动机有限自动机是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为两类:确定的有限自动机和不确定的有限自动机。

确定的有限自动机(DeterministicFiniteAutomata,DFA)。

不确定的有限自动机(NondeterministicFiniteAutomata,NFA)3.语法分析

程序设计语言的语法常采用上下文无关文法描述。文法不仅规定了单词如何组成句子,而且刻画了句子的组成结构。形式文法是一个规则(或称产生式)系统,它规定了单词在句子中的位置和顺序,也描述了句子的层次结构。3.2语言处理程序基础3.2.3解释程序基础

解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。

对于高级语言的编译和解释翻译方式,可从以下几个方面进行比较。

(1)效率。编译比解释方式可能取得更高的效率。

一般情况下,在解释方式下运行程序时,解释程序可能需要反复扫

描源程序。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论