ImageVerifierCode 换一换
格式:DOCX , 页数:118 ,大小:113KB ,
资源ID:7308607      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7308607.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(军用 Ada 语言.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

军用 Ada 语言.docx

1、军用 Ada 语言军用Ada语言第1章 Ada 简介1.1概述(Overview) Ada 语言最初设计是为了构建长周期的、高度可靠的软件系统。它提供了一系列功能来定义相关的数据类型(type)、对象(object)和操作(operation)的程序包(package)。程序包可以被参数化,数据类型可以被扩展以支持可重用库的构建。操作既可以使用方便的顺序控制结构,通过子程序(subprogram)来实现,也可以通过包含并发线程同步控制的入口(entry)来实现。Ada 也支持单独编译(separate compilation),在物理层上支持模块性。 Ada 包含了很复杂的功能以支持实时(re

2、al-time),并发程序设计(concurrent programming)。错误可以作为异常(exception)来标示,并可以被明确地处理。Ada 也覆盖了系统编程(system programming);这需要对数据表示和系统特性访问的精确控制。最后,提供了预定义的标准程序包,包括输入输出、字符串处理、数值计算的基本函数和随机数生成。译自Ada Reference ManualSection1:General 在本章里,我们将会初步介绍一下 Ada,以给读者留下大致的印象。1.2 Ada 的历史(The History of Ada) 为了更好的理解 Ada,它的历史有必要简要地了解一

3、下。 1974 年时,美国国防部(DoD)意识到开发和维护嵌入式系统(固化在硬件中的系统,如导弹弹导系统)耗费了过多的时间,精力和资金。 当时,在使用的计算机语言有 450 多种,这增加了开发新系统以及培训程序员使熟悉现有系统的时间和成本。维护工作也由于没有标准化的工具(编辑器,编译器等)而受阻。所有这些因素使 DoD 意识到它需要一门强大的语言,能被所有嵌入式电脑供应商使用。 开发工作始于 1975 年,当时 DoD 列举了一系列的语言需求;但没有一门现有语言指定了这些特性,因此在 1977 年,DoD 起草了一份建议,开发一门新的语言。不像COBOL 这些语言由专门的委员会制定,新语言是一

4、场竞争的主题,在产业界和学术界的评估中产生。 在众多竞争者当中,有 4 家被选中以完成进一步的工作。最终只剩下 Cii-Honeywell Bull 公司。这门语言被命名为 Ada。设计小组由 Jean Ichbiah 领导,对语言全权负责。 在 1983,Ada 成为了一个 ANSI 标准 ANSI/MIL-STD-1815A。此年成为一个 ISO 标准。在参考手册中定义的语言通常称为 LRM 或 ARM(Ada Reference Manual)。在 Ada 的相关书籍和编译器的报错信息中经常出现手册内容的引用。对于任何 Ada 站点,参考手册都是推荐的;虽然很难阅读,但它是所有 Ada

5、问题的最权威解释(一个小组正在澄清语言定义中已发现的语义不清的内容)。 Ada 也经过了一次修正,即 1995 的新的 ISO 标准。新标准修正了 Ada83 的很多缺陷,并进一步扩展了它的功能(在修正工作中,有个临时的标准,即 Ada9x,不少 Ada 文章是在 这段时间写的,因此有些内容在细节上可能与 Ada95 有所区别,但主要原理差不多)。 为了防止 Ada 编译器的不兼容版本的扩散,Ada Joint Program Office (控制 Ada 语言的执行部门,于 1998 年 10 月 1 日关闭,见 Ada Joint Program Office closed) 采取了不寻常

6、的做法 - 他们注册 Ada 商标。除非通过他们的兼容性测试,编译器厂商不允许出售 Ada 编译器。这在不久以后放松了,保护协议变成了 Validated Ada。因而产生的 Ada 确认证书被限制在一定的时间内并有一个期满时间。当时间过期后,该编译器不能再被标记为Validated Ada 编译器。通过这种方式,AJPO 确保当前市场上的编译器与当前标准相一致。 目标是使所有的 Ada 程序能在所有系统上被编译-在这点上,AJPO 比其它语言小组做得好。上述内容基本上是从 Quick Ada 翻译过来的(以前翻译该教材“半途而废”的残留品,直接引用一下了),Ada 语言的详细历史细节见 Th

7、e History of Ada1.3 与 C 和 C+ 的比较(Contrast:Ada and C,C+) 由于 Ada 出生年月迟了一点,而且目前的操作系统基本上由 C,C+ 写成,导致 Ada 在“平民层”的推广比较糟糕,至今还不是很流行,Why Ada isnt Popular 一文对此有比较详细的解释。而 Ada 爱好者们为了显示 Ada 的优越性(这种心情相当能理解),将 Ada 与 C,C+ 做了一系列比较,其结果反正综和指数都是 Ada 高,这方面文章有不少,如 Comparing Development Costs of C and Ada,Contrasts: Ada 9

8、5 & C+。在这里,我们只初略地了解一下 Ada 的优势即可,在读者朋友接下去的学习中,应该是能从心里感受到 Ada 的优点。更高的安全性、可靠性。Ada 中对于访问内存、数值计算等很多方面有一些严格的规定,而没有 C 和 C+ 那么自由;程序的错误绝大部份能在编译和运行时检测到,以至于可以不需要编译器,另外,语言也包含异常特性,能方便地处理错误。 更高的移植性。在 Unix 和 Windows 下有 C 编程经验的朋友应该对于兼容性深有体会,很多代码纯粹是为了适应不同的系统增添的,对于实际工作没多大用处。但 Ada 的初始语言环境中就有了异常(约等于 Unix 下的 Signal)、任务(

9、线程)、分布式计算、随机数产生、宽字符集很多特性的支持,而在现在的具体操作系统中,这些特性往往随系统而异。即使 Ada95 里缺少一些功能,也可以通过额外标准和函数库来弥补:GDI 库,可以用 GtkAda,在 Windows 和 X 下通用;Ada 也有一个 Posix 接口的标准,可以使用函数库 Florist 来调用 Posix 的函数 用户层是大大省力-只要自己的操作系统上有所需的编译器和函数库即可。 语法明确,基本上没有令人混淆的地方。Ada 程序的源代码远远比 C 或 C+ 的代码易懂。看程序的人是减轻了不少脑负担。 总之,C 和 C+ 能做的 Ada 肯定能做,但 Ada 要省时

10、方便的多。读者在学习 Ada之后,无需多说也就明白了,笔者在初学 Ada 时就有耳目一新的感觉,唯一的遗憾是 Ada 不流行。1.4 网络资源(Internet Resources) Ada 虽然在国内不流行,但在国外还是有不少网站,下面是只列举一小部份,至于更多的资源,读者可至 VenusIC 查找:Home of the Brave Ada Programmers (HBAP),即 Ada Home,由 Magnus Kempe 维护,里面包含了不少 Ada 相关的文档、软件 Public Ada Library (PAL)。PAL 是 Ada 软件、文档的图书馆。主站点在 wuarchi

11、ve.wustl.edu (WUARCHIVE), 以及法国的一个映像站点mirror site,PAL 目前由 Richard Conn 维护。 AdaIC,由 AJPO 发起的一个站点,也包含了不少相关信息 。 SIGAda ,是 ACM 的一个 Special Interest Group。 AdaPower,很不错的一个站点,有相关教材、文档、Faq、Linux 等链接。 Ada Core Technology,Gnat,Glade 等软件的老家。 新闻组 comp.lang.ada ,不用多介绍了 1.5 第一个程序(The First Program) 为了了解 Ada 程序的大致

12、结构,举一个例子是难免的。大部份书籍一般都是用hello world程序来开始,我们下面就见识一个在终端屏幕上输出 Hello World!的简例。000 - filename:hello.adb;001 with Ada.Text_IO; 002 procedure Hello is003 begin004 Ada.Text_IO.Put (Hello World!);005 Ada.Text_IO.New_Line;006 end Hello; 先介绍一下在本教材中代码的一些问题:每行代码前的 000,001 等数字表示该代码是第几行,只为了讲解方便,在实际源代码中是不存在的;with,p

13、rocedure 等保留字(reserved word)都用粗体表示,以示区别;有些字是用斜体表示,表示该字是用其它有效字符替换。 现在让我们分析上述的简单程序: 000标示该程序文件名为 hello.adb,在程序中并不需要;- 是注释符,表示从其所在位置至行尾都是注释,对程序没有什么影响,与 C 的 /* */类似。 001 Ada.Text_IO 是预定义的一个程序包(package);with package_name和 C 的 include 功能差不多。002-006是程序的主体部份。与 C 下的 main 函数类似,Ada 也需要一个主过程(main procedure),在这个

14、例子中是过程 Hello。过程的用法和上例一样,都是 procedure procedure_name is statements1;begin statements2;end procedure_name; statement1 可以是变量、常量、函数、过程等的声明;statements2 是过程 procedure_name 要执行的语句,对象的声明不能在这部份;end 后的 procedure_name 不是必需的,但为了程序的可读性,应加上。003,004 分别输出Hello World! 和新行符。Put 和 New_Line 都是 Ada.Text_IO 里的过程。 但上7例调用过

15、程 Put 和 New_Line 的方法比较罗嗦,因此我们也可以使用 use 语句:000 - filename:hello.adb;001 with Ada.Text_IO; use Ada.Text_IO;002 procedure Hello is003 begin004 Put (Hello World!);005 New_Line;006 end Hello; 这样 Ada 编译器就能在程序包 Ada.Text_IO 中自动搜寻 Put,New_Line,而无需用户指定它们所在的准确位置。 我们在将上例略微改动以下,以使读者了解一下声明部份:000 - filename:hello.

16、adb001 with Ada.Text_IO; use Ada.Text_IO; 002 procedure Hello is003 Str:String := Hello World!;004 begin005 Put(Str);006 New_Line;007 end Hello; 在 is 和 begin 之间,声明了一个字符串变量 Str,它的初始值为Hello World。String 是预定义的字符串类型。上述的声明方式和 Pascal 差不多。 现在我们对 Ada 程序长的什么样已有了基本的认识,下面需要了解几个术语。一个 Ada 程序是由一个或多个程序单元组成(program

17、 unit)。一个程序单元可以为: 子程序(subprogram),定义一些可执行运算。过程(procedure)和函数(function)都是子程序。 程序包(package),定义一些实体(entity)。程序包是 Ada 中的主要分组机制,类似于 C 的函数库,Modula 的module。 任务单元(task unit),与线程类似,定义一些计算,然后并发执行。 保护单元(protected unit),在并发计算中协调数据共享,这在 Ada 83 中不存在。 类属单元(generic unit),帮助构建可重用组建,和 C+ 的模板类似。 后3类属于高级话题,在后面的章节中我们会依次

18、介绍。程序单元又可为两部份: 声明部份(declaration)。定义对其它程序的接口,有些可用资源可以被用户使用,与 C 下的.h文件相似。 主体部份(body)。是声明部份的具体实现,等价与 C 的.c文件。 其中程序包(package)和子程序(subprogram)是用的最广泛的2个程序单元。大部份 Ada 程序基于一堆程序包,在以一个主过程(main proceudre) 来开始 Ada 程序 。第2章 基本数据类型和表达式(Basic Types and Expressions)2.1 概述(Overview) 数据类型是一门计算机语言最基本的特性,表示一个对象的类型,是数字、字符

19、或其它类型。由于 Ada 在数据类型上提供的强大处理能力,我们又不能很简单地认为数据类型仅是定义一个对象的类型。在 Ada 里,数据类型可以自己创建,它的相关运算符也可以自己定义,同时又有数据类型属性这项特性,具有相当大的灵活性。学过其它的语言,特别是有 C 和 Pascal 背景的朋友初次接触时可能会感到有点新鲜。 创建新类型,是用户自己定义数据类型,包括该类型的名称、取值范围及相关操作;其中又包括了派生类型和创建子类型,即以现有数据类型为母类型创建新类型,继承母类型的一部份属性。 数据类型属性,如同我们玩RPG游戏时的人物属性:体力值、魔法值一样,是说明该类型固有的属性,包括最小取值范围、

20、最大取值范围等等。 本章将会先介绍词法元素以及创建数据类型的基础性知识,然后是整型(integer)、实型(real)、字符型(character)、布尔型(boolean)、枚举类型(enumuration)这几种标量类型,最后则是相关的数据类型属性、类型限制和类型转换、表达式和运算符。2.2 词法元素(Lexical Element) Ada 里的词法元素与其它语言的定义还是有不小差别,下面按照 RM95 关于词法元素的分类来逐项介绍,包括标识符、保留字、字符、数值文字等及它们的一些规则。 2.2.1 基本字符集(Character Set) Ada 95 规定的标准字符集是 Latin-

21、1,支持8位(基于ISO-8869)和16位(基于ISO-10646)字符,在非标准模式下也可用本地字符集,具体情况取决于当前的系统。(一般来说,涉及字符时默认是指 Latin-1,程序几乎都是用 Latin-1 字符集写的) 字符在RM 95 中是分成了三类:图形字符(graphic character)、格式控制符(format effector)、其它控制符(other control function),它们所表示的范围为: 图形字符包括字母(letter)、数字(digit)、空格符(space)、特殊字符(special character)(例如 # & ( ) * + , -

22、. / : ; _ | ); 格式控制符包括水平制表符(HT)、垂直制表符(VT)、回车(CR)、换行(LF)、换页(FF); 其它控制符则是除了格式控制符以外的控制符。 更详细的内容参见RM 95、ISO 8869,ISO 10646。 Ada 是大小写忽略的(除了字符和字符串中的实际内容,如字符z和Z不相同,但标识符 z 和 Z 相同),但为了可读性,一般来说变量名或函数名首字母都会大写,其余小写,缩近格式也需要引起注意。根据实际情况尽量保证可读性。 为了兼容性,Ada95 要求编译器最少支持一行字符串和一个词法元素的长度为 200个字符(不包括行尾符)。 Ada 在字符集上并没有很严格要

23、求编译器一定要怎样,但应该支持标准字符集。2.2.2 标识符(Identifier) Ada 中不管是变量、函数还是其它对象都需要一个名称,这就叫做标识符。如 X、Count 、me就是简单的标识符。 Ada 中的标识符有以下一些注意点:1. 标识符一定要是字母开头,接下去可以是数字和下划线,结尾不能为下划线。如Fig_、_Lik、1me是不合法的。 2. 两个连续的下划线不能在一起,因为有些打印机可能会将两个下划线当作一个处理。 3. 虽然单个字符可作为标识符,但一般情况下不应该滥用这项特性(我不知道这除了少敲几个字外,还有什么意义,想想数字 0 和字母 O、数字 1 和字母l吧,绝对害死人

24、的做法)。 4. 不能将保留字作为标识符。在 Ada 83 中,标识符包括了保留字,但在Ada 95 中保留字从标识符中分离了出来。 5. .如上节所提及的,标识符是不分大小写的,但为了可读性,请注意你对标识符的命名。2.2.3 保留字(Reserved Word) 保留字在程序语法中有特殊的含义,不属于标识符范围,这与C 和 Pascal 等语言的定义有所不同。Ada 95 中的保留字如下:abort abs abstract accept access aliased all and array at begin bodycase constant declare delay delta

25、digits do else elsif end entry exception exitfor function generic goto if in is limited loop mod new not null of or others outpackage pragma private procedure protected raise range record rem renames requeuereturn reverse select separate subtype tagged task terminate then typeuntil use when while wi

26、th xor 在以后的内容中,我们会逐个解释它们的含义及作用。Ada95 的保留字比原先添加了6个:abstract, aliased, protected, requeue, tagged 和 until,虽然这可能会牵连到兼容性问题,但通常也无须计较这点。2.2.4 分隔符(Separator and Delimiter) Ada 程序中,各元素之间需要空格符、格式控制符或 EOF 隔开。RM 95里将它们作为separator,而delimiter 则是指下列特殊字符(中文有点说不清楚):& ( ) * + , -. / : | 或是复合型的: = . * := /= = = 。当分隔符

27、作为注释、字符串、字符、数值的一部分时,就不再是分隔符了。2.2.5 数值文字(Numeric Literal) 数值文字就是指数字。Ada 和 Pascal 相同,将数字分为实数型(real literal)和整数型(integer literal)两大类。实数型是有小数点的数字,整数型则无小数点。如 1.2787,0.871,7.0是实数型,而-882,5441,1是整数型。Ada 在数字表示上有一个很好的特性就是可以明确指定使用何种基数(2进制到16进制)表示,下面是数字的表示:十进制数(Decimal Literal) 不管是实型还是整型数,都可以在其间加上下划线,使长数字更加易读。如

28、56886515645125615,可写为56_886_515_645_125_615或5_6886_5156_4512_5615,下划线并不改变数字的值。但两个下划线不能是连续的,下划线也不可以在数字首部和尾部,如676_66和67_E4都是非法的。 字母 E 作为数字的指数,同时适用于实型和整型。如 123_98E4、5.087E-5、 4.8E7都是合法的,但负指数不能用于整型,指数也一定要是整数。E 大小写皆可以。基型数字(Based Literal) 在大部分语言中,都使用 10 进制数字表示;Ada 里整数可以不用10进制的表示方法书写,而是直接使用 2至16进制的表示法,格式为:

29、Base # Number #,Base 表示所采用的进制,Number 为该进制下所表示的数字。2#1001_1001#,表示2进制数 1001 1001,中间的下划线可取消,其10进值为153;10#153#,表示10进制数153,等价与153;16#90#,表示16进制数90,其10进值为144;2.2.6 字符文字(Character Literal) 字符文字的表示是单个图形字符在单引号 中,如 a表示小写字母a, K表示大写字母K, 表示一个单引号, 表示一个空格。2.2.7 字符串文字(String Literal) 字符串是双引号( )之间的有序图形字符。如 What I sa

30、id.就是一个字符串。表示空字符串时直接用 。如果字符串中有双引号,一个双引号要用两个来表示。如 He said, I am hungry. ,而 He said, I am hungry. 或 He said, I am hungry. 是不合法的。至于其它字符,如$ %之类可以直接出现在两个双引号间。与 C 语言不同,Ada 里没有与之相同的转义字符,并且EOL不会算到字符串中。2.2.8 注释(Comment) 注释由两个连字号(hyphen)(-)开始,直到行尾。可以出现在程序的任一个地方,不影响程序本身。例如:- the comment;end;- processing of Lin

31、e is complete.2.2.9 Pragmas Pragma 是编译指示(compile directive),给编译器指令如优化程序,列表控制等。它的作用往往不只影响一个编译单元,而是整个程序。 Pragma 是些预先定义的指令,如 pragma Page,pragma List(OFF) ,编译器也可扩展 RM 95 中 pragma。我们先接触 List,Page,Optimize 这3个 pragma。更多内容我们会在以后接触。pragma List(identifier);pragma Page;pragma Optimize(identifier); pragma List 将 identifier On 或 Off 作为它的参数。它指定编译列表(listing of compilation) 是继续还是停止,直到在同一个编译单元内,一个pragma List 使用了相反的参数。 pragma Page 指定在 pragma 后的程序正文在新页开始(如果编译器正在列表) pragma Optimize 有 Time,Space 或 Off 3个参数,它的影响区域直到 pragama所在编译单元的底部。Time和 Space指示优化时间还是优化空间,Off则关闭优化。 下面是简单的例子: pragma

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1