PL1基础入门教程

更新时间:2023-12-26 18:34:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、PL/1的字符集及书写 1、PL/1的字符集

PL/1的字符集一般分为48个字符与60个字符两种,目前采用60个字符的字符集。

1.1 29个字母字符

A,B,…….,Z,$,@,#

1.2 10个数字

0,1,2,3,4,5,6,7,8,9

1.3 21个专用字符(如下所示) ♀ 空格 % 百分号 = 等号 ; 分号 + 加号 : 冒号 - 减号 < 小于 *

星号(乘号) > 大于 /

斜线(除号) | 或 (

左括号 & 与 )

右括号

┒ 非 , 逗号 _

短划号 .

小数点 ? 问号 ’ 引号

2、L/I源程序的书写

2.1源程序从第2列开始写至第72列为止

2.2每个语句(Statement)以“;”结束

2.3注释(Comment)以“/*”开始,以“*/”结束,其间可出现仸何字符。

2.4第1列上的字符用作打印时的控制字符 1 :

换新页 ♀ :

换一行 0 :

换二行(空一行,现换一行) - :

换三行(空二行,再换一行)

二、数据和表达式(DATA and Expression) 数据类型分两类:

n 运算型数据

A、 算术数据

a:定点十进数(Fixed decimal data)

b: 定点二进数(Fixed binary data)

B、 数值字符数据(numeric character data)

C、 字符串数据(String data)

n 控制型数据

A、 文件数据(file data)

B、 标号数据(label data)

C、 入口数据(entry data)

D、 定位数据(locator data)

1、运算型数据

1.1算术数据有下列4个特性

进位制(Base): 十进位、二进位;

记数法(scale): 定点、浮点

精确度(precision):(P:表示有效数位;q:表示有效小数位)

型(mode): 实型、复型等。

1.1.1定点十进数 例:

定点十进数 3.1416 732 003 0.0012 -528

精确度 (5.4)

(3.0) (3.0) (4.4) (4.0)

存储形式

(十六进制) 31,41,60 73,20 00,30 0,01,20 528,0

注: 对定点十进数(p,q)

2 占用存贮的字符数==[p/2]+1

2 P最大值是15,占8个字符

2 (p,q)未指明时,系统约定为(5,0)

1.1.2定点二进数

例: 定点二进数 0001 0110 11111111

十六进制表示 16 F F

十进制表示 22 - 1 注:

2 最大有效数位31,占4字符

2 未指明时系统约定值为FIXED BIN(15), 占2字符.

2 位数低于15位的也占2字符

2 位数高于15位的,则占4字符

2 变量名以I,J,K,L,M,N开始,若未指明时,约定为FIXED BIN(15);以其它

字母开始约定为FIXED DEC(6)

1.2 数值字符数据

它是介于算术数据与字符串数据间的数据 数 123

732.10 98.7 书写

PIC ‘999’

PIC ‘999V.99’

PIC ‘99V9’

存贮形式 F1 F2 F3 F7 F3 F2 4B F1 F0 F9 F8 F7

其中: V表明在数据域中该位置出现一个隐含的十进位或二进位小数点.

若V后面还有“.”,表明相应数据域位置包含一个小数点

注:

u 数值字符数据主要是构成定点十进数,定点二进数可打印的形式;

u 在PIC后面引号(”)中的数字字符个数最多15个;

u 数值字符数据可进行算术运算,但须经转换;

u 如果一个数字字符定义为PIC ‘ZZZV.’,则不管此字符是否有值,都显示为“ .”。

1.2.1定点十进数(FD)、定点二进数(FB)和PIC间的转换

例: DCL A PIC‘99’

DCL B PIC‘99’

DCL C PIC‘99’

C==A+B

则为欲求得C,须经:

A FIXED DEC,

B FIXED DEC

A_FD + B_FD

FIXED DEC PIC 赋予C

在算术运算时,必须转为FIXED DEC 才能进行

转换表

R C FB FD PIC FB —— C FB

C FD FD FB FD

R FB —— C FD PIC

R FD

FD FB R FD

C FD R FD

注:一般金额采用 FIXED DEC

整数采用 FIXED BIN

PIC用于 输入/输出 它是字符与算术数据间的桥梁。

1.3 串数据(String data)

1.3.1 字符串数据(Character String data)

值 PL/1写法 存贮形式

‘ABC’ CHAR(6) C1,C2,C3,40,40,40

‘A102’ CHAR(4) C1,F1,F0,F2

‘A’ CHAR(4) C1,40,40,40

2 字符串数据通常在程序内赋值时用.

例: X==‘THIS REPORT IS ’

2 赋值时,字符串数据括于单引号内

2 赋值时,在字符串右边不足部分,系统自动以“空白 ”符补足

例: DCL X CHAR(5)

… …

X =‘A’; X值会是 A后跟随4个空格

2 字符串内出现单引号时,必须以两个单引号(称为Null String)表示,否则会引起

混淆。

例: 设赋值给X,其值为:JOHN’S CAP

则必须写为 X==‘JOHN’’S CAP’

(注:若写为X==‘JOHN’S CAP’,则S CAP’被略)

2 重复的字符串数据可用重复因子表示

例: X==(N)’BCC ‘表示X有值为 BCC ,BCC ,…….(N个)

1) 重复因子必须放在括号内;

2) 重复因子只对紧接的一个字符生效

例: PIC’(4)AB’ 乃表示PIC’AAAAB’

2 CHARACTER PICTURE SPECIFICATION

PIC’9’表示数字0~9

PIC’A’表示字母A~z

PIC’X’表示仸何字符

1.3.2 (二进)位串数据(BIT String data)

值 PL/I写法 存贮形式

‘1’B BIT(1) 占1字符

‘1111’B BIT(4) 占1字符

(64)’0’B BIT(64) 占8字符

2 位串数据赋给变量是从左到右进行,若串数据长度,超过变量说明的长度,则以变量

长度为准,截去串数据右端的位;若串数据长度短于变量说明的长度,也以变量长度

为准,右边自动以0补足.

2 位串数据通常用于检查 真/假 条件

真 TRUE_______’1’B

假 FALSE_______’0’B

例: DCL EOF BIT(1)

——–

__在检查“真”时可写:IF EOF=‘1’B 或 IF EOF

—在检查“假”时可写:IF EOF=‘0’B 或 IF ﹁EOF

2、控制型数据

2.1文件数据(File data):它表示PL/I文件的信息

l 它是PL/1的输入/输出文件名字

l 即JCL的输入/输出DD名字,File name和DDname互相对应

例: DCL INFILE INPUT RECCRD FILE

DCL OUTFILE OUTPUT STREAM FILE

2.2标号数据(label data)

l 作为语句标号引用

例: LOOP:——-

——-

——-

GO TO LOOP;

l 作为语句标号变量

例: DCL CIRCLE LABEL

LOOP1:———

——–

———

LOOP2:——–

——–

——–

CIRCLE==LOOP1;

… …

GO TO CIRCLE; ——–> 等价于 GO TO LOOP1

… …

2.3 入口数据(ENTRY Data)

——用作过程(Procedure)的入口点(entry point)

例:A:PROC OPTIONS(MAIN)

… …

B:PROC;

A,B即为入口点,称为入口数据,可由CALL语句来调用 CALL B;

——用作入口变量(entry variable)

例:DCL A ENTRY VARIABLE;

DCL(A1,A2)ENTRY;

IF X THEN A=A1;

ELSE A=A2;

CALL A; 等价于:

IF X THEN CALL A1;

ELSE CALL A2;

2.4 定位数据(Locator data)

根据POINTER变量所取的值作为指定的地址

例: DCL P POINTER

DCL A CHAR(8)

DCL X CHAR(8)

l 基于POINTER

DCL B FIXED DEC(15) BASED(P);

P=ADDR(A)

此时B不占空间,根据P描述,也即为B 描述为FIXED DEC(15)

若P=ADDR(X)

则B又随P描述X了,于是B是活动的,随P变化.

l 基于ADDRess

DCL B FIXED DEC(7) BASED (ADDR(A))

此时,B 是固定的,它由A的地址唯一确定

001500 DCL CIC1 FIXED BIN(15);

001600 DCL CIC2 FIXED BIN(15);

001700 DCL CIC3 FIXED BIN(15);

001800 DCL CIC4 FIXED BIN(15);

001900 DCL CI1PTR POINTER;

002000 DCL CI1PTRF FIXED BIN(31) BASED(ADDR(CI1PTR));

002100 DCL CI2PTR POINTER;

002200 DCL CI2PTRF FIXED BIN(31) BASED(ADDR(CI2PTR));

002300 DCL UTSCIFC CHAR(4089) VAR;

002400 DCL 1 CIF1 BASED(ADDR(UTSCIFC)),

002500 2 CITOTL FIXED BIN(15), /* TOTAL RECORD LENGTH */

002600 2 UTSCIFC_BEG_DMY

002800 2 CIIDQTY FIXED BIN(15), /* ID QUANTITY */

009800 2 CIMTCAC FIXED DEC(15), RELATIVE MTC SAVING AC NO.*/

009810 2 CIHKDAC FIXED DEC(15), /* RELATIVE HKD SAVING AC NO.*/

009820 2 CIFCYAC FIXED DEC(15), /* RELATIVE FCY SAVING AC NO.*/

009830 2 CIPBCINT CHAR(1), /* PBC INT INDICATOR */

009900 2 CIPCLASS FIXED DEC(1), /* PRIVILEGE CLASS */

009910 2 CINAT CHAR(9), /* NATIONNALITY */

009920 2 CICDTDAT(10) CHAR(6), /* TAX RATE FOR BRANCH */

010000 2 CIHKDPVC FIXED DEC(15,2),/* STAFF HKD PRIV.CERT TOT P */

010100 2 CIHKDP FIXED DEC(15,2),/* HKD CERT TOTAL PRINCIPAL */

010200 2 CIUSDP FIXED DEC(15,2),/* USD CERT TOTAL PRINCIPAL */

011300 2 CIIDNO(CIC1 REFER(CIIDQTY))

011410 CHAR(19), /* ID NUMBER */

011500 2 CIIDNO_END_DMY CHAR(0),

011600 2 CISIGNO(CIC2 REFER(CISIGQTY))

011700 CHAR(8), /* SIGNATURE NO */

011800 2 CISIGNO_END_DMY

011900 CHAR(0),

012000 2 CINAME CHAR(CIC3 REFER(CINAMEL)),

012100 /* CUSTOMER NAME */

012200 2 CINAME_END_DMY CHAR(0),

012300 2 CITRAILER CHAR(1); /* OFF SET */

012400 DCL 1 CIF12 BASED(CI1PTR),

012500 2 CIADDUM CHAR(1), /* ADDRESS */

012620 2 CIADDR(3) CHAR(32); /* ADDRESS 040717 ADD */

012700 DCL 1 CIF13 BASED(CI2PTR),

012800 2 CIACCTQ FIXED BIN(15), /* RELATED ACCOUNT QUANTITY */

012900 2 CIACCT(CIC4 REFER(CIACCTQ))

013000 FIXED DEC(15); /* ACCOUNT NUMBER */

013080 /* ’ ’ GET TAX RATE FROM CIN */

****** **************************** Bottom of Data ***************************

有关指针CI1PTR和指针CI2PTR的使用如下:

CI1PTR = ADDR(CITRAILER);

CI2PTRF = CI1PTRF + 97;

3、数据组织(data cyganigation) 3.1数组(array)

l 一组同属性(attribute)的数据元素

l 一个数组只有一个名字

l 数组内的各项由其在数组内的相应位置表明

一维数组

例: DCL A(8) FIXED DEC(3);

表示数组A有8个元素,每个都是FIXED的三位数字,分别称A(1),A(2),A(3),……,A(8).

二维数组

例: DCL B(4,2) FIXED DEC(3);

PL/I中元素排序以“行”为主

B(1,1),B(1,2),B(2,1),B(2,2),

B(3,1),B(3,2),B(4,1),B(4,2)

界(bound) 下界 上界

数组A 1 8

数组B 1 4

数组B 1 2

范围(extent)

数组A: 8

数组B: 4,2

l 数组维数最大为15维

l 下界不为1时,上、下界必须明确写

一维数组 DCL C(4:11) 下界为4,上界为11,范围是8。

二维数组 DCL D(-4:3,4:11)

第一维下界为-4,上界为3

第二维下界为4, 上界为11

范围是8,8

l A(I)其中A表示数组名称(array name),I表示下标(Subscript)

下标值若非定点二进整数,则一定转为FIXED BINARY(15)

3.2结构(Structure)

l 有逻辑性的数据成分(data element)的组合

l 各数据成分的属性(attribute)可以不同

l 组成形式是层次结构(hierarchy)

例: DCL 1 PAYROLL,

2 NAME,

3 FNAME CHAR,

3 LNAME CHAR,

2 HOURS,

3 REGULAR FIXED DEC,

3 OVERTIME FIXED DEC

2 RATE,

3 REGULAR FIXED DEC,

3 OVERTIME FIXED DEC;

注:PAYROLL是主结构(major structure),NAME、HOURS、RATE是次结构(minor structure),FNAME、LNAME、REGULAR、OVETTIME等是基本名字(elementary name)

l 结构名字必须是单义唯一的,为免混淆采用限定名(qualified name)

如 HOURS.REGULAR

RATE. EGULAR

l 结构数组(array of structure)

结构内是以数组出现如:

一维结构数组:DCL 1 A(8),

2 B CHAR(3),

2 C FIXED DEC(4);

二维结构数组:DCL 1 A(6,6),

2 B (4),

3 C FIXED BIN(4)

3 D FIXED BIN(4)

2 E…….

指称元素采用限定名如 A(1,2),B(3),C

3.3其它属性(attribute)

3.3.1 DEFINE

变量数组元素的存储位置可被其它变量(或数组元素)所定义,并可指定位置(position)

例1. DCL A(10,10);

DCL B(10,10) DEF A;

例2. DCL A CHAR(50);

DCL B CHAR(10) DEF A;

DCL C CHAR(15) DEF A POS(11);

DCL D CHAR(25) DEF A POS(26);

3.3.2 LIKE

结构与结构间其结构形式、名字、属性等,可在说明语句(DECLARE)中用LIKE这个属性照抄。

例: DCL 1 A 2 B 2 C 3 D 3 E

当有说明语句:

DCL 1 X LIKE A;

即为:DCL 1 X 2 B 2 C 3 D 3 E

可以有:

2 主结构与主结构间用LIKE属性

2 主结构与次结构间用LIKE属性

2 次结构与主结构间用LIKE属性

2 次结构与次结构间用LIKE属性

3.3.3 INIT 赋初值(可为常数、字符串、表达式等)

2 赋常数为初值

DCL A FIXED DEC(5,4) INIT(3.1416);

2 赋字符串为初值

DCL NAME CHAR(B) INIT(‘BANK OF CHINA’)

2 用表达式作为赋初值

DCL B INIT(M*N);

2 用内部函数来赋初值

DCL DATE BUILTIN;

DCL YMD PIC’99/99/99’ INIT(DATE);

2 对数组赋初值

整个数组元素: DCL A(10) FIXED BIN(15) INIT((10)0)

部分数组元素: DCL A(15) CHAR(10)

INIT(‘ASM’,’COBOL’,*,’PL/I’)

则仅对A(1),A(2),A(4)分别赋初值为:ASM COBOL PL/I

2 对几个变量同时赋初值

DCL (A,B,C) FIXED BIN(15) INIT(0);

即同时对A,B,C赋以0

2 对一个内存进行初始化: 如:

0DCL TEST_RECORD CHAR(31);

DCL 1 TEST_REC BASED(ADDR(TEST_RECORD)),

2 TEST_BKNO FIXED DEC(3),

2 TEST_BK2C FIXED DEC(3),

2 TEST_CUR CHAR(3),

TEST_REC = ‘’;

这样可以对TEST_BKNO、TEST_BK2C、TEST_CUR按它们对应的类型进行初始化。

2 动态初始化:

DCL W FIXED BIN(15) INIT(REMQTY);

注:REMQTY是一个带返回值的程序。有REMQTY在编译前处理,因此REMQTY程序内用的变量最好是局部变量,特别读的COPY BOOK一定要定义为局部变量。

4、表达式(expression) 4.1运算符

算术运算 +,-,*,/,**

逻辑运算 ┑,|,&

比较运算 <,=,>,<=,>=,┑<,┑=,┑>

连接运算 ‖

4.2算术运算的优先级 ** * + / -

若要更改运算的优先顺序,可采用括号或前缀符作人为规定

4.3逻辑运算 A B ┑A ┑B A & B A | B 1 1

0 0 1 0 1 0 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 0

4.4比较运算

4.4.1算术比较

当运算对进行比较时,若进位制、精确度、型等不同则先进行数据转换

4.4.2字符比较

从左到右逐个字符相比

4.4.3位(二进位)的比较

从左到右逐位进行比较

注:1. 不同长的串进行比较时,把短者延长与长者相等后再作比较,

字符,延长部分是以空格补足

二进位,延长部分是以“0”B补足

2. 优先顺序

属性相同时:代数的、字符的、二进位的

属性不同时:二进位的、字符的、代数的

例:BIT与 FIXED DEC 作比较

则BIT –> FIXED BIN和FIXED DEC –> FIXED BIN再相比

3. 比较结果以BIT的一位表示

真——-’1’B 假——-’0’B

4.5 连接运算

把串(字符串、二进位字符串)进行合并的运算,

但若BIT与CHAR进行此运算,BIT一定要转换成CHAR再作合并。

4.6运算符的优先顺序

**,prefix+, prefix-,┑ *,/

infix+, infix- ‖

<,┑<,<=,=,┑=,>=,>,┑> & |

4.7数组表达式(Harray Expression)

4.7.1数组是由一组数据元素组成,而IF语句是只试验单一条件,所以数组不能用于IF语句里.

例: 设A为数组

则只能有IF A(I)……THEN 其中A(I)为A的某一元素,

不能写IF A…… THEN…….

4.7.2数组的运算

例:设数组A(3,2)

则 A*3的结果是:A(1,1)*3, A(1,2)*3,

A(2,1)*3,A(2,2)*3,

A(3,1)*3,A(3,2)*3

若B=A*3 则B必须与A有相同的界和范围

2 A+-B 对应元素相加、减

2 A*/B 对应元素相乘、除

4.8结构表达式(Structure expression)

4.8.1 结构与变量的运算,即是结构中基本名字与变量进行相应运算

例: DCL 1 A 2 B 3 C 3 D 2 E 3 F

设A * X即 A.C * X

A.D * X

A.F * X

4.8.2 结构与结构的运算,两结构的组成形式应一样,结果是:两结构的相应基本名字作所规定的运算.

例: DCL 1 A 2 B 3 C 3 D

本文来源:https://www.bwwdw.com/article/c8zx.html

Top