Ada詞法元素

2018-10-25 09:31 更新

詞法元素

詞法元素(Lexical Element) 

Ada 里的詞法元素與其它語(yǔ)言的定義還是有不小差別,下面按照 RM95 關(guān)于詞法元素的分類來(lái)逐項(xiàng)介紹,包括標(biāo)識(shí)符、保留字、字符、數(shù)值文字等及它們的一些規(guī)則。

基本字符集(Character Set)

 Ada 95 規(guī)定的標(biāo)準(zhǔn)字符集是 Latin-1,支持8位(基于ISO-8869)和16位(基于ISO-10646)字符,在非標(biāo)準(zhǔn)模式下也可用本地字符集,具體情況取決于當(dāng)前的系統(tǒng)。(一般來(lái)說(shuō),涉及字符時(shí)默認(rèn)是指 Latin-1,程序幾乎都是用 Latin-1 字符集寫的) 字符在RM 95 中是分成了三類:圖形字符(graphic character)、格式控制符(format effector)、其它控制符(other control function),它們所表示的范圍為: 圖形字符包括字母(letter)、數(shù)字(digit)、空格符(space)、特殊字符(special character)(例如‖ # & ? ( ) * + , – . / : ; < = > _ | { } [ ]); 格式控制符包括水平制表符(HT)、垂直制表符(VT)、回車(CR)、換行(LF)、換頁(yè)(FF); 其它控制符則是除了格式控制符以外的控制符。 更詳細(xì)的內(nèi)容參見(jiàn)RM 95、ISO 8869,ISO 10646。 Ada 是大小寫忽略的(除了字符和字符串中的實(shí)際內(nèi)容,如字符‘z'和‘Z'不相同,但標(biāo)識(shí)符 z 和 Z 相同),但為了可讀性,一般來(lái)說(shuō)變量名或函數(shù)名首字母都會(huì)大寫,其余小寫,縮近格式也需要引起注意。根據(jù)實(shí)際情況盡量保證可讀性。 為了兼容性,Ada95 要求編譯器最少支持一行字符串和一個(gè)詞法元素的長(zhǎng)度為 200個(gè)字符(不包括行尾符)。 Ada 在字符集上并沒(méi)有很嚴(yán)格要求編譯器一定要怎樣,但應(yīng)該支持標(biāo)準(zhǔn)字符集。

標(biāo)識(shí)符(Identifier) 

Ada 中不管是變量、函數(shù)還是其它對(duì)象都需要一個(gè)名稱,這就叫做標(biāo)識(shí)符。如 X、Count 、me就是簡(jiǎn)單的標(biāo)識(shí)符。 Ada 中的標(biāo)識(shí)符有以下一些注意點(diǎn):

1. 標(biāo)識(shí)符一定要是字母開(kāi)頭,接下去可以是數(shù)字和下劃線,結(jié)尾不能為下劃線。如Fig_、_Lik、1me是不合法的。 

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

3. 雖然單個(gè)字符可作為標(biāo)識(shí)符,但一般情況下不應(yīng)該濫用這項(xiàng)特性(我不知道這除了少敲幾個(gè)字外,還有什么意義,想想數(shù)字 0 和字母 O、數(shù)字 1 和字母l吧,絕對(duì)害死人的做法)。

4. 不能將保留字作為標(biāo)識(shí)符。在 Ada 83 中,標(biāo)識(shí)符包括了保留字,但在Ada 95 中保留字從標(biāo)識(shí)符中分離了出來(lái)。

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

保留字(Reserved Word) 

保留字在程序語(yǔ)法中有特殊的含義,不屬于標(biāo)識(shí)符范圍,這與C 和 Pascal 等語(yǔ)言的定義有所不同。Ada 95 中的保留字如下: abort abs abstract accept access aliased all and array at begin body case constant declare delay delta digits do else elsif end entry exception exit for function generic goto if in is limited loop mod new not null of or others out package pragma private procedure protected raise range record rem renames requeue return reverse select separate subtype tagged task terminate then type until use when while with xor 

在以后的內(nèi)容中,我們會(huì)逐個(gè)解釋它們的含義及作用。Ada95 的保留字比原先添加了6個(gè):abstract, aliased, protected, requeue, tagged 和 until,雖然這可能會(huì)牽連到兼容性問(wèn)題,但通常也無(wú)須計(jì)較這點(diǎn)。 

分隔符(Separator and Delimiter) 

Ada 程序中,各元素之間需要空格符、格式控制符或 EOF 隔開(kāi)。RM 95里將它們作為separator,而delimiter 則是指下列特殊字符(中文有點(diǎn)說(shuō)不清楚):& ? ( ) * + , -. / : ‖ < = > | 或是復(fù)合型的: => .. ** := /= >= <= << >> <>。當(dāng)分隔符作為注釋、字符串、字符、數(shù)值的一部分時(shí),就不再是分隔符了。

數(shù)值文字(Numeric Literal) 

數(shù)值文字就是指數(shù)字。Ada 和 Pascal 相同,將數(shù)字分為實(shí)數(shù)型(real literal)和整數(shù)型(integer literal)兩大類。實(shí)數(shù)型是有小數(shù)點(diǎn)的數(shù)字,整數(shù)型則無(wú)小數(shù)點(diǎn)。如 1.2787,0.871,7.0是實(shí)數(shù)型,而-882,5441,1是整數(shù)型。Ada 在數(shù)字表示上有一個(gè)很好的特性就是可以明確指定使用何種基數(shù)(2進(jìn)制到16進(jìn)制)表示,下面是數(shù)字的表示: 十進(jìn)制數(shù)(Decimal Literal) 不管是實(shí)型還是整型數(shù),都可以在其間加上下劃線,使長(zhǎng)數(shù)字更加易讀。如56886515645125615,可寫為56_886_515_645_125_615或5_6886_5156_4512_5615,下劃線并不改變數(shù)字的值。但兩個(gè)下劃線不能是連續(xù)的,下劃線也不可以在數(shù)字首部和尾部,如676__66和67_E4都是非法的。 字母 E 作為數(shù)字的指數(shù),同時(shí)適用于實(shí)型和整型。如 123_98E4、5.087E-5、 4.8E7都是合法的,但負(fù)指數(shù)不能用于整型,指數(shù)也一定要是整數(shù)。E 大小寫皆可以。 基型數(shù)字(Based Literal) 在大部分語(yǔ)言中,都使用 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ù) 1001 1001,中間的下劃線可取消,其10進(jìn)值為153; 10#153#,表示10進(jìn)制數(shù)153,等價(jià)與153; 16#90#,表示16進(jìn)制數(shù)90,其10進(jìn)值為144;

字符文字(Character Literal) 

字符文字的表示是單個(gè)圖形字符在單引號(hào) ? ‘中,如‘ a‘表示小寫字母a, ?K‘表示大寫字母K,‘ ? ?表示一個(gè)單引號(hào),‘ ?表示一個(gè)空格。

字符串文字(String Literal) 

字符串是雙引號(hào)(‖ ―)之間的有序圖形字符。如‖ What I said.‖就是一個(gè)字符串。表示空字符串時(shí)直接用‖ ―。如果字符串中有雙引號(hào),一個(gè)雙引號(hào)要用兩個(gè)‖來(lái)表示。如‖ He said,‖" I am hungry.‖" ―,而‖ He said,‖ ―I am hungry. ―或‖ He said,‖ I am hungry.‖ ―是不合法的。至于其它字符,如$ %之類可以直接出現(xiàn)在兩個(gè)雙引號(hào)間。與 C 語(yǔ)言不同,Ada 里沒(méi)有與之相同的轉(zhuǎn)義字符,并且EOL不會(huì)算到字符串中。

注釋(Comment)

注釋由兩個(gè)連字號(hào)(hyphen)(–)開(kāi)始,直到行尾??梢猿霈F(xiàn)在程序的任一個(gè)地方,不影響程序本身。例如: — the comment; end;– processing of Line is complete. 

Pragmas Pragma 

Pragmas Pragma 是編譯指示(compile directive),給編譯器指令如優(yōu)化程序,列表控制等。它的作用往往不只影響一個(gè)編譯單元,而是整個(gè)程序。 Pragma 是些預(yù)先定義的指令,如 pragma Page,pragma List(OFF) ,編譯器也可擴(kuò)展 RM 95 中 pragma。我們先接觸 List,Page,Optimize 這3個(gè) pragma。更多內(nèi)容我們會(huì)在以后接觸。 pragma List(identifier); 

pragma Page;

pragma Optimize(identifier); 

pragma List 將 identifier On 或 Off作為它的參數(shù)。它指定編譯列表(listing of compilation) 是繼續(xù)還是停止,直到在同一個(gè)編譯單元內(nèi),一個(gè)pragma List 使用了相反的參數(shù)。

pragma Page 指定在 pragma 后的程序正文在新頁(yè)開(kāi)始(如果編譯器正在列表) 

pragma Optimize 有 Time,Space 或 Off 3個(gè)參數(shù),它的影響區(qū)域直到 pragama 所在編譯單元的底部。Time 和 Space 指示優(yōu)化時(shí)間還是優(yōu)化空間,Off則關(guān)閉優(yōu)化。 

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)