军用 Ada 语言Word文档格式.docx
- 文档编号:20416704
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:118
- 大小:113KB
军用 Ada 语言Word文档格式.docx
《军用 Ada 语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《军用 Ada 语言Word文档格式.docx(118页珍藏版)》请在冰豆网上搜索。
这门语言被命名为Ada。
设计小组由JeanIchbiah领导,对语言全权负责。
在1983,Ada成为了一个ANSI标准ANSI/MIL-STD-1815A。
此年成为一个ISO标准。
在参考手册中定义的语言通常称为LRM或ARM(AdaReferenceManual)。
在Ada的相关书籍和编译器的报错信息中经常出现手册内容的引用。
对于任何Ada站点,参考手册都是推荐的;
虽然很难阅读,但它是所有Ada问题的最权威解释(一个小组正在澄清语言定义中已发现的语义不清的内容)。
Ada也经过了一次修正,即1995的新的ISO标准。
新标准修正了Ada83的很多缺陷,并进一步扩展了它的功能(在修正工作中,有个临时的标准,即Ada9x,不少Ada文章是在这段时间写的,因此有些内容在细节上可能与Ada95有所区别,但主要原理差不多)。
为了防止Ada编译器的不兼容版本的扩散,AdaJointProgramOffice(控制Ada语言的执行部门,于1998年10月1日关闭,见AdaJointProgramOfficeclosed)采取了不寻常的做法-他们注册Ada商标。
除非通过他们的兼容性测试,编译器厂商不允许出售'
Ada'
编译器。
这在不久以后放松了,保护协议变成了`ValidatedAda'
。
因而产生的Ada确认证书被限制在一定的时间内并有一个期满时间。
当时间过期后,该编译器不能再被标记为`ValidatedAda'
通过这种方式,AJPO确保当前市场上的编译器与当前标准相一致。
目标是使所有的Ada程序能在所有系统上被编译-在这点上,AJPO比其它语言小组做得好。
上述内容基本上是从QuickAda翻译过来的(以前翻译该教材“半途而废”的残留品,直接引用一下了),Ada语言的详细历史细节见TheHistoryofAda
1.3与C和C++的比较(Contrast:
AdaandC,C++)
由于Ada出生年月迟了一点,而且目前的操作系统基本上由C,C++写成,导致Ada在“平民层”的推广比较糟糕,至今还不是很流行,WhyAdaisn'
tPopular一文对此有比较详细的解释。
而Ada爱好者们为了显示Ada的优越性(这种心情相当能理解),将Ada与C,C++做了一系列比较,其结果反正综和指数都是Ada高,这方面文章有不少,如ComparingDevelopmentCostsofCandAda,Contrasts:
Ada95&
C++。
在这里,我们只初略地了解一下Ada的优势即可,在读者朋友接下去的学习中,应该是能从心里感受到Ada的优点。
更高的安全性、可靠性。
Ada中对于访问内存、数值计算等很多方面有一些严格的规定,而没有C和C++那么自由;
程序的错误绝大部份能在编译和运行时检测到,以至于可以不需要编译器,另外,语言也包含异常特性,能方便地处理错误。
更高的移植性。
在Unix和Windows下有C编程经验的朋友应该对于兼容性深有体会,很多代码纯粹是为了适应不同的系统增添的,对于实际工作没多大用处。
但Ada的初始语言环境中就有了异常(约等于Unix下的Signal)、任务(线程)、分布式计算、随机数产生、宽字符集很多特性的支持,而在现在的具体操作系统中,这些特性往往随系统而异。
即使Ada95里缺少一些功能,也可以通过额外标准和函数库来弥补:
GDI库,可以用GtkAda,在Windows和X下通用;
Ada也有一个Posix接口的标准,可以使用函数库Florist来调用Posix的函数……用户层是大大省力---只要自己的操作系统上有所需的编译器和函数库即可。
语法明确,基本上没有令人混淆的地方。
Ada程序的源代码远远比C或C++的代码易懂。
看程序的人是减轻了不少脑负担。
……
总之,C和C++能做的Ada肯定能做,但Ada要省时方便的多。
读者在学习Ada之后,无需多说也就明白了,笔者在初学Ada时就有耳目一新的感觉,唯一的遗憾是Ada不流行。
1.4网络资源(InternetResources)
Ada虽然在国内不流行,但在国外还是有不少网站,下面是只列举一小部份,至于更多的资源,读者可至VenusIC查找:
HomeoftheBraveAdaProgrammers(HBAP),即AdaHome,由MagnusKempe维护,里面包含了不少Ada相关的文档、软件
PublicAdaLibrary(PAL)。
PAL是Ada软件、文档的图书馆。
主站点在wuarchive.wustl.edu(WUARCHIVE),以及法国的一个映像站点mirrorsite,PAL目前由RichardConn维护。
AdaIC,由AJPO发起的一个站点,也包含了不少相关信息。
SIGAda,是ACM的一个SpecialInterestGroup。
AdaPower,很不错的一个站点,有相关教材、文档、Faq、Linux等链接。
AdaCoreTechnology,Gnat,Glade等软件的老家。
新闻组comp.lang.ada,不用多介绍了
1.5第一个程序(TheFirstProgram)
为了了解Ada程序的大致结构,举一个例子是难免的。
大部份书籍一般都是用"
helloworld"
程序来开始,我们下面就见识一个在终端屏幕上输出"
HelloWorld!
"
的简例。
000--filename:
hello.adb;
001withAda.Text_IO;
002procedureHellois003begin
004Ada.Text_IO.Put("
);
005Ada.Text_IO.New_Line;
006endHello;
先介绍一下在本教材中代码的一些问题:
每行代码前的000,001等数字表示该代码是第几行,只为了讲解方便,在实际源代码中是不存在的;
with,procedure等保留字(reservedword)都用粗体表示,以示区别;
有些字是用斜体表示,表示该字是用其它有效字符替换。
现在让我们分析上述的简单程序:
[000]标示该程序文件名为hello.adb,在程序中并不需要;
--是注释符,表示从其所在位置至行尾都是注释,对程序没有什么影响,与C的/**/类似。
[001]Ada.Text_IO是预定义的一个程序包(package);
withpackage_name和C的include功能差不多。
[002]-[006]是程序的主体部份。
与C下的main函数类似,Ada也需要一个主过程(mainprocedure),在这个例子中是过程Hello。
过程的用法和上例一样,都是
procedureprocedure_nameisstatements1;
beginstatements2;
endprocedure_name;
statement1可以是变量、常量、函数、过程等的声明;
statements2是过程procedure_name要执行的语句,对象的声明不能在这部份;
end后的procedure_name不是必需的,但为了程序的可读性,应加上。
[003],[004]分别输出"
和新行符。
Put和New_Line都是Ada.Text_IO里的过程。
但上7例调用过程Put和New_Line的方法比较罗嗦,因此我们也可以使用use语句:
useAda.Text_IO;
002procedureHellois
003begin
004Put("
005New_Line;
这样Ada编译器就能在程序包Ada.Text_IO中自动搜寻Put,New_Line,而无需用户指定它们所在的准确位置。
我们在将上例略微改动以下,以使读者了解一下声明部份:
hello.adb001withAda.Text_IO;
002procedureHellois003Str:
String:
="
;
004begin005Put(Str);
006New_Line;
007endHello;
在is和begin之间,声明了一个字符串变量Str,它的初始值为"
HelloWorld"
String是预定义的字符串类型。
上述的声明方式和Pascal差不多。
现在我们对Ada程序长的什么样已有了基本的认识,下面需要了解几个术语。
一个Ada程序是由一个或多个程序单元组成(programunit)。
一个程序单元可以为:
子程序(subprogram),定义一些可执行运算。
过程(procedure)和函数(function)都是子程序。
程序包(package),定义一些实体(entity)。
程序包是Ada中的主要分组机制,类似于C的函数库,Modula的"
module"
任务单元(taskunit),与线程类似,定义一些计算,然后并发执行。
保护单元(protectedunit),在并发计算中协调数据共享,这在Ada83中不存在。
类属单元(genericunit),帮助构建可重用组建,和C++的模板类似。
后3类属于高级话题,在后面的章节中我们会依次介绍。
程序单元又可为两部份:
声明部份(declaration)。
定义对其它程序的接口,有些可用资源可以被用户使用,与C下的'
.h'
文件相似。
主体部份(body)。
是声明部份的具体实现,等价与C的'
.c'
文件。
其中程序包(package)和子程序(subprogram)是用的最广泛的2个程序单元。
大部份Ada程序基于一堆程序包,在以一个主过程(mainproceudre)来开始Ada程序。
第2章基本数据类型和表达式(BasicTypesandExpressions)
2.1概述(Overview)
数据类型是一门计算机语言最基本的特性,表示一个对象的类型,是数字、字符或其它类型。
由于Ada在数据类型上提供的强大处理能力,我们又不能很简单地认为数据类型仅是定义一个对象的类型。
在Ada里,数据类型可以自己创建,它的相关运算符也可以自己定义,同时又有数据类型属性这项特性,具有相当大的灵活性。
学过其它的语言,特别是有C和Pascal背景的朋友初次接触时可能会感到有点新鲜。
创建新类型,是用户自己定义数据类型,包括该类型的名称、取值范围及相关操作;
其中又包括了派生类型和创建子类型,即以现有数据类型为母类型创建新类型,继承母类型的一部份属性。
数据类型属性,如同我们玩RPG游戏时的人物属性:
体力值、魔法值一样,是说明该类型固有的属性,包括最小取值范围、最大取值范围等等。
本章将会先介绍词法元素以及创建数据类型的基础性知识,然后是整型(integer)、实型(real)、字符型(character)、布尔型(boolean)、枚举类型(enumuration)这几种标量类型,最后则是相关的数据类型属性、类型限制和类型转换、表达式和运算符。
2.2词法元素(LexicalElement)
Ada里的词法元素与其它语言的定义还是有不小差别,下面按照RM95关于词法元素的分类来逐项介绍,包括标识符、保留字、字符、数值文字等及它们的一些规则。
2.2.1基本字符集(CharacterSet)
Ada95规定的标准字符集是Latin-1,支持8位(基于ISO-8869)和16位(基于ISO-10646)字符,在非标准模式下也可用本地字符集,具体情况取决于当前的系统。
(一般来说,涉及字符时默认是指Latin-1,程序几乎都是用Latin-1字符集写的)
字符在RM95中是分成了三类:
图形字符(graphiccharacter)、格式控制符(formateffector)、其它控制符(othercontrolfunction),它们所表示的范围为:
图形字符包括字母(letter)、数字(digit)、空格符(space)、特殊字符(specialcharacter)(例如"
#&
'
()*+,-./:
;
<
=>
_|{}[]);
格式控制符包括水平制表符(HT)、垂直制表符(VT)、回车(CR)、换行(LF)、换页(FF);
其它控制符则是除了格式控制符以外的控制符。
更详细的内容参见RM95、ISO8869,ISO10646。
Ada是大小写忽略的(除了字符和字符串中的实际内容,如字符'
z'
和'
Z'
不相同,但标识符z和Z相同),但为了可读性,一般来说变量名或函数名首字母都会大写,其余小写,缩近格式也需要引起注意。
根据实际情况尽量保证可读性。
为了兼容性,Ada95要求编译器最少支持一行字符串和一个词法元素的长度为200个字符(不包括行尾符)。
Ada在字符集上并没有很严格要求编译器一定要怎样,但应该支持标准字符集。
2.2.2标识符(Identifier)
Ada中不管是变量、函数还是其它对象都需要一个名称,这就叫做标识符。
如X、Count、me就是简单的标识符。
Ada中的标识符有以下一些注意点:
1.标识符一定要是字母开头,接下去可以是数字和下划线,结尾不能为下划线。
如Fig_、_Lik、1me是不合法的。
2.两个连续的下划线不能在一起,因为有些打印机可能会将两个下划线当作一个处理。
3.虽然单个字符可作为标识符,但一般情况下不应该滥用这项特性(我不知道这除了少敲几个字外,还有什么意义,想想数字0和字母O、数字1和字母l吧,绝对害死人的做法)。
4.不能将保留字作为标识符。
在Ada83中,标识符包括了保留字,但在Ada95中保留字从标识符中分离了出来。
5..如上节所提及的,标识符是不分大小写的,但为了可读性,请注意你对标识符的命名。
2.2.3保留字(ReservedWord)
保留字在程序语法中有特殊的含义,不属于标识符范围,这与C和Pascal等语言的定义有所不同。
Ada95中的保留字如下:
abortabsabstractacceptaccessaliasedallandarrayatbeginbody
caseconstantdeclaredelaydeltadigitsdoelseelsifendentryexceptionexit
forfunctiongenericgotoifinislimitedloopmodnewnotnulloforothersout
packagepragmaprivateprocedureprotectedraiserangerecordremrenamesrequeue
returnreverseselectseparatesubtypetaggedtaskterminatethentype
untilusewhenwhilewithxor
在以后的内容中,我们会逐个解释它们的含义及作用。
Ada95的保留字比原先添加了6个:
abstract,aliased,protected,requeue,tagged和until,虽然这可能会牵连到兼容性问题,但通常也无须计较这点。
2.2.4分隔符(SeparatorandDelimiter)
Ada程序中,各元素之间需要空格符、格式控制符或EOF隔开。
RM95里将它们作为separator,而delimiter则是指下列特殊字符(中文有点说不清楚):
&
()*+,-./:
"
|或是复合型的:
=>
..**:
=/=>
=<
<
>
>
当分隔符作为注释、字符串、字符、数值的一部分时,就不再是分隔符了。
2.2.5数值文字(NumericLiteral)
数值文字就是指数字。
Ada和Pascal相同,将数字分为实数型(realliteral)和整数型(integerliteral)两大类。
实数型是有小数点的数字,整数型则无小数点。
如1.2787,0.871,7.0是实数型,而-882,5441,1是整数型。
Ada在数字表示上有一个很好的特性就是可以明确指定使用何种基数(2进制到16进制)表示,下面是数字的表示:
十进制数(DecimalLiteral)
不管是实型还是整型数,都可以在其间加上下划线,使长数字更加易读。
如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大小写皆可以。
基型数字(BasedLiteral)
在大部分语言中,都使用10进制数字表示;
Ada里整数可以不用10进制的表示方法书写,而是直接使用2至16进制的表示法,格式为:
Base#Number#,Base表示所采用的进制,Number为该进制下所表示的数字。
2#1001_1001#,表示2进制数10011001,中间的下划线可取消,其10进值为153;
10#153#,表示10进制数153,等价与153;
16#90#,表示16进制数90,其10进值为144;
2.2.6字符文字(CharacterLiteral)
字符文字的表示是单个图形字符在单引号‘’中,如'
a'
表示小写字母a,'
K'
表示大写字母K,'
表示一个单引号,'
表示一个空格。
2.2.7字符串文字(StringLiteral)
字符串是双引号("
)之间的有序图形字符。
如"
WhatIsaid."
就是一个字符串。
表示空字符串时直接用"
如果字符串中有双引号,一个双引号要用两个"
来表示。
Hesaid,"
Iamhungry."
,而"
Iamhungry."
或"
是不合法的。
至于其它字符,如$%之类可以直接出现在两个双引号间。
与C语言不同,Ada里没有与之相同的转义字符,并且EOL不会算到字符串中。
2.2.8注释(Comment)
注释由两个连字号(hyphen)(--)开始,直到行尾。
可以出现在程序的任一个地方,不影响程序本身。
例如:
--thecomment;
end;
--processingofLineiscomplete.
2.2.9Pragmas
Pragma是编译指示(compiledirective),给编译器指令如优化程序,列表控制等。
它的作用往往不只影响一个编译单元,而是整个程序。
Pragma是些预先定义的指令,如pragmaPage,pragmaList(OFF),编译器也可扩展RM95中pragma。
我们先接触List,Page,Optimize这3个pragma。
更多内容我们会在以后接触。
pragmaList(identifier);
pragmaPage;
pragmaOptimize(identifier);
pragmaList将identifierOn或Off作为它的参数。
它指定编译列表(listingofcompilation)是继续还是停止,直到在同一个编译单元内,一个pragmaList使用了相反的参数。
pragmaPage指定在pragma后的程序正文在新页开始(如果编译器正在列表)
pragmaOptimize有Time,Space或Off3个参数,它的影响区域直到pragama 所在编译单元的底部。
Time 和Space 指示优化时间还是优化空间,Off则关闭优化。
下面是简单的例子:
pragma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 军用 Ada 语言