ADA語言基礎(chǔ)教程1_第1頁
ADA語言基礎(chǔ)教程1_第2頁
ADA語言基礎(chǔ)教程1_第3頁
ADA語言基礎(chǔ)教程1_第4頁
ADA語言基礎(chǔ)教程1_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ADA語言基礎(chǔ)教程(美國軍方的專用計(jì)算機(jī)

語言?。?/p>

發(fā)表于:個(gè)人日記,科技資訊,編程開發(fā)?作者:謀萬世全局者

標(biāo)簽:ADA,軍方,基礎(chǔ)教程,美國,計(jì)算機(jī)語言,語言

PS:前天晚上應(yīng)朋友之邀,過去喝茶聊天。其中有一位美籍臺(tái)灣人。原來他還是

IT界的老前輩,家住硅谷。2。多年前就在一家跨國大公司從事數(shù)據(jù)庫管理,我們

聊了很多。他說他以前做工程師時(shí)用的是Ada語言,我以前真沒怎么聽說過還有

這種語言,回來查了一下,Ada語言原來是美國軍方的專用計(jì)算機(jī)語言!據(jù)說中

國軍方目前也在使用!Ada是一種表現(xiàn)能力很強(qiáng)的通用程序設(shè)計(jì)語言,它是美國

國防部為克服軟件開發(fā)危機(jī),耗費(fèi)巨資,歷時(shí)近20年研制成功的。它被譽(yù)為第四

代計(jì)算機(jī)語言的成功代表。目前應(yīng)用廣泛度排16名。

a

Ada語言的中文資料極度缺乏,當(dāng)當(dāng)網(wǎng)里居然一本都沒有。找到了一本80年底

翻譯的ada語言基礎(chǔ)。下面這篇ADA語言文檔還不錯(cuò),有興趣的同學(xué)可以了解

一下,看了一下語法,跟C語言很像,應(yīng)該屬于C的高級(jí)改進(jìn)版。

第1章Ada簡介

1.1概述(Overview)

Ada語言最初設(shè)計(jì)是為了構(gòu)建長周期的、高度可靠的軟件系統(tǒng)。它提供了一系列功

能來定義相關(guān)的數(shù)據(jù)類型(type)、對(duì)象(object)和操作(operation)的程序包

(package)o程序包可以被參數(shù)化,數(shù)據(jù)類型可以被擴(kuò)展以支持可重用庫的構(gòu)建。

操作既可以使用方便的順序控制結(jié)構(gòu),通過子程序(subprogram)來實(shí)現(xiàn),也可以

通過包含并發(fā)線程同步控制的入口(entry)來實(shí)現(xiàn)。Ada也支持單獨(dú)編譯(separate

compilation),在物理層上支持模塊性。

Ada包含了很復(fù)雜的功能以支持實(shí)時(shí)(real-time),并發(fā)程序設(shè)計(jì)(concurrent

programming)?錯(cuò)誤可以作為異常(exception)來標(biāo)示,并可以被明確地處理。

Ada也覆蓋了系統(tǒng)編程(systemprogramming);這需要對(duì)數(shù)據(jù)表示和系統(tǒng)特性訪

問的精確控制。最后,提供了預(yù)定義的標(biāo)準(zhǔn)程序包,包括輸入輸出、字符串處理、

數(shù)值計(jì)算的基本函數(shù)和隨機(jī)數(shù)生成。

譯自《AdaReferenceManual》Sectioni:General

在本章里,我們將會(huì)初步介紹一下Ada,以給讀者留下大致的印象。

1.2Ada的歷史(TheHistoryofAda)

為了更好的理解Ada,它的歷史有必要簡要地了解一下。

1974年時(shí):美國國防部(DoD)意識(shí)到開發(fā)和維護(hù)嵌入式系統(tǒng)(固化在硬件中的系

統(tǒng),如導(dǎo)彈彈導(dǎo)系統(tǒng))耗費(fèi)了過多的時(shí)間,精力和資金。

當(dāng)時(shí).,在使用的計(jì)算機(jī)語言有45。多種,這增加了開發(fā)新系統(tǒng)以及培訓(xùn)程序員使

熟悉現(xiàn)有系統(tǒng)的時(shí)間和成本。維護(hù)工作也由于沒有標(biāo)準(zhǔn)化的工具(編輯器,編譯器

等)而受阻。所有這些因素使DoD意識(shí)到它需要-們強(qiáng)大的語言,能被所有嵌入

式電腦供應(yīng)商使用。

開發(fā)工作始于1975年,當(dāng)時(shí)DoD列舉了一系列的語言需求;但沒有一門現(xiàn)有語言

指定了這些特性,因此在1977年,DoD起草了一份建議,開發(fā)一門新的語言。不

像COBOL這些語言由專門的委員會(huì)制定,新語言是一場(chǎng)競爭的主題,在產(chǎn)業(yè)界和

學(xué)術(shù)界的評(píng)估中產(chǎn)生。

在眾多競爭者當(dāng)中,有4家被選中以完成進(jìn)一步的工作。最終只剩下Cii-

HoneywellBull公司。這門語言被命名為Ada。設(shè)計(jì)小組由JeanIchbiah領(lǐng)導(dǎo),

對(duì)語言全權(quán)負(fù)責(zé)。

在1983,Ada成為了一個(gè)ANSI標(biāo)準(zhǔn)ANSI/MIL-STD-1815A。此年成為一個(gè)ISO

標(biāo)準(zhǔn)。在參考手冊(cè)中定義的語言通常稱為LRM或ARM(AdaReferenceManual)?

在Ada的相關(guān)書籍和編譯器的報(bào)錯(cuò)信息中經(jīng)常出現(xiàn)手冊(cè)內(nèi)容的引用。對(duì)于任何

Ada站點(diǎn),參考手冊(cè)都是推薦的;雖然很難閱讀,但它是所有Ada問題的最權(quán)威

解釋(一個(gè)小組正在澄清語言定義中已發(fā)現(xiàn)的語義不清的內(nèi)容)。

Ada也經(jīng)過了一次修正,即1995的新的ISO標(biāo)準(zhǔn)。新標(biāo)準(zhǔn)修正了Ada83的很多

缺陷,并進(jìn)一步擴(kuò)展了它的功能(在修正工作中,有個(gè)臨時(shí)的標(biāo)準(zhǔn),即Adagx,不

少Ada文章是在這段時(shí)間寫的,因此有些內(nèi)容在細(xì)節(jié)上可能與Ada95有所區(qū)別,

但主要原理差不多)。

為了防止Ada編譯器的不兼容版本的擴(kuò)散,AdaJointProgramOffice(控制Ada

語言的執(zhí)行部門,于1998年10月1日關(guān)閉,見AdaJointProgramOffice

closed)采取了不尋常的做法-他們注冊(cè)Ada商標(biāo)。除非通過他們的兼容性測(cè)

試,編譯器廠商不允許出售‘Ada'編譯器。這在不久以后放松了,保護(hù)協(xié)議變成了

'ValidatedAda'。因而產(chǎn)生的Ada確認(rèn)證書被限制在一定的時(shí)間內(nèi)并有一個(gè)期滿

時(shí)間。當(dāng)時(shí)間過期后,該編譯器不能再被標(biāo)記為'ValidatedAda'編譯器。通過這

種方式,AJPO確保當(dāng)前市場(chǎng)上的編譯器與當(dāng)前標(biāo)準(zhǔn)相一致。

目標(biāo)是使所有的Ada程序能在所有系統(tǒng)上被編譯-在這點(diǎn)上,AJPO比其它語言小

組做得好。

上一述內(nèi)容基本上是從QuickAda翻譯過來的(以前翻譯該教材“半途而廢”的殘留

品,直接引用一下了),Ada語言的詳細(xì)歷史細(xì)節(jié)見TheHistoryofAda

1.3與C和C++的比較(Contrast:AdaandC,C++)

由于Ada出生年月遲了一點(diǎn),而且目前的操作系統(tǒng)基本上由C,C++寫成,導(dǎo)致

Ada在"平民層”的推廣比較糟糕,至今還不是很流行,WhyAdaisn'tPopular-

對(duì)此有比較詳細(xì)的解釋。而Ada愛好者們?yōu)榱孙@示Ada的優(yōu)越性(這種心情相當(dāng)

能理解),將Ada與C,C++做了一系列比較,其結(jié)果反正綜和指數(shù)都是Ada

高,這方面文章有不少,ComparingDevelopmentCostsofCandAda,

Contrasts:Ada95&C++。在這里,我們只初略地了解一下Ada的優(yōu)勢(shì)即可,在

讀者朋友接下去的學(xué)習(xí)中,應(yīng)該是能從心里感受到Ada的優(yōu)點(diǎn)。

1.更高的安全性、可靠性。Ada中對(duì)于訪問內(nèi)存、數(shù)值計(jì)算等很多方面有一

些嚴(yán)格的規(guī)定,而沒有C和C++那么自由;程序的錯(cuò)誤絕大部份能在編譯和

運(yùn)行時(shí)檢測(cè)到,以至于可以不需要編譯器,另外,語言也包含異常特性,能方

便地處理錯(cuò)誤。

2.更高的移植性。在Unix和Windows下有C編程經(jīng)驗(yàn)的朋友應(yīng)該對(duì)于兼容

性深有體會(huì),很多代碼純粹是為了適應(yīng)不同的系統(tǒng)增添的,對(duì)于實(shí)際工作沒多

大用處。但Ada的初始語言環(huán)境中就有了異常(約等于Unix下的Signal)、

任務(wù)(線程)、分布式計(jì)算、隨機(jī)數(shù)產(chǎn)生、寬字符集很多特性的支持,而在現(xiàn)

在的具體操作系統(tǒng)中,這些特性往往隨系統(tǒng)而異。即使Ada95里缺少一些功

能,也可以通過額外標(biāo)準(zhǔn)和函數(shù)庫來彌補(bǔ):GDI庫,可以用GtkAda,

在Windows和X下通用;Ada也有一個(gè)Posix接口的標(biāo)準(zhǔn),可以使用函數(shù)

庫Florist來調(diào)用Posix的函數(shù)用戶層是大大省力一只要自己的操作系統(tǒng)上

有所需的編譯器和函數(shù)庫即可。

3.語法明確,基本上沒有令人混淆的地方。Ada程序的源代碼遠(yuǎn)遠(yuǎn)

比C或C++的代碼易懂??闯绦虻娜耸菧p輕了不少腦負(fù)擔(dān)。

總之,C和C++能做的Ada肯定能做,但Ada要省時(shí)方便的多。讀者在學(xué)習(xí)Ada

之后,無需多說也就明白了,筆者在初學(xué)Ada時(shí)就有耳目一新的感覺,唯一的遺

憾是Ada不流行。

1.4網(wǎng)絡(luò)資源(InternetResources)

Ada雖然在國內(nèi)不流行,但在國外還是有不少網(wǎng)站,下面是只列舉一小部份,至于

更多的資源,讀者可至VenusIC查找:

1.HomeoftheBraveAdaProgrammers(HBAP),B|JAdaHome,

由MagnusKempe維護(hù),里面包含了不少Ada相關(guān)的文檔、軟件

2.PublicAdaLibrary(PAL)?PAL是Ada軟件、文檔的圖書館。主站點(diǎn)在

(WUARCHIVE),以及法國的一個(gè)映像站點(diǎn)mirrorsite,

PAL目前由RichardConn維護(hù)。

3.AdalC,由AJPO發(fā)起的一個(gè)站點(diǎn),也包含了不少相關(guān)信息。

41SIGAda,是ACM的一個(gè)SpecialInterestGroup<>

5.AdaPower,很不錯(cuò)的一個(gè)站點(diǎn),有相關(guān)教材、文檔、Faq、Linux等鏈

接。

6.AdaCoreTechnology,Gnat,Glade等軟件的老家。

7.新聞組comp.lang.ada,不用多介紹了

1.5第一個(gè)程序(TheFirstProgram)

為了了解Ada程序的大致結(jié)構(gòu),舉一個(gè)例子是難免的。大部份書籍一般都是

用"helloworld”程序來開始,我們下面就見識(shí)一個(gè)在終端屏幕上輸出“Hello

World!”的簡例。

000—filename:hello,adb;

001withAda.Text_I0;

002procedureHellois

003begin

004Ada.Text_I0.Put("HelloWorld!”);

005Ada.Text_I0.NewLine;

006endHello;

先介紹一下在本教材中代碼的一些問題:每行代碼前的000,001等數(shù)字表示該代

碼是第幾行,只為了講解方便,在實(shí)際源代碼中是不存在的;with,procedure等

保留字(reservedword)都用粗體表示,以示區(qū)別;有些字是用斜體表示,表示該字

是用其它有效字符替換。

現(xiàn)在讓我們分析上述的簡單程序:

[ooo]標(biāo)示該程序文件名為hello.adb,在程序中并不需要;-是注釋符,表示從其

所在位置至行尾都是注釋,對(duì)程序沒有什么影響,與C的/**/類似。

[ooi]Ada.Text」O是預(yù)定義的一個(gè)程序包(package);withpackage_name和

C的include功能差不多。

[oo2]-[oo6]是程序的主體部份。與C下的main函數(shù)類似,Ada也需要一個(gè)主過

程(mainprocedure),在這個(gè)例子中是過程Hello。過程的用法和上例一樣,都是

procedureprocedure_nameis

statementsl;

begin

statements2;

endprocedure_name;

statemen11可以是變量、常量、函數(shù)、過程等的聲明;statements2是過程

procedure_name要執(zhí)行的語句,對(duì)象的聲明不能在這部份;end后

的procedure_name不是必需的,但為了程序的可讀性,應(yīng)加上。

[003],[004]分別輸出"HelloWorld!"和新行符。Put和New_Line都是

Ada.Text_IO里的過程。

但上7例調(diào)用過程Put和New_Line的方法比較羅嗦,因此我們也可以使用use

語句:

ooo—filename:hello.adb;

001withAda.Text_IO;useAda.Text_IO;

002procedureHellois

003begin

004Put("HelloWorld!J,);

005New_Line;

006endHello;

這樣Ada編譯器就能在程序包Ada.Text_IO中自動(dòng)搜尋Put,New_Line,而無需

用戶指定它們所在的準(zhǔn)確位置。

我們?cè)趯⑸侠晕⒏膭?dòng)以下,以使讀者了解一下聲明部份:

000--filename:hello,adb

001withAda.Text_IO;useAda.Text_IO;

002procedureHellois

003Str:String:="HelloWorld!”;

004begin

005Put(Str);

006New_Line;

007endHello;

在is和begin之間,聲明了一個(gè)字符串變量Str,它的初始值為“HelloWorld”。

String是預(yù)定義的字符串類型。上述的聲明方式和Pascal差不多?,F(xiàn)在我們對(duì)

Ada程序長的什么樣已有了基本的認(rèn)識(shí),下面需要了解兒個(gè)術(shù)語。一個(gè)Ada程序

是由一個(gè)或多個(gè)程序單元組成(programunit)。一個(gè)程序單元可以為:

1.子程序(subprogram),定義一些可執(zhí)行運(yùn)算。過程(procedure)和函數(shù)

(function)都是子程序。

2.程序包(package),定義一些實(shí)體(entity)o程序包是Ada中的主要分組

機(jī)制,類似于C的函數(shù)庫,Modula的"module”。

3.任務(wù)單元(taskunit),與線程類似,定義一些計(jì)算,然后并發(fā)執(zhí)行。

4-保護(hù)單元(protectedunit),在并發(fā)計(jì)算中協(xié)調(diào)數(shù)據(jù)共享,這在Ada83中

不存在。

5.類屬單元(genericunit),幫助構(gòu)建可重用組建,和C++的模板類似。

后3類屬于高級(jí)話題,在后面的章節(jié)中我們會(huì)依次介紹。程序單元又可為兩部份:

1.聲明部份(declaration)。定義對(duì)其它程序的接口,有些可用資源可以被用戶

使用,與C下的'.h’文件相似。

2.主體部份(body)。是聲明部份的具體實(shí)現(xiàn),等價(jià)與C的'.c'文件。

其中程序包(package)和子程序(subprogram)是用的最廣泛的2個(gè)程序單元。大

部份Ada程序基于一堆程序包,在以一個(gè)主過程(mainproceudre)來開始Ada程

序。第2章基本數(shù)據(jù)類型和表達(dá)式(BasicTypesandExpressions)2.1概述

(Overview)數(shù)據(jù)類型是一門計(jì)算機(jī)語言最基本的特性,表示一個(gè)對(duì)象的類型,是

數(shù)字、字符或其它類型。由于Ada在數(shù)據(jù)類型上提供的強(qiáng)大處理能力,我們又不

能很簡單地認(rèn)為數(shù)據(jù)類型僅是定義一個(gè)對(duì)象的類型。在Ada里,數(shù)據(jù)類型可以自

己創(chuàng)建,它的相關(guān)運(yùn)算符也可以自己定義,同時(shí)又有數(shù)據(jù)類型屬性這項(xiàng)特性,具有

相當(dāng)大的靈活性。學(xué)過其它的語言,特別是有C和Pascal背景的朋友初次接觸時(shí)

可能會(huì)感到有點(diǎn)新鮮。創(chuàng)建新類型,是用戶自己定義數(shù)據(jù)類型,包括該類型的名

稱、取值范圍及相關(guān)操作;其中又包括了派生類型和創(chuàng)建子類型,即以現(xiàn)有數(shù)據(jù)類

型為母類型創(chuàng)建新類型,繼承母類型的一部份屬性。數(shù)據(jù)類型屬性,如同我們玩

RPG游戲時(shí)的人物屬性:體力值、魔法值一樣,是說明該類型固有的屬性,包括

最小取值范圍、最大取值范圍等等。本章將會(huì)先介紹詞法元素以及創(chuàng)建數(shù)據(jù)類型

的基礎(chǔ)性知識(shí),然后是整型(integer)、實(shí)型(real)、字符型(character)、布爾型

(boolean)、枚舉類型(enumuration)這幾種標(biāo)量類型,最后則是相關(guān)的數(shù)據(jù)類型

屬性、類型限制和類型轉(zhuǎn)換、表達(dá)式和運(yùn)算符。2.2詞法元素(LexicalElement)

Ada里的詞法元素與其它語言的定義還是有不小差別,下面按照RM95關(guān)于詞法

元素的分類來逐項(xiàng)介紹,包括標(biāo)識(shí)符、保留字、字符:、數(shù)值文字等及它們的一些規(guī)

則。2.2.1基本字符集(CharacterSet)Ada95規(guī)定的標(biāo)準(zhǔn)字符集是Latin-1,支持

8位(基于ISO-8869)和16位(基于ISO-10646)字符,在非標(biāo)準(zhǔn)模式下也可用本地

字符集,具體情況取決于當(dāng)前的系統(tǒng)。(一般來說,涉及字符時(shí)默認(rèn)是指Latin-1,

程序幾乎都是用Latin-1字符集寫的)字符在RM95中是分成了三類:圖形字符

(graphiccharacter)、格式控制符(formateffector)、其它控制符(othercontrol

function),它們所表示的范圍為:圖形字符包括字母(letter)、數(shù)字(digit)、空格符

(space)>特殊字符(specialcharacter)(例如"#&*()*+,-./:;<=>_|{}[]);

格式控制符包括水平制表符(HT)、垂直制表符(VT)、回車(CR)、換行(LF)、換頁

(FF);其它控制符則是除了格式控制符以外的控制符。更詳細(xì)的內(nèi)容參見RM95、

ISO8869,ISO106460Ada是大小寫忽略的(除了字符和字符串中的實(shí)際內(nèi)容,

如字符'z'和'Z'不相同,但標(biāo)識(shí)符z和Z相同),但為了可讀性,一般來說變量名或

函數(shù)名首字母都會(huì)大寫,其余小寫,縮近格式也需要引起注意。根據(jù)實(shí)際情況盡量

保證可讀性。為了兼容性,Ada95要求編譯器最少支持一行字符串和一個(gè)詞法元

素的長度為200個(gè)字符(不包括行尾符)。Ada在字符集上并沒有很嚴(yán)格要求編

譯器一定要怎樣,但應(yīng)該支持標(biāo)準(zhǔn)字符集。2.2.2標(biāo)識(shí)符(Identifier)Ada中不

管是變量、函數(shù)還是其它對(duì)象都需要一個(gè)名稱,這就叫做標(biāo)識(shí)符:。如X、Count.

me就是簡單的標(biāo)識(shí)符。Ada中的標(biāo)識(shí)符有以下一些注意點(diǎn):1.標(biāo)識(shí)符一定要是字

母開頭,接下去可以是數(shù)字和下劃線,結(jié)尾不能為下劃線。如Fig_、_Lik,ime

是不合法的。2.兩個(gè)連續(xù)的下劃線不能在一起,因?yàn)橛行┐蛴C(jī)可能會(huì)將兩個(gè)下

劃線當(dāng)作一個(gè)處理。3.雖然單個(gè)字符可作為標(biāo)識(shí)符,但一般情況下不應(yīng)該濫用這

項(xiàng)特性(我不知道這除了少敲幾個(gè)字外,還有什么意義,想想數(shù)字o和字母0、數(shù)

字1和字母1吧,絕對(duì)害死人的做法)。4.不能將保留字作為標(biāo)識(shí)符。在Ada

83中,標(biāo)識(shí)符包括了保留字,但在Ada95中保留字從標(biāo)識(shí)符中分離了出來。5--

如上節(jié)所提及的,標(biāo)識(shí)符是不分大小寫的,但為了可讀性,請(qǐng)注意你對(duì)標(biāo)識(shí)符的命

名。2.2.3保留字(ReservedWord)保留字在程序語法中有特殊的含義,不屬

于標(biāo)識(shí)符范圍,這與C和Pascal等語言的定義有所不同。Ada95中的保留字如

F:abortabsabstractacceptaccessaliasedallandarrayatbegin

bodycaseconstantdeclaredelaydeltadigitsdoelseelsifendentry

exceptionexitforfunctiongenericgotoifinislimitedloopmodnew

notnulloforothersoutpackagepragmaprivateprocedureprotected

raiserangerecordremrenamesrequeuereturnreverseselect

separatesubtypetaggedtaskterminatethentypeuntilusewhenwhile

withxor在以后的內(nèi)容中,我們會(huì)逐個(gè)解釋它們的含義及作用。Ada95的保留字

比原先添力。了6個(gè):abstract,aliased,protected,requeue,tagged

和until,雖然這可能會(huì)牽連到兼容性問題,但通常也無須計(jì)較這點(diǎn)。2.2.4分隔

符(SeparatorandDelimiter)Ada程序中,各元素之間需要空格符、格式控制

符或EOF隔開。RM95里將它們作為separator,而delimiter則是指下列特殊字符

(中文有點(diǎn)說不清楚):|或是復(fù)合型的:=〉..**:=/=>=

<=??<>o當(dāng)分隔符作為注釋、字符串、字符、數(shù)值的一部分時(shí),就不再是分

隔符了。2.2.5數(shù)值文字(NumericLiteral)數(shù)值文字就是指數(shù)字。Ada和

Pascal相同,將數(shù)字分為實(shí)數(shù)型(realliteral)和整數(shù)型(integerliteral)兩大類。實(shí)數(shù)

型是有小數(shù)點(diǎn)的數(shù)字,整數(shù)型則無小數(shù)點(diǎn)。如1.2787,0.871,7.0是實(shí)數(shù)型,而-

882,5443是整數(shù)型。Ada在數(shù)字表示上有一個(gè)很好的特性就是可以明確指定使用

何種基數(shù)(2進(jìn)制到16進(jìn)制)表示,下面是數(shù)字的表示:十進(jìn)制數(shù)(Decimal

Literal)不管是實(shí)型還是整型數(shù),都可以在其間加上下劃線,使長數(shù)字更加易

讀。如56886515645125615,可寫為56_886_515_645_125_615或

5一6886一536一4512—5615,下劃線并不改變數(shù)字的值。但兩個(gè)下劃線不能是連續(xù)

的,卜劃線也不可以在數(shù)字首部和尾部,如676_66和67.E4都是非法的。字母

E作為數(shù)字的指數(shù),同時(shí)適用于實(shí)型和整型。如123_98E4、5Q87E-5、48E7都

是合法的,但負(fù)指數(shù)不能用于整型,指數(shù)也一定要是整數(shù)。E大小寫皆可以?;?/p>

型數(shù)字(BasedLiteral)在大部分語言中,都使用10進(jìn)制數(shù)字表示;Ada里整數(shù)

可以不用10進(jìn)制的表示方法書寫,而是直接使用2至16進(jìn)制的表示法,格式

為:Base#Number#,Base表示所采用的進(jìn)制,Number為該進(jìn)制下所表示的

數(shù)字。2#1001_1001#,表示2進(jìn)制數(shù)10011001,中間的下劃線可取消,其10進(jìn)值

為153;10#153#,表示10進(jìn)制數(shù)153,等價(jià)與153;16#9。#,表示16進(jìn)制數(shù)9。,

其10進(jìn)值為144;2.2.6字符文字(CharacterLiteral)字符文字的表示是單個(gè)

圖形字符在單引號(hào)'‘中,如'a'表示小寫字母a,'K'表示大寫字母K;1'表示一個(gè)單引

號(hào),''表示一個(gè)空格。2.2.7字符串文字(StringLiteral)字符串是雙引號(hào)(”")之

間的有序圖形字符。如"WhatIsaid."就是一個(gè)字符串。表示空字符串時(shí)直接用”

“。如果字符串中有雙引號(hào),一個(gè)雙引號(hào)要用兩個(gè)”來表示。如"Hesaid,”"1am

hungry.,,n而"Hesaid,""Iamhungry."或"Hesaid/'Iamhungry.""是不合法

的。至于其它字符,如$%之類可以直接出現(xiàn)在兩個(gè)雙引號(hào)間。與C語言不同,

Ada里沒有與之相同的轉(zhuǎn)義字符,并且E0L不會(huì)算到字符串中。2.2.8注釋

(Comment)注釋由兩個(gè)連字號(hào)(hyphen)(-)開始,直到行尾??梢猿霈F(xiàn)在程序的

任一個(gè)地方,不影響程序本身。例如:—thecomment;end;-processingofLine

iscomplete.2.2.9PragmasPragma是編譯指示(compiledirective),給編譯器指

令如優(yōu)化程序,列表控制等。它的作用往往不只影響一個(gè)編譯單元,而是整個(gè)程

序。Pragma是些預(yù)先定義的指令,如pragmaPage,pragmaList(OFF),編譯器也

可擴(kuò)展RM95中pragmao我們先接觸List,Page,Optimize這3個(gè)pragma?更

多內(nèi)容我們會(huì)在以后接觸。pragmaList(identifier);pragmaPage;pragma

Optimize(identifier);pragmaList將identifierOn或Off作為它的參數(shù)。它指定

編譯列表(listingofcompilation)是繼續(xù)還是停止,直到在同一個(gè)編譯單元內(nèi),一

個(gè)pragmaList使用了相反的參數(shù)。pragmaPage指定在pragma后的程序正文

在新頁開始(如果編譯器正在列表)pragmaOptimize有Time,Space或0仟3

個(gè)參數(shù),它的影響區(qū)域直到pragama所在編譯單元的底部。Time和Space指

示優(yōu)化時(shí)間還是優(yōu)化空間,0任則關(guān)閉優(yōu)化。下面是簡單的例子:pragma

List(Off);關(guān)閉列表生成pragmaOptimize(Off);關(guān)閉可選的優(yōu)化

不過,上述3個(gè)pragma是影響編譯過程用的,基本上用戶也用不著,以后涉

及的inline,Pure等pragma使用頻率倒挺高2.3創(chuàng)建數(shù)據(jù)類型和子類型

(CreatingTypesandSubtypes)使用變量時(shí),除了以某標(biāo)識(shí)符作為變量的名稱

外,還要指定該變量的數(shù)據(jù)類型。一個(gè)數(shù)據(jù)類型定義了變量可接受的值以及所能執(zhí)

行的操作。比如說,一個(gè)數(shù)據(jù)類型為Age的變量Bill,Age的取值范圍為1..100,并

只有+-這兩種操作,在這里,對(duì)象(object)為名為Bill的變量,它的取值在1..100

之間(包括1,100),值的變化只能通過+-這些基本運(yùn)算符(primitiveoperation)

來實(shí)現(xiàn),而無法通過*/等其它運(yùn)算符。Ada中的數(shù)據(jù)類型,包括預(yù)定義類型,都是

按照一定的格式在程序包中創(chuàng)建的。下面就介紹創(chuàng)建數(shù)據(jù)類型的一些基本內(nèi)容,更

多相關(guān)內(nèi)容會(huì)在以后見到。2.3.1創(chuàng)建新的數(shù)據(jù)類型創(chuàng)建一個(gè)新類型,需要使用

保留字type,is,range。格式如下:typetype_nameisrange

range_specifcation;type_name為新類型的名稱,是一個(gè)合法標(biāo)識(shí)符:

range_specifcation表示該類型的取值范圍,表示方式為First..Last,如1..100,

-9-10o例如創(chuàng)建上面提及的一個(gè)新類型Age:typeAgeisrange1..100;這樣

就有了一個(gè)數(shù)據(jù)類型Age,取值范圍1..100。有一點(diǎn)要注意:

range_specfication中First要大于Last。如typemonthsisrange12..o,實(shí)

際上months是一個(gè)空集(null),而不是所期望的0..12。不同數(shù)據(jù)類型之間是不能

進(jìn)行混合運(yùn)算的,即使取值范圍和運(yùn)算符一樣,看以下的程序例子:ooo—

filename:putwage.adbooiwithAda.Text_IO;useAda.Text_IO;002with

Ada.Integer_Text_IO;useAda.Integer_Text_IO;003procedureputwageis

004typeAgeisrange1..100;005typeWageisrange1..100;

006Bill_Age:Age:=56;007Bill_Wage:Wage:=56;008begin009Put

("Totalwageis");010Put(Bill_Wage*Bill_Age);oilNew_Line;012end

putwage;[001H002]:使用軟件包Ada.Text_IO,Ada.Integer_Text_IO;兩個(gè)軟件

包分別處理字符類輸出和整數(shù)輸出。[003][oo8][012]定義一個(gè)過程putwageo

[OO4]-[OO5]:定義新的數(shù)據(jù)類型Age,Wage,它們?nèi)≈捣秶紴閕..ioOo[006]-

[007]:聲明兩個(gè)變量BiH_Age,Bin_Wage,類型分別為Age和Wage,并賦予相同初

始值56。[009H01U:依次輸出字符串"Totalwageis",整數(shù)Bill_Wage和Bill_Age

的乘積,和??個(gè)新行符(EOL)。以上程序看上去毫無問題,但根本無法編譯通過。

首先,沒有定義類型Age和wage的*操作,因此Bill_Age和Bill_Wage無法相

乘;第二,兩者數(shù)據(jù)類型不同,即使定義了*操作,還是無法相乘。當(dāng)然也可使用

后面提到的類型轉(zhuǎn)換,如果將[oio]改為Put(Integer(Bill_wage)*

Integer(Bill_Age)),將會(huì)輸出所要的3136;但圳果改成Put(Integer(Bill_wage*

56)),看上去也行的通,但實(shí)際結(jié)果卻不是3136。不同數(shù)據(jù)之間不能進(jìn)行運(yùn)算,

要牢牢記住。(Integer是預(yù)先定義的?個(gè)整型,Integer(Bill_Wage)是將

BilLWage強(qiáng)制轉(zhuǎn)換為整型)。2.3.2派生類型大家可能會(huì)發(fā)現(xiàn),如果像上面一

樣創(chuàng)建一個(gè)截然不同的新類型,還需要定義它的運(yùn)算符:,使用很不方便。因此,往

往是派生現(xiàn)有的類型,其格式為:typetype_nameisnewold_type{range

range_specification);type_name為新類型的名稱,是一個(gè)合法標(biāo)識(shí)符;

rangerange_specification表示該類型的取值范圍,是可選的,沒有的話表示

新類型type_name的取值范圍和old_type一樣。如將上例改為:000—

filename:putwage.adb001withAda.Text_IO;useAda.Text_IO;002with

Ada.Integer_Text_IO;useAda.Integer_Text_IO;003procedureputwageis

004typeAgeisnewIntegerrange1..100;005typewageisnewInteger;

006Bill_Age:Age:=56;007Bill_Wage:Wage:=56;008begin009Put

("Totalwageis");010Put(Bill_Wage*Bill_Age);oilNew_Line;012end

putwage;上例還是不能編譯通過,因?yàn)榕缮愋椭焕^承母類型的屬性,如運(yùn)算

符,不同的派生類型即使母類型相同也還是屬于不相同的類型。但將[10]改為Put

(Integer(Bill_wage*56))則能輸出正確的結(jié)果。但是派生類型使用還是麻煩了一

點(diǎn),不同類型之間即使都是數(shù)字類型也無法混合使用,只是自己不用創(chuàng)建運(yùn)算符省

力了點(diǎn)。2.3.3創(chuàng)建子類型創(chuàng)建新類型和派生類型的麻煩從上文就可以感受的

到,特別是在科學(xué)計(jì)算這些有很多種小類型的軟件當(dāng)中,上述兩種方法實(shí)在過于繁

雜。這時(shí)子類型(subtype)就相當(dāng)有用,子類型的定義格式為:subtype

type_nameisold_type{rangerange_specification};type_name為新類

型的名稱,是一個(gè)合法標(biāo)識(shí)符;rangerange_specification表示該類型的取值

范圍,是可選的,沒有的話表示新類型type_name的取值范圍和old_type—■

樣。再將先前的例子改一下:000—putwage.adb001withAda.Text_IO;use

Ada.Text_IO;002withAda.Integer_Text_IO;useAda.Integer_Text_IO;

003procedureputwageis004subtypeAgeisIntegerrange1..100;

005subtypeWageisInteger;006Bill_Age:Age:=56;007Bill_Wage:

Wage:=56;008begin009Put("Totalwageis");010Put(Bill_Wage*

Bill_Age);oilNew_Line;012endputwage;編譯通過,輸出值為3136。子類型

不僅繼承母類型的屬性,而且和母類型、其它同母類型的子類型可混合使用。在

前面的例子中的,我們都提到了取值范圍,這也是Ada的一項(xiàng)“特色”:Ada不同于

C和Pascal-賦給一個(gè)變量超過其取值范圍的值或進(jìn)行不合法運(yùn)算,會(huì)輸出錯(cuò)誤的

值而不報(bào)錯(cuò),與此相反,Ada程序在編譯時(shí)會(huì)提示錯(cuò)誤,或在運(yùn)行Ada程序時(shí)產(chǎn)

生Constraint_Error異常(異常和C中的信號(hào)Signal差不多,詳見第9章異常

(Exception)),掛起程序,來減少程序的調(diào)試時(shí)間。2.4標(biāo)量類型(Scalar

Type)大部份語言,基本的數(shù)據(jù)類型如果按照該類型所表示的數(shù)據(jù)類型來分,.

般來說可分為整型(integer),實(shí)型(real),布爾型(boolean),字符型(character)這

四類,并以它們?yōu)榛A(chǔ)構(gòu)成了數(shù)組,記錄等其它更復(fù)雜的數(shù)據(jù)類型。在程序包

Standard中預(yù)定義了一些簡單數(shù)據(jù)類型,例如Integer,Long_Integer?Float,

Long_Float,Boolean,Character,Wide_Character,以及這些數(shù)據(jù)類型的運(yùn)算

符。下面我們除了學(xué)習(xí)上述的4種標(biāo)量類型(ScalarType)外,還要學(xué)習(xí)一下枚

舉類型(Enumration)。由于Ada中布爾型和字符型都是由枚舉類型實(shí)現(xiàn)的,因此

也可將這兩種類型認(rèn)為是枚舉類型。2.4.1整型(Integer)Integer整型一個(gè)整型

數(shù)據(jù)能存放--個(gè)整數(shù)。預(yù)定義的整型有Integer,Short_Integer,

Short_Short_Integer,Long_Integer,Long_Long_Integer還有Integer的j類

型Positive,NaturaloRM95沒有規(guī)定Integer及其它整型的具體取值范圍及其位

數(shù),由編譯器決定。只規(guī)定了沒多大意思的最小取值范圍,如要求一個(gè)Integer至

少要為16位數(shù),最小取值范圍為-32767“32767(-2**15+1.-2**15-1)?因此還有

Integer_8,Integer_i6,Integer_32,Integer_64這些指定了位數(shù)的整型,以方便用

戶。在RM95里,也就是編譯器實(shí)現(xiàn)里,以上類型聲明格式為:typeIntegeris

rangeimplementation_defined(Long」nteger它們也一樣)subtype

PositiveisIntegerrangei.Jnteger'Last;subtypeNaturalisIntegerrange

O.Jnteger'Last;(Integer'Last表示Integer的最后一個(gè)值,即上限,見2.5數(shù)據(jù)類

型屬性)程序System里定義了整數(shù)的取值范圍:Min」nt:constant:=

Long_Long_Integer'First;Max_Int:constant:=Long_Long_Integer'Last;

Modular整型還有…類整型是Modular,異于上面的整型。如果將Integer整型與

C中的signedint相類比,它們的取值范圍可包括負(fù)數(shù);那么Modular類型就是

unsignedint,不能包含負(fù)數(shù)。其聲明格式為:typetyep_nameismod

range_specification;其中的range_specification應(yīng)為一個(gè)正

數(shù);type_name的取值范圍為(o..range_specification-1)?如下面類型

Byte:typeByteismod256;這里Byte的取值范圍為o..255。Modular類型在

程序包System也有常量限制,range_specification如是2的嘉則不能大于

Max_Binary_Modulus,如不是嘉的形式則不能大于

Max_Nonbinary_ModuluSo這兩個(gè)常量的聲明一般如下:

Max_Binary_Modulus:constant:=2**Long_Long_Integer'Size;

Max_Nonbinary_Modulus:constant:=Integer'Last;細(xì)心的讀者可能會(huì)發(fā)現(xiàn)上

面兩個(gè)常量的值實(shí)際上是不一樣的,也就是說Modular類型實(shí)際上有兩個(gè)不同的

限制。RM95關(guān)于這點(diǎn)的解釋是,2進(jìn)制兼容機(jī)上,Max_Nonbinary_Moduhis的

值大于Max_int很難實(shí)現(xiàn)。2.4.2實(shí)型(Real)相對(duì)于整型表示整數(shù),實(shí)型則表示

浮點(diǎn)數(shù)。實(shí)型分為兩大類:浮點(diǎn)類型(floatingpoint)和定點(diǎn)類型(fixedpoint)?它

們之間的區(qū)別在于浮點(diǎn)類型有一個(gè)相對(duì)誤差;定點(diǎn)類型則有一個(gè)界定誤差,該誤差

的絕對(duì)值稱為delta。下面就分類介紹這兩類數(shù)據(jù)類型。浮點(diǎn)類型(Floating

Type)浮點(diǎn)類型預(yù)定義的有Float,Short_Float,Short_Short_Float,

Long_Float,Long_Long_Float等,它們的聲明格式入下:typetype_nameis

digitsnumber[rangerange_specification];digitsnumber表示這個(gè)浮點(diǎn)

類型精度,即取number位有效數(shù)字,因此number要大于0;range

range_specification是可選的,表示該類型的取值范圍。下面是幾個(gè)例子:

typeRealisdigits8;typeMassisdigits7range0.0..1.0E35;subtype

ProbabilityisRealrange0.0..1.0;Real表示精度為8位的符點(diǎn)數(shù)類型,它的取

值范圍由于沒給定,實(shí)際上由編譯器來決定;RM95里關(guān)于這種情況是給出了安

全范圍(saferange),取值范圍是-IO.O**(4*D)..+IO.O**(4*D),D表示精度,此例中

為8,所以Real的安全取值范圍一?般來說應(yīng)為-10.0E32..+10.0E32。Mass是表示

精度為7位的符點(diǎn)型,取值范圍為00-1.0E35;Probability是Real的『類型,精

度也是8位,取值范圍0.0..1.0;程序包System定義了精度的兩個(gè)上限:

Max_Base_Digits和Max_Digits,一般來說應(yīng)為Max_Base_Digits:constant:=

Long_Long_Floafdigits;(BPLong_Long_Float的精度)

Max_Digits:conslant:=Long_Long_Float,digits;當(dāng)range_specification指

定時(shí),所定義類型的精度不能大于Max_Base_Digits;當(dāng)range_specification

沒有指定時(shí),所定義類型的精度不能大于Max_Digits。定點(diǎn)類型定點(diǎn)類型主要是

多了一個(gè)delta,它表示該浮點(diǎn)類型的絕對(duì)誤差。比方說美元精確到0.01元(美

分),則表示美元的數(shù)據(jù)類型Dollar的delta為0.01,不像浮點(diǎn)型是近似到

O.Olo定點(diǎn)型的聲明格式有兩種:普通定點(diǎn)型:typetype_nameisdelta

delta_number_rangerange_specification;十進(jìn)制定點(diǎn)型:type

type_nameisdeltadelta_numberdigitsdigit_number

[rangerange_specification];除deltadelta_number外,各部份意義與浮

點(diǎn)型相同。定點(diǎn)型中有一個(gè)small的概念。定點(diǎn)數(shù)由一個(gè)數(shù)字的整數(shù)倍組成,這個(gè)

數(shù)字就稱為該定點(diǎn)數(shù)類型的small。如果是普通定點(diǎn)型,則small的值可以被用戶

指定(見下節(jié)數(shù)據(jù)類型屬性),但不能大于該類型的delat;如果沒有指定,small

值由具體實(shí)現(xiàn)決定,但不能大于delta。如果是十進(jìn)制定點(diǎn)型,則small值為

delta,delta應(yīng)為10的基,如果指定了該定點(diǎn)型的取值范圍,則范圍應(yīng)在-

(io**digits-i)*delta..+(io**digits-i)*delta之間??匆幌孪吕簍ypeVoltis

delta0.125range0.0..255.0;typeFractionisdeltaSystem.Fine_Deltarange

-1.0..1.0;typeMoneyisdelta0.01digits15;subtypeSalaryisMoneydigits

10;2.4.3布爾型(Boolean)邏輯運(yùn)算通常需要表示“是”和“非”這兩個(gè)值,這時(shí)就

需要使用布爾型。Ada中的布爾型與Pascal中的類似,是True和False兩個(gè)值。

布爾型屬于枚舉數(shù)據(jù)類型,它在程序包Standard中定義如下:typeBooleanis

(True,False);習(xí)慣于C語言的朋友在這里需要注意一下,Boolean的兩個(gè)值

True,False和整型沒有什么關(guān)系,而不是C語言中往往將True定義為值1,False

為2。2.4.4字符型(Character)Ada83最初只支持7位字符.這條限制在Ada95

制訂前已經(jīng)放松了,但一些老編譯器如MeridianAda還是強(qiáng)制執(zhí)行.這導(dǎo)致在一臺(tái)

PC上顯示圖形字符時(shí)出現(xiàn)問題;因此,在一般情況下,是使用整型來顯示Ascii127

以后的字符,并使用編譯器廠商提供的特殊函數(shù)。在Ada95里,基本字符集已由原

來的ISO646標(biāo)準(zhǔn)的7位字符變?yōu)镮SO8859標(biāo)準(zhǔn)的8位字符,基于Latin-1并且

提供了256個(gè)字符位置。Ada95同樣也支持寬字符ISO10646,有2**16個(gè)的字

符位置。因此現(xiàn)代編譯器能很好地處理8位字符和16位字符。7位字符在已經(jīng)廢

棄的程序包Standard.Ascii內(nèi)定義。在程序包Standard內(nèi)預(yù)定義的字符型

Character和Wide_Character分別表示Latin-1字符集和寬字符集,類型

Wide_Character已經(jīng)包含了類型Character并以它作為前256個(gè)字符。程序包

Ada.Characters.Latin_i和Ada.Characters.Wide_Latin_i提供了Latin-1字符集

的可用名稱,Ada.Characters.Han祖ing則提供一些基本的字符處理函數(shù)。具體內(nèi)

容見第14章字符和字符串處理。從下例可以了解一下字符型:000-filename:

puta.adb001withAda.Text_IO;useAda.Text_IO;002procedureputais

003subtypeSmall_Characteris{'a''d');004Level:

Small_Character:="a);005begin006Put(l<YoulevelisM);007Put(Level);

008New_Line;009endputa;[003]創(chuàng)建了一""b字符類型Small_Character,包

含a,b,c,d四個(gè)字母;如C語言一樣,使用字符時(shí)需加[004]聲明變量Level,類

型為SmalLCharacter,值為字母a。上面這個(gè)例子主要還是說明一下字符類是怎

樣定義的,但Character和Wide_Chracter實(shí)際實(shí)現(xiàn)卻不是這么簡單。2.4.5枚

舉類型(Enumeration)有時(shí)候我們需要一個(gè)變量能表示一組特定值中的一個(gè)。如

today這個(gè)變量,我們希望它的值是Monday,Tuesday,Wednesday,Thursday,

Friday,Saturday,Sunday其中的一個(gè),這時(shí)枚舉類型就相當(dāng)有用,上述情況中就

可以創(chuàng)建新類型Day,如下:typeDayis(Monday,Tuesday,Wednesday,

Thursday,Friday,Saturday,Sunday);然后聲明變量today的數(shù)據(jù)類型為Day:

today:Day;這樣today就能接受Monday,Tuesday,Wednesday,Thursday,

Friday,Saturday,Sunday這幾個(gè)值中的任意一個(gè)。前面提及的類型

Character,Wide_Character,Boolean都是枚舉類型,也按照下面給出的格式聲明:

typetype_nameis(elememt_list);element_list需列舉出該類型所有的可

能值。Ada能自動(dòng)檢測(cè)上下文,因此大部份情況下能分辨不同枚舉數(shù)據(jù)類型下的

枚舉元素,如再聲明一個(gè)類型Weekend:typeWeekendis(Saturday,Sunday);

或subtypeWeekendisrangeSaturday..Sunday;賦給上例中的變量Today值

為Sunday時(shí),不會(huì)產(chǎn)生歧義;但在有些情況下,Ada無法分辨枚舉元素時(shí)則會(huì)產(chǎn)

生問題,這時(shí)就要使用類型限制,詳見2.6類型限制和類型轉(zhuǎn)換Ada中的基本數(shù)

據(jù)類型就講到這里,實(shí)際上本節(jié)是基于上一節(jié)內(nèi)容的擴(kuò)展,說穿了還是創(chuàng)建數(shù)據(jù)類

型。Ada在數(shù)據(jù)類型處理上提供的強(qiáng)大功能在接下的章節(jié)里我們將會(huì)接觸的更多,

在這方面Ada的確比其它大部份語言做的好多了,熟悉C,Pascal的朋友大概會(huì)感

到相當(dāng)有意思。2.5數(shù)據(jù)類型屬性(Attributes)數(shù)據(jù)類型屬性,表示某個(gè)數(shù)據(jù)類

型的具體特征一取值范圍,最小值,最大值,某數(shù)在該類型中的位置……應(yīng)該說是

相當(dāng)有用的--起碼不像C語言,還要翻翻系統(tǒng)手冊(cè)才能知道某個(gè)數(shù)據(jù)類型的具體

定義。這些屬性的用法和調(diào)用函數(shù)一樣,也可以認(rèn)為它們就是預(yù)定義的函數(shù)一雖

然不怎么準(zhǔn)確,關(guān)于函數(shù),詳見第6章子程序;有些返回值為通用類型

(universaltype)和字符串型。數(shù)據(jù)類型的屬性既可以使用預(yù)先定義的操作,也

可以自己定義數(shù)據(jù)類型的屬性,如S'First是返回S類型的下限,如果用戶不滿

意默認(rèn)的屬性,也可自己指定S'First(雖然沒必要),如:forS'Firstuse

My_Version_First;My_Version_First是用戶自己的函數(shù),以后當(dāng)使用S'First

時(shí),實(shí)際上調(diào)用My_Version_First;有些數(shù)據(jù)屬性也可以直接用數(shù)字標(biāo)示,如:

forS'Firstuse0;這樣,S,First的值就成了0。在很多地方,如內(nèi)存管理中,這

種用法還是比較普遍的。下面簡單地列出標(biāo)量類型的屬性,S表示某個(gè)標(biāo)量類型:

2.5.1通用標(biāo)量類型屬性S'First返回S類型的下限,返回值為S型。S'Last返回

S類型的上限,返回值為S型。S'Range返回S類型的取值范圍,即S'First..

S'Last。S'Base表示S類型的一個(gè)子類型,但沒有范圍限制(單純從取值范圍角

度講,“兒子”反而比“父母”大),稱之為基類型(basetype)oS'Min函數(shù)定義

為:function(Left,Right:S*Base)returnS'Base。比較Left和Right的大小,

返回較小值。如:Integer'Min(1,2)=1。S'Max函數(shù)定義為:function

(Left,Right:S*Base)returnS'Base?比較Left和Right的大小,返回較大值。

如:Integer'Max(1,2)=2。S'Succ函數(shù)定義為:functionS'Succ

(Arg:S*Base)returnS'Base?返回Arg的后趨。S'Pred函數(shù)定義為:function

S'Pred(Arg:S'Base)returnS'Base。返回Arg的前趨。S'Wide_Image函數(shù)定

義為:functionS'WideJmage(Arg:S'Base)returnWide_String?返回Arg

的“像”,即可顯示的字符串,這里返回寬字符串型Wide_String。如:

Float'Wide_Image(9.00)="9.OO”。詳見第三章數(shù)組。S'lmage與

S'Wide」mage一樣,但返回字符串型String。SWide_Width表示

S'Wide_Image返回的字符串的最大長度,返回值為universal_integer。

SWidth表示Slmage返回的字符串的最大長度,返回值

為universal.integer。S'Wide_Vahie函數(shù)定義為:functionSJWide_Value

(Arg:Wide_String)returnS'Base。是S'Wide_Image的逆過程,返回與

“像”Arg相對(duì)應(yīng)的S類型的值。如:FloafWide_Value(“9。0〃)=9。。。

SValue與SValue一樣,但參數(shù)Arg是String類型。252通用離散類型屬性

離散類型包括整型和枚舉型,除了上述的屬性外,還有:S'Pos函數(shù)定義

functionS'Pos(Arg:S'Base)returnuniversal_integero返回Arg在S

類型中的位置。SVal函數(shù)定義為:functionS'Pos(Arg:S'Base)return

S'Base。返回在S類型中位置為Arg的值。例如:typeColoris(red,white,

blue);ColorTos(White)=2Color'Val⑴二red2.5.3浮點(diǎn)類型屬性S'Digits返

回S類型的精度,為universal_integer類型。2.5.4定點(diǎn)類型屬性

S'Small返回S類型的small值,返回值為實(shí)型。S'Delta返回S類型的

delata,返回值為實(shí)型。STore返回S類型所表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論