Ada词法元素

2018-10-25 09:31 更新

词法元素

词法元素(Lexical Element) 

Ada 里的词法元素与其它语言的定义还是有不小差别,下面按照 RM95 关于词法元素的分类来逐项介绍,包括标识符、保留字、字符、数值文字等及它们的一些规则。

基本字符集(Character Set)

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

标识符(Identifier) 

Ada 中不管是变量、函数还是其它对象都需要一个名称,这就叫做标识符。如 X、Count 、me就是简单的标识符。 Ada 中的标识符有以下一些注意点:

1. 标识符一定要是字母开头,接下去可以是数字和下划线,结尾不能为下划线。如Fig_、_Lik、1me是不合法的。 

2. 两个连续的下划线不能在一起,因为有些打印机可能会将两个下划线当作一个处理。

3. 虽然单个字符可作为标识符,但一般情况下不应该滥用这项特性(我不知道这除了少敲几个字外,还有什么意义,想想数字 0 和字母 O、数字 1 和字母l吧,绝对害死人的做法)。

4. 不能将保留字作为标识符。在 Ada 83 中,标识符包括了保留字,但在Ada 95 中保留字从标识符中分离了出来。

5. .如上节所提及的,标识符是不分大小写的,但为了可读性,请注意你对标识符的命名。 

保留字(Reserved Word) 

保留字在程序语法中有特殊的含义,不属于标识符范围,这与C 和 Pascal 等语言的定义有所不同。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 

在以后的内容中,我们会逐个解释它们的含义及作用。Ada95 的保留字比原先添加了6个:abstract, aliased, protected, requeue, tagged 和 until,虽然这可能会牵连到兼容性问题,但通常也无须计较这点。 

分隔符(Separator and Delimiter) 

Ada 程序中,各元素之间需要空格符、格式控制符或 EOF 隔开。RM 95里将它们作为separator,而delimiter 则是指下列特殊字符(中文有点说不清楚):& ‗ ( ) * + , -. / : ‖ < = > | 或是复合型的: => .. ** := /= >= <= << >> <>。当分隔符作为注释、字符串、字符、数值的一部分时,就不再是分隔符了。

数值文字(Numeric Literal) 

数值文字就是指数字。Ada 和 Pascal 相同,将数字分为实数型(real literal)和整数型(integer literal)两大类。实数型是有小数点的数字,整数型则无小数点。如 1.2787,0.871,7.0是实数型,而-882,5441,1是整数型。Ada 在数字表示上有一个很好的特性就是可以明确指定使用何种基数(2进制到16进制)表示,下面是数字的表示: 十进制数(Decimal Literal) 不管是实型还是整型数,都可以在其间加上下划线,使长数字更加易读。如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进制的表示法,格式为:Base # Number #,Base 表示所采用的进制,Number 为该进制下所表示的数字。 2#1001_1001#,表示2进制数 1001 1001,中间的下划线可取消,其10进值为153; 10#153#,表示10进制数153,等价与153; 16#90#,表示16进制数90,其10进值为144;

字符文字(Character Literal) 

字符文字的表示是单个图形字符在单引号 ‗ ‘中,如‘ a‘表示小写字母a, ‗K‘表示大写字母K,‘ ‗ ‗表示一个单引号,‘ ‗表示一个空格。

字符串文字(String Literal) 

字符串是双引号(‖ ―)之间的有序图形字符。如‖ What I said.‖就是一个字符串。表示空字符串时直接用‖ ―。如果字符串中有双引号,一个双引号要用两个‖来表示。如‖ He said,‖" I am hungry.‖" ―,而‖ He said,‖ ―I am hungry. ―或‖ He said,‖ I am hungry.‖ ―是不合法的。至于其它字符,如$ %之类可以直接出现在两个双引号间。与 C 语言不同,Ada 里没有与之相同的转义字符,并且EOL不会算到字符串中。

注释(Comment)

注释由两个连字号(hyphen)(–)开始,直到行尾。可以出现在程序的任一个地方,不影响程序本身。例如: — the comment; end;– processing of Line is complete. 

Pragmas Pragma 

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则关闭优化。 

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号