PLM中文
- 格式:pdf
- 大小:599.74 KB
- 文档页数:60
2!QM0N߈ኔଐ!PL/M-51的程序书写格式相当灵活,其说明语句写在输入行的位置不受限制,而且程序元素之间可以随意插入空格。
1.1 PL/M字符集PL/M中用到的字符集,是ASCII字符集的一个子集,包括如下几个字符形式:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789以及专用字符:=./()+-‘*:;$<>等,此外,还有空格符、制表符、回车符和换行符。
这里提出的规则,适用于除了字符串常量和注解以外的PL/M51程序的每个环节。
如果在PL/M51程序中包含了任何不在以上字符集中出现的字符,则编译程序就把它按出错处理。
大写字母和小写字母,除了在字符串常量中外,程序中的书写形式一般没有什么区别,如xyz和XYZ可以交换。
此外,空格的多少,除在字符串常量中外,也没有区别,编译程序把连续的空格符视为一个空格对待。
专用字符以及它们的组合,在一个PL/M程序中有特定的含义。
专用字符及其组合列入表中。
专 用 字 符 及 其 组 合 表符 号 名 称 用 途= 等号 (1)赋值运算符;(2)关系运算符. 点号 (1)结构成员限制符;(2)取地址符/ 除号 除法运算符/* 说明符 注解开始分界符*/ 说明符 注解结束分界符( 左括号 列、行以及一些表达式的在端分界符) 右括号 列、行以及一些表达式的右端分界符+ 加号 加法运算或一元数的正号符- 减号 减法运算或一元数的负号符‘单引号 串界符* 星号 乘法运算符,隐含维数指定符< 小于号 关系运算符> 大于号 关系运算符<= 小于等于号 关系运算符>= 大于等于号 关系运算符<> 不等于号 关系运算符: 冒号 标号界符; 分号 语句分界符, 逗号 列表元素分界符_ 下横线 标识符中的有效字符$ 美元号 标识符中的无效字符1.2 标识符和保留字标识符用于命名变量、过程、符号常量和语句标号,最大长度是31个字符。
第一个字符必须是字母,其余字符可以是字母、数字或下划符(_)和美元符($)。
随意加入的美元符($),是完全被编译程序忽略的,以提高一标识符或一个常量(不过$不能是第一个字符)的可读性。
一个包括美元符号($)的标识符或常量,完全等价于除去美元符$的同一标识符。
下面是有效标识符的一些例子:INPUT_COUNTXGAMMLONGIDENTIFIERNUMBER3LONG$$$IDENIFIER$$$NUMBER$$$3INPUT$COUNTINPUTCOUNT可见,两个长标识符是相同的(对编译程序而言),最下面两行标识符也是等价的,但不同于第一行标识符。
保留字不能用作标识符,因为它们实际上是PL/M51语言的组成部分。
以下是PL/M51的保留字,它们不能用作标识符。
ADDRESS INDIRECTLY_CALLABLEAND INTERRUPTAT LABLEAUXILARYBASED MAINBIT MINUSBY MODBYTE NOTCALL ORCASE PLUSCONSTANT PROCEDUREDECLARE PUBLICREGISTERDO RETURNELSE STRUCTUREENABLE THENEND TOEXTERNAL USINGGO WHILEGOTO WORDIDATA XORIFPL/M51也有一组预定义标识符,用以命名内部过程,可以根据给出的目的来说明这些标识符。
但一经说明,则具有相同名字的内部过程就不能再用了。
下面是内部过程预说明的标识符,若这些标识符之一在DECLARE语句中作了说明,则在这个说明的作用域内相应的内部过程,就变成没有用的标识符。
BOOLEAN ROLDEC RORDOUBLE SCLEXPAND SCRHIGH SHLLAST SHRLENGTH SIZELOW TESTCLEARPROPAGETE TIME1.3 标记、分隔符和空格的使用正如英文句子是由单词组成的一样,PL/M语句也是由标记组成的。
每个有下列诸类:1. 标识符2. 保留字3. 简单分界符。
除下划线(_)和美元符($)外,所有专用字符都是简单分界符。
4. 复合分界符——两个专用字符的组合。
包括:<>、<=、>=、/*、*/。
5. 数值常量。
6. 字符串常量。
显然,在大多数情况下,一个符号结束时,下一个符号紧接着出现,例如下面赋值语句中:EXACT=APPROX*(OFFSET-3)/SCALE;EXCAT,APPROX,OFFSET和SCALE是标识符,3是一数值常量,其它所有字符都是简单分界符。
有时在两标识符、保留字或数值常量之间并不出现简单或复合分界符。
例如:DECLAREABYTE在这种情况下,必须插入空格作为分隔符,即DECLARE A BYTE(连续多个空格可以代替单个空格使用)。
同样,注解语句也可当作分隔符使用。
空格也可以随意插入到标记的两侧,并不改变PL/M1语句的意义。
因此,下面的赋值语句:EXACT = APPROX * (OFFSET-3) / SCALE;等价于:EXACT=APPROX*(OFFSET-3)/SCALE;1.4 常量常量是在程序执行时不能变化的值。
这里对数值常量和字符常量予以简单说明。
数值常量 数值常量可以用二进制、八进制、十进制或十六进制数表示,编译程序分别通过后缀B、O(或Q)、D或H来识别它们。
不加后缀的数值,通常认为是十进制数。
如果一个常量含有在已指定了的数据基下无效的字符,则它被认为不合法(错误)而标识出来。
最大的数值字常量是:1111$1111$1111$1111B=177777Q=65535D=0FFFFH十六进制数的第一个字符必须是一个自然数,以避免与标识符混淆。
如用十六进制表示163,必须写成品0AH,而不写成A3H,否则会被误码认为标识符。
有效数值常量的例子列举如下:12AH 2 33Q 1010B 55D 0BF3H 65535 777O 3EACH;无效的数值常量举例如下:12A——十六进制数字,但没有后缀,因此按无效的十进制数解释。
12AD——最后的D可以是一个后缀,但是A不是十进制数字,如果是十六进制数,则最后应加一后缀。
1102B——2不是一个有效的二进制数字。
2ADGH——G不是一个有效的十六进制数字。
一个数值常量可以是一位值、一个字节或者一个字值,这取决于其大小和前后关系。
字符串常量 由单引号括起来的可打印ASCII字符即构成字符串。
一个字符串中含有引号时,按双引号书写,如串‘Q’由两个字符组成,一个引号再跟一个Q。
字符串中允许加空格,编译程序在存贮器中是以ASCII码表征字符串;七位的字符码可以通过高位补零转换成八位的字节;长度为1的串译成一个字节的值,长度为2的串译成双字节的值。
参见下面的例子:‘A’等价于41H‘AG’等价于4147H字符串只能作字节或字型值。
由于多于2个字符的字符串将超出一个字(16位)值所能表征的能限,因此,较长字符串作常量时必须以字节串的形式存贮,方可在PL/M程序中使用。
字符串常量的最大长度是254字符,串常量可以用来予置初值常量或作为地址分配的一部分,来指出串常量的存贮位置。
1.5 注解说明性的注解可与PL/M程序正交叉书写,以提高程序的可读性,并提供程序的文本。
PL/M-51的注解是一个字符序列,左边由字符对/*分界开始,右边由字符对*/分界结束。
这两个分界符表明编译程序在其之间的任何信息不参与编译,不把这部分信息视作程序的一部分。
注解可以包含任何打印的ASCII字符,也可以包括空格、回车、换行和制表符。
注解不能嵌于一个字符串常量中,否则它将被理解为串常量的一部分,而使编译程序不能识别。
除此之外,凡空格符能出现的地方就可用注解,即除了标记内的任何地方。
因此,注解可以分布在整个PL/M程序中。
这里,给出PL/M注解的一个简单例子:/* This procedure copies one structure to another. */在本书中,注解使用小写字母,以利于与由大写字母表示的程序代码相区别。
3!ಢቯᎧႁී符号名的说明定义有五种类型,即:变量、常量、文字常量(串)、标号和过程。
用在程序块中的每个符号名只能进行唯一的说明,该说明可出现在程序块的开始或者在外层程序块中。
同一程序块中对同名进行多次说明是无效的。
变量、常量、文字常量和过程,必须在说明和定义后才能用在可执行语句中,标号可以通过其后跟一冒号隐含地得到说明。
过程是由PROCEDURE过程说明语句和过程结束语句END之间的语句组定义的。
除以上各项的名字外,说明语句还可以描述其类型、属性和位置。
2.1 变量说明语句DECLARE语句是一种非执行语句,它引入了一些对象或对象的集合,给它们命名(有时赋值),需要时还可为它们分配存贮。
DECLARE最重要的作用是说明定义变量。
变量可以是标量(即单一的量)、数组或结构。
变量有更通用的一层含义,即变量可以是一个标量变量,或是可以用一个标识符引用的标量表(数组)。
标量变量是一单独的说明对象,其值在编译时不一定必须知道,它在程序执行过程中可以变化,因而在引用时要在程序中说明。
它所使用的名字:标识符。
在数组中,所有的标量都用同一标识符命名,彼此之间的区别在于下标不同,如A(0)、A(1)、A(123)等等。
结构(类型)是标量或数组构成的表,它们使用同一主标识符,相互间可以由其自身的元素标识符字段加以区别。
例如,所指的是结构EMPLOYEES中的NAME 字段。
这种类型的变量(数组和结构)将在第四章中详细阐述。
2.2 类型标量总是具有字节(BYTE)、字(WORD)或位(BIT)等几种类型。
字节型标量是占内存一字节的8位二进制数;字节标量的值是一无符号数,其值的范围为0-255,字型标量占用内存连续两字节的16位二进制数,其最低有效8位存放在第一字节(低地址);字型标量的值是无符号数,其值范围是0~65535,与其它PL/M-51编译程序兼容,保留字ADDRESS 可以与WORD同义地使用。
位型标量只含0(FALSE)或1(TRUE)两种取值。
它必须放在片内RAM的32到47中的位可寻址单元或在可位寻址存贮映射的硬件寄存器中。
因此,位型量只能有片内RAM(MAIN)或寄存器(REGISTER)后缀。
位型量(BIT)具有如下几个方面重要限制:1. 不能有下标,也就是说位型数组是不存在的。
2. 不能是基变量(BASED)。
3. 在片内RAM(MAIN)中的位型量不具有AT属性,但映射到硬件寄存器中的位型量必须是AT确切指出的寄存器地址。