��������� � ����� ������������ ������� (original) (raw)
��������� � ����� ������������ �������
Copyright � 1994-2001 by Oberon microsystems, Inc., Switzerland.
All rights reserved. No part of this publication may be reproduced in any form or by any means, without prior written permission by Oberon microsystems. The only exception is the free electronic distribution of the Education Edition of BlackBox (see the accompanying copyright notice for details).
Oberon microsystems, Inc.
Technoparkstrasse 1
CH-8005 Zurich
SwitzerlandOberon is a trademark of Prof. Niklaus Wirth.
Component Pascal is a trademark of Oberon microsystems, Inc.
All other trademarks and registered trademarks belong to their respective owners.Authors
Oberon microsystems, Inc.
March 2001Authors of Oberon-2 report
H. Mossenbock, N. Wirth
Institut fur Computersysteme, ETH Zurich
October 1993Author of Oberon report
N. Wirth
Institut fur Computersysteme, ETH Zurich
1987� ������� �� ������� ����: �.�.������, 2001.
�������� ������� ������������ ���, ������.������� ����������� � ��������� ���������� �������� Oberon microsystems, Inc.
������� �������� �������� � ������������ ������� BlackBox Component Builder, v.1.4, ��� ��������� "����������� ����������������. �������� � ��������� � ������������ ����������" (�.�.������, ������� ������������� ������, ���������� ��������� ���).
������������ �������� � �������� ������������� �� �����:
�. ���� "���������������� �� ����� ������-2", ������, ���, 1987, ������� �.�. ����������� � �.�. �������� ��� ���. �.�. ���������.
� ���������� ������� ���� ���������� ������� ���������.
� ������� ������� � ���������� �����������.
����������
��������
2. ���������
3. ������� � �����������
4. �������� � ������� ���������
5. �������� ��������
6. �������� �����
6.1 �������� ����
6.2 ���� ��������
6.3 ���� �������
6.4 ������������ ����
6.5 ����������� ����
6.6 ���� ������� �����
7. �������� ����������
8. ���������
8.1 ��������
8.2 ��������
9. ���������
9.1 ������������
9.2 ������ ��������
9.3 ����������� ������������������
9.4 �������� ��������� IF
9.5 ��������� ������ CASE
9.6 ���� � �������� ����������� WHILE
9.7 ���� � �������� ��������� REPEAT
9.8 ���� � ����� FOR
9.9 ����������� ���� LOOP
9.10 ��������� �������� RETURN � ������ EXIT
9.11 ��������� ������������� ���� WITH
10. �������� ��������
10.1 ���������� ���������
10.2 ������
10.3 ���������������� ���������
10.4 �����������
11. ������
���������� A: ����������� ��������
���������� B: ��������� ������������� �������
���������� C: ��������� �������� �������� �����
���������� D: ������������ ���������� � ����� ����������
1. ��������
������������ ������� � ������������������� ������ ����� ������-2, ������������� ��������� Oberon microsystems. �������� Oberon microsystems ���������� �. ̸������� � �. ����� �� ��������� ���������� ������������ �� ��������� � ����� ������-2 � �������� ������ ������� ���������.
������������ ������� � ���� ������ ���������� � �������� ������ �������, ������-2 � ������. ��� ����� ������ ����� � ������� ���������, �����������, ���������� ����������, ����������� ����� ���������� � ������ (����������� ���������, static typing) � ������� �������� ����� (� ��� ����� ����� ������� �������), <�����������> ��������������� ����� [type extension] ������ � ��������, ������������ �������� �������, � ����� <��������������> ���� ������.
��������������� ����� ������ ������������ ������� ��������-��������������� ������. ������ � ���������� ������������ ���� ������ [abstract data type] <�������������� "�����������" ������������� ����� � ��������������� ������, �������� �� ����������� ������, ������������� � ������� ������� ABSTRACT � ������������ �������>, ��������� �� ��������� ������ [private data] (�.�. ��� ���������) � ��������, ����������� � ����� �������. ����������� ���� ������ ������������ ��� ������, ����������� <�����������> ��������������� [extensible records]. � ������������ ������� ��� ������� ����� ������� ��������-��������������� ������ ������������ �������������� ������� ������������ ������, ����� �������������� ����� �������� ��� ������� �������. <���������� ������� ������������ ��������� ����������� ���������� � ���� ������ ��������� ����������� � �������� ������, ������� � �������� ��� ��������� �������� �������� ������� "�������" � "������" ��� �������� �����.>
������ ������ � ��������� ����� ���������� [complete type safety] � ���������� ������������ ��������� ������ ������ ������������ ������� �����������-��������������� ������.
������ ��������� �� �������� ���������. ��� ��������� ���������. ��� ������� � ������� ������������ ��� �������������. ����������� ����������������� ��������� ���������, ���� ������ ��� ��������������� ��������� ����� ���� �������� �� ���������������� ������ �����, ���� ������ ��� ��������� ����������� �� ���������������� ����������� ���, ��� ������������� ������������� �� ������� ��������.
���������� A ���������� ��������� �������, ������������ ��� ��������� ������ �������� ����� � ������������ �������. � ������ ����� ������� ���� ��������, ����� ������� �� �� ����������� ����� (��������, _����������_���).
������������� �������������� ������������� ����������� ����� � �����-������� [super calls], �.�. ��� ��������� ����������� ����������. ��� ���� ���������, ����� ��������� ������������� ������������ �������� �� �������-2. ��������� ���� ������� ����� ���� ��������� � ����������� �������� ��������. � ���������� ������ ��, ��� �������� ���� ���������� �������, �������� ������� ������.
2. ���������
��� �������� ���������� ������������� ������� ������������ ����������� ��������� ������-����� (����). ������������ ����������� �������� |. ���������� ������ [ � ] �������� ���������������� ������������ � ��� ���������, � �������� ������ { � } �������� ��� ��������� ���������� (0 ��� ����� ���). � ������ ������������� ��� ������������� ������ ������������ ������� ������ ( � ). �������������� ������� ���������� � ������� ����� (��������, Statement). ������������ ������� ���� ���������� � ��������� ����� (��������, ident), ���� �������� ������ �������� ������� (��������, BEGIN), ���� ������������ ��������� ����� (��������, ":=").
3. ������� � �����������
����������� (������������) ������ ����������� ����� ���������� �������� ISO 8859-1, �.�. ���������� Latin-1 ������ ����� ASCII. ����� ������� ���� ��������������, �����, �������� � ������������. ������� ��������� ��������� ����������� �������: ������� � ����� ����� �� ������ ���������� ������ ������ (�� ����������� ������������, � ����� �������� � �������� ��������). ��� ������������, ���� ��� �� ����� ��� ���������� ���� ���������������� ������. ������� � ��������� ����� �����������.
1. �������������� [identifiers] ���� ������������������ ����, ���� � �������� �������������. ������ ������ �� ������ ���� ������.
ident = (letter | "_") {letter | "_" | digit}.
letter = "A" .. "Z" | "a" .. "z" | "�".."�" | "�".."�" | "�".."�".
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
�������: x Scan Oberon2 GetSymbol firstLetter
2. ����� ���� ����� ��� ������������ ��������� (��� �����). ����� ����� ��������� �������� INTEGER, ���� �������� ��������� ����������� <��������� �������� ����> INTEGER, ��� LONGINT � ��������� ������ (��. 6.1). ���� ��������� ������ � ��������� 'H' ��� 'L', ������������� �������� 16-������, � ��������� ������ ������������� ����������. ������� 'H' ������������ ��� ������ 32-������ �������� � ��������� -2147483648 .. 2147483647. ����������� �� ����� 8 �������� 16-������ ����. ������� 'L' ������������ ��� ������ 64-������ ��������.
������������ ����� ������ �������� ���������� �����. ��� ����� ����� ��������� ���������� ���������� ���������. ����� E �������� "�������� �� 10 � �������". ������������ ����� ������ ����� ��� REAL.
number = integer | real.
integer = digit {digit} | digit {hexDigit} ( "H" | "L" ).
real = digit {digit} "." {digit} [ScaleFactor].
ScaleFactor = "E" ["+" | "-"] digit {digit}.
hexDigit = digit | "A" | "B" | "C" | "D" | "E" | "F".
�������:
1234567 INTEGER 1234567
0DH INTEGER 13
12.3 REAL 12.3
4.567E8 REAL 456700000
0FFFF0000H INTEGER -65536
0FFFF0000L LONGINT 4294901760
3. ������ [characters] ������������ ����� ���������� ������� � 16-������ �������, �� ������� ������� ����� X.
character = digit {hexDigit} "X".
4. �������� ������� [strings] � ������������������ �����, ����������� � ��������� (') ��� ������� (") �������. ����������� ������� ������ ������ ��������� � �����������, � �� ����������� ������ �������. ����� ����� � ������� ���������� �� ������. ������� ����� 1 ����� �������������� �����, ��� ��������� �������� ���������, � ��������.
string = ' " ' {char} ' " ' | " ' " {char} " ' ".
�������: "Component Pascal" "Don't worry!" "x"
5. �������� � ������������ [operators and delimiters] ���� ����������� ������, ���� ����� ��� �������� �����, ������������� ����. �������� ����� �������� ������ ������� ����� � �� ����� �������������� ��� ��������������.
+ | := | ABSTRACT | EXTENSIBLE | POINTER |
---|---|---|---|---|
- | ^ | ARRAY | FOR | PROCEDURE |
* | = | BEGIN | IF | RECORD |
/ | # | BY | IMPORT | REPEAT |
~ | < | CASE | IN | RETURN |
& | > | CLOSE | IS | THEN |
. | <= | CONST | LIMITED | TO |
, | >= | DIV | LOOP | TYPE |
; | .. | DO | MOD | UNTIL |
| | : | ELSE | MODULE | VAR |
$ | ELSIF | NIL | WHILE | |
( | ) | EMPTY | OF | WITH |
[ | ] | END | OR | |
{ | } | EXIT | OUT |
6. ����������� [comments] ����� ����������� ����� ����� ����� ������ � ���������. ��� ������������ ����� ������������ ������������������ �����, ������������� ������� (* � ������������� ������� *). ����������� ����� ���� ������� ���� � �����. ��� �� ������ �� ����� ���������.
4. �������� � ������� ���������
������ �������������, ������������� � ���������, ������ ���� ������ � ������� �������� [declaration], �� ����������� �������, ����� ��� ���������������� [predeclared] �������������. �������� ����� ������ ��������� ������������ �������� ������� <������ "������" ������������� ����� � ��������������� ������ � "��, ��� ����� ���� ������� [declared] � �����">, ����� ��� �������� �� �� ����������, �����, ���������� ��� ����������. ����� ������������� ������������ ��� ������ �� ��������� � ��� ������.
������� ��������� [scope] ������� x ����������� ���������������� �� ����� ��� �������� �� ����� ����� (������, ��������� ��� ������), � �������� ����������� �������� � �� ��������� � �������� ������, ����� �������, ��������� ��������� [local]. �� ���� ������� ����������� ������� ��������� �������� � ����� �� ������, ��������� � ������, ��������� � ������. ������� ��������� ������:
1. ������������� ����� ���������� ������ ���� ������ � ������ ������� ��������� (�.�. ������� ������������� �� ����� ���� �������� � ����� ������);
2. �� ������ ����� ��������� ������ � ��� ������� ���������;
3. �������� ���� T, ���������� ������ �� ������ ��� T1 ����� ������ � ������, ��� T1 ��� �� ��������. �������� ���� T1 ������ ��������� ����� � ��� �� �����, � ������� ����������� T;
4. �������������� ����� ������� [record fields] (��. 6.3) ��� ������� (��. 10.2) ����� ����������� ������ � ��������� ������ [designators]. <� ����� �� ������-2 ��� �������� ���������������� ������� designator ������� ������������� ����� "�����������", ��� �� �������������� �������.>
�� ���������������, ��������� � ����� ������, � ��� �������� ����� ��������� ����� �������� (" * " ��� " - "), ����� �������, ��� �� ��������������. ������������� x, ���������������� �� ������ M, ����� ������������ � ������ ������� ��� �������, ��� ��� ����������� M (�� ��. 11). � ����� ������� ������������� ������������ ��� M.x � ���������� ����������������� ��������������� [qualified identifier]. ���������� � ���� �������, ���������� � ����� ��������� �������� " - ", �������� � ������������� ������� ������ ��� ������ [are read-only] (� ������ ���������� � �����) ��� ������ ��� ���������� [implement-only] (� ������ �������).
Qualident = [ident "."] ident.
IdentDef = ident [" * " | " - "].
��������� �������������� �������� �����������������; �� �������� ������� � ��������� ��������:
ABS | (10.3) | INTEGER | (6.1) |
---|---|---|---|
ANYPTR | (6.1) | FALSE | (6.1) |
ANYREC | (6.1) | LEN | (10.3) |
ASH | (10.3) | LONG | (10.3) |
ASSERT | (10.3) | LONGINT | (6.1) |
BITS | (10.3) | MAX | (10.3) |
BOOLEAN | (6.1) | MIN | (10.3) |
BYTE | (6.1) | NEW | (10.3) |
CAP | (10.3) | ODD | (10.3) |
CHAR | (6.1) | ORD | (10.3) |
CHR | (10.3) | REAL | (6.1) |
DEC | (10.3) | SET | (6.1) |
ENTIER | (10.3) | SHORT | (10.3) |
EXCL | (10.3) | SHORTCHAR | (6.1) |
HALT | (10.3) | SHORTINT | (6.1) |
INC | (10.3) | SHORTREAL | (6.1) |
INCL | (10.3) | SIZE | (10.3) |
INF | (6.1) | TRUE | (6.1) |
5. �������� ��������
�������� ��������� ��������� ������������� � ��������� ������������ ���������.
ConstantDeclaration = IdentDef "=" ConstExpression.
ConstExpression = Expression.
����������� ��������� � ��� ���������, ������� ����� ���� ��������� ��� ������� ������������ ��������� ��� ������������ ���������� ���������. ��� �������� ���� ��������� (��. 8) ��� ���������������� ������� (10.3), ������� ����� ���� ��������� ��� ����������. ������� ����������� ���������:
N = 100
limit = 2*N - 1
fullSet = {MIN(SET) .. MAX(SET)}
6. �������� �����
��� ������ ���������� ��������� ��������, ������� ����� ��������� ���������� ����� ����, � ����� ���������� � ��� ��������. �������� ���� ��������� ������������� � �����. � ������ ����������������� ����� (�������� � �������) ��� ����� ���������� ��������� ���������� ����� ����. ����������������� ��� �� ����� ��������� ����.
TypeDeclaration = IdentDef "=" Type.
Type = Qualident | ArrayType | RecordType | PointerType | ProcedureType.
�������:
Table = ARRAY N OF REAL
Tree = POINTER TO Node
Node = EXTENSIBLE RECORD
key : INTEGER;
left, right: Tree
END
CenterTree = POINTER TO CenterNode
CenterNode = RECORD (Node)
width: INTEGER;
subnode: Tree
END
Object = POINTER TO ABSTRACT RECORD END;
Function = PROCEDURE (x: INTEGER): INTEGER
6.1 �������� ���� [base types]
�������� ���� ������������ ����������������� ����������������. ��������������� �������� ���������� � 8.2, � ���������������� ���������-������� � � 10.3. �������� �������� ����� ������:
1. | BOOLEAN | ���������� �������� TRUE � FALSE |
---|---|---|
2. | SHORTCHAR | ������ ������ Latin-1 (0X .. 0FFX) |
3. | CHAR | ������ ������ Unicode (0X .. 0FFFFX) |
4. | BYTE | ����� �� MIN(BYTE) �� MAX(BYTE) |
5. | SHORTINT | ����� �� MIN(SHORTINT) �� MAX(SHORTINT) |
6. | INTEGER | ����� �� MIN(INTEGER) �� MAX(INTEGER) |
7. | LONGINT | ����� �� MIN(LONGINT) �� MAX(LONGINT) |
8. | SHORTREAL | ������������ ����� �� MIN(SHORTREAL) �� MAX(SHORTREAL), �������� INF |
9. | REAL | ������������ ����� �� MIN(REAL) �� MAX(REAL), �������� INF |
10. | SET | ��������� ����� ����� �� ��������� �� 0 �� MAX(SET) |
���� 4-7 ���� ����� ����, ���� 8 � 9 ���� ������������ ����, � ������ ��� ���������� ��������� ������. ��� �������� ��������; ������� ��� �������� ������� (��������� �������� ��������):
REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE
���� 2 � 3 ���� �������� ���� �� ��������� ��������� �����:
CHAR >= SHORTCHAR
6.2 ���� �������� [array types]
������ � ���������, ��������� �� ���������� ���������� ���������, ������� ���� � ��� �� ���, ���������� ����� ���������. ���������� ��������� ������� ���������� ��� ������. �������� ������� ���������� � ������� ��������, ���������� ������ ������� �� ��������� �� 0 �� ����� ����� 1.
ArrayType = ARRAY [Length {"," Length}] OF Type.
Length = ConstExpression.
��� ����
ARRAY L0, L1, ..., Ln OF T
���������������� ��� ����������� ������ ���
ARRAY L0 OF
ARRAY L1 OF
...
ARRAY Ln OF T
�������, ��������� ��� �����, ���������� ��������� ���������. �� ������������� ���������� �������� ������ ��� ���������� (��. 6.4), ������ ��������� �������� ��������, � ����� ������ ���������� ���������� (��. 10.1). �������:
ARRAY 10, N OF INTEGER
ARRAY OF CHAR
6.3 ���� ������� [record types]
������ ��� ���������, ��������� �� �������������� ���������� ���������, ���������� ������, ��������, ������� ������ ����. �������� ���� ������� ��������� ��� � ��� ������� ����. ������� ��������� ��������������� ����� ���������������� �� ����� �� �������� �� ����� ������� ����, �� ��� ����� ������ ������ ��������� ����, ������������ ���� ���������� ������� ���� (��. 8.1). ���� ��� ������� ��������������, �� �������������� �����, ������� ����� ����� �������� ��� ������������ ������, ������ ���� ��������������� ������� ��������. ��� ���������� ���������� ������ [public fields]; ������������ �������� ���������� ���������� ������ [private fields].
RecordType = RecAttributes RECORD ["("BaseType")"] FieldList {";" FieldList} END.
RecAttributes = [ABSTRACT | EXTENSIBLE | LIMITED].
BaseType = Qualident.
FieldList = [IdentList ":" Type].
IdentList = IdentDef {"," IdentDef}.
������������� ������� ���� ������� ���������� �������� ��� ����������� ������ �� ��������� ���������:
ABSTRACT, EXTENSIBLE � LIMITED.
���������� ���� �������, ����������� ��� ABSTRACT, �� ����� ���� ��������� <�����: �������������� [instantiated]>: �� ����� ������������ �� ����������, �� ����� ������ ����. ����������� ���� <�.�. ��������� � ��������� ABSTRACT> ������������ ������ ��� ������� ���� ��� ������ ����� ������� (��. ����).
���������� ���� �������, �������� ������� LIMITED, ����� ����������� [allocated] ������ ������ ���� ������, ��� ������ ������ ���. ����������� ��������� ��� � ������������ ���������� ����������� �������� ���������� (��. 7), ��� � � ������������� ���������� � ������� ����������� ��������� NEW (10.3).
��� �������, ���������� ��� ABSTRACT ��� EXTENSIBLE, �������� �����������, �.�. ����� ���������� ����� ��� ������� ��� ���������� ������ ����. � �������
T0 = EXTENSIBLE RECORD x: INTEGER END
T1 = RECORD (T0) y: REAL END
T1 �������� (����������������) �������� [extension] ���� T0, � T0 � (����������������) ������� [base type] ��� T1 (��. ���������� A). <� ��������� ������ base type ������������ � ���� ������ ���������, ������� ������ ������ ������� ��������.> ���-������� [extended type] T1 ������� �� ����� ����-������ � �����, ����������� � T1. ��� ��������������, ��������� � ����-�������, ������ ���� ������� �� ���������������, ��������� � ��� ������. ���-������ ������������ ���� ������� ������ ���� �����������.
����� ����, � �������� ����-������ ����� ������������ ������������ ���. � ���� ������ � �������� ����-������ ������������ ���� ������� ������������ ������� ��� ������� ������� ���������.
������ �������������� ��� �������, ���������� �������� �������� (�.�. �� �����������������) ���� �������.
������ ������ �������� ������� �������� ����������������� ���� ANYREC. ANYREC �� �������� ������� ����� � ����� �������������� ������ � ��������� ���������� � ����������-����������.
������ ���������:
������� | ����������� �������� [extension] | ���������� |
---|---|---|
����������� | ��� | �� |
EXTENSIBLE | �� | �� |
ABSTRACT | �� | ��� |
LIMITED | ������ � ������������ | ������ |
������� �������� ����� �������:
RECORD
day, month, year: INTEGER
END
LIMITED RECORD
name, firstname: ARRAY 32 OF CHAR;
age: INTEGER;
salary: REAL
END
6.4 ������������ ���� [pointer types]
����������, ������� ������������ ��� P, ��������� � �������� �������� ��������� �� ���������� ���������� ���� T. T ���������� ������� ����� [pointer base type] ��� P � ������ ���� ����� ������� ��� ����� ��������. ������������ ���� ��������� ��������� �������-������ ��� ����� ������� �����: ���� ��� T1 �������� �������� ���� T, � P1 ����� ��� POINTER TO T1, �� P1 ����� �������� �������� ���� P.
PointerType = POINTER TO Type.
���� p � ���������� ���� P = POINTER TO T, �� ����� ���������������� ��������� NEW(p) (��. 10.3) ��������� ���������� ���� T � ��������� ������. ���� T � ��� ������� ��� ��� �������� � ������������� ������, �� ���������� ������� ��������� ���������� NEW(p); ���� T � n-������ �������� ������, �� ���������� ������� ��������� ���������� NEW(p, e0, ..., en-1), ��� T ����������� � �������, ����������� ����������� e0, ..., en-1. � ����� ������� ��������� �� ����������� ���������� ������������� ���������� p. p ����� ��� P. �������������� [referenced <�.�. ��, �� ������� ��������� p>] ���������� p^ (��������: p-��������������), ����� ��� T. ����� ��������� ����� ��������� �������� NIL, ������� �� ��������� �� �� ����� ���������� ������.
��� ���� � �������� ����� ����������� ������ ��� ������� ���������; � ���������, �������� ��� ������������ � ��� ������������ � ����������� ���������� ��������������� � NIL.
���������������� ��� ANYPTR ������������ ��� POINTER TO ANYREC. ������� ����� ��������� �� �����-���� ��� ������� �������� �������� ���� ANYPTR. ��������� NEW ��������� � ���������� ���� ANYPTR ������.
6.5 ����������� ����
���������� ������������ ���� T ����� � �������� �������� ��������� ��������� ��� NIL. ���� ���������� ���� T ��������� ��������� P, �� ������ ���������� ���������� (��. 10.1) ��� P � T ������ ��������������� [match] (��. ���������� A). P �� ����� ���� �� ���������������� ����������, �� �������, �� ���� ��������� � ������ ���������.
ProcedureType = PROCEDURE [FormalParameters].
6.6 ���� ������� ����� [string types]
�������� ����� ������� ����� ���� ������������������ �����, �������������� ����-������� (0X). ����� ������� � ��� ���������� ����� � ���, �������� ����-������.
������� ����� ���� ���� �����������, ���� ��������� � ������� ��������� ����. ��� ����� ������� ��� ���������������� ���������������, �.�. ��� ��� �������� �� �����.
����������� �������, ��������� ������ �� ����� � ��������� 0X..0FFX, � �������, ���������� � ������� ��������� ���� SHORTCHAR, ����� ��� Shortstring, ��� ��������� � ��� String.
7. �������� ����������
�������� ���������� ������ ����������, ��������� ��� ��� ������������� � ��� ������.
VariableDeclaration = IdentList ":" Type.
���������� ����� ������� � ������������ ����� ����� ��� ����������� ��� (��� ���, � ������� ��� ������� � ����� ������ �������� ��� �� �����) � ������������ ��� (��� �� �������� ��� ���������� ���������). ��� ���������� � ����������-���������� ���� ������� ������������ ��� ����� ���� �������� �� ������������ ����. ����������� ��� ����������, ����� ���� ������ ��������. ������������ ��� ������������ ��� ������ ������� (��. 10.2).
������� �������� ���������� (��. ������� � ��. 6):
i, j, k: INTEGER
x, y: REAL
p, q: BOOLEAN
s: SET
F: Function
a: ARRAY 100 OF REAL
w: ARRAY 16 OF
RECORD
name: ARRAY 32 OF CHAR;
count: INTEGER
END
t, c: Tree
8. ���������
��������� ��� �����������, ����������� �������������� �������, � ������������ � �������� ������������� ��������� � ������� �������� ���������� ��� ���������� ������ �������� ����������� ���������� �������� � ��������-�������. ��������� ������� �� ��������� � ��������. ������� ������ ����� �������������� ��� ��������� ���������� ������ ����� ���������� � ����������.
8.1 ��������
�� ����������� ������������� �������� � ���������� [literal] �������� (�.�. �����, ����� ��� �������), �������� ������������ ���������� ������� [designators]. ��������� ��� �������� �������������, ������������ ���������, ���������� ��� ���������. ���� ������������� ����� ���� �������������� [qualified] ��������������� ������ (��. ��. 4 � 11), � ����� ���� �� ��� ����� ��������� ��������� [selectors], ���� ������������ ������ �������� ��������� ������� ��� ����� ������.
Designator = Qualident {"." ident | "[" ExpressionList "]" | "^" | "(" Qualident ")" | ActualParameters} [ "$" ].
ExpressionList = Expression {"," Expression}.
ActualParameters = "(" [ExpressionList] ")".
���� a � ��������� ���, ������������ ������, �� a[e] ���������� ��� ������� ������� a, � �������� ������ ����� �������� �������� ��������� e. ��� �������� e ������ ���� �����. ��������� ���, ������� ��� a[e0, e1, ..., en], �������� ����������� ��� a[e0][e1]...[en]. ���� r �������� ��������� ������, ������������ ������, �� r.f ���������� ���� f ������ r ��� ������ f ������������� ���� ������ r (10.2). ���� a ��� r �������� ������ ��� ������, �� ��� �� ����������� ��� a[e] � r.f.
���� p � ��������� ���, ������������ ���������, �� p^ ���������� ����������, �� ������� ��������� p. ��������� ����� p^.f, p^[e] � p^$ ����� ��������� �� p.f, p[e] � p$, �.�. ��������� ������, ������� � �������� ������� ������������� ������������� [dereferencing]. ������������� ����� ���������������, ���� ��������� ������������� ���������� ���� ������ ��� ���� ������ (9.1), ���� ��������� ������������ ��� ����������� ��������, ��������������� ����������� ��������� ���� ������ ��� ���� ������ (10.1), ��� ���� ��������� ������������ ��� �������� ����������� ��������� LEN (10.3).
������ ���� [type guard] v(T) ������������, ��� ������������ ��� ���������� v ���� T (��� ������� ���� T), �.�. ���������� ��������� �������� ������������, ���� ������������ ��� ���������� v �� T (� �� ������� T). ����� ������ ���������� ����� ���������� v ��������� ������� ����������� ��� T. ������ ���������, ����
1. v �������� IN ��� VAR ���������� ���� ������� ��� v �������� ���������� �� ������, � ����
2. T �������� �������� ������������ ���� ���������� v
���� ������������ ������ � ��������� ��� ����������, �� <� ��������� ���������> ��������� ��� ��������� �� �� �������� � ������ ������. ���� ��� ���������, �� ��������� ��� ��������� �� ��� ���������, �������� ������, ����� �� ��� ������� (��������, ������) ������ ����������, � � ���� ������� ��� ������������� ����� ��������� � ������������ ������������ ���������. ����������� ��������� ������ ��������������� ���������� ��� � ������� ������� �������� (��. 10.1).
���� a � ��������� ���, ������������ ������ �����, �� a$ ���������� ������, �������������� ����-�������, ������������ � a. ���� a �� �������� ������ 0X, �� ������������� a$ �������� � ������ ��� ���������� ���������. �������� $ ����������� ������, ���� a ������������ ��� ������� ������������ (8.2.4), �������� ��������� (8.2.5) ��� ����� �� ���������������� �������� LONG � SHORT (10.3).
������� ��������� ���� (��. ������� � ��. 7):
i (INTEGER)
a[i] (REAL)
w[3].name[i] (CHAR)
t.left.right (Tree)
t(CenterTree).subnode (Tree)
w[i].name$ (String)
8.2 �������� [operators]
� ���������� ������������� ����������� ��������� ������� ������� � ������� ������������ [precedences] (�.�. ����� ���������� [binding strengths]). �������� ~ ����� ��������� ���������, �� ��� ������� ����������������� ��������, ���������� �������� �, �������, ���������. �������� � ���������� ����������� ��������� �������� ����� �������. ��������, x-y-z ���������� (x-y)-z.
Expression = SimpleExpression [Relation SimpleExpression].
SimpleExpression = ["+" | "-"] Term {AddOperator Term}.
Term = Factor {MulOperator Factor}.
Factor = Designator | number | character | string | NIL | Set | "(" Expression ")" | "~" Factor.
Set = "{" [Element {"," Element}] "}".
Element = Expression [".." Expression].
Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOperator = "+" | "-" | OR.
MulOperator = "*" | "/" | DIV | MOD | "&".
��������� �������� ����������� � ������������� ��������. ��������� �������� ��������� � ��������� ��������� �����, ��������� ��������� ��������. � ���� ������� ����������� �������� ������������ ������ ���������. �������� ������ ���� ���������� �� ��������� [expression compatible] �� ��������� � �������� (��. ���������� A).
8.2.1 ���������� ��������
OR | ���������� ��� | p OR q | "���� p, �� TRUE, ����� q" |
---|---|---|---|
& | ���������� � | p & q | "���� p, �� q, ����� FALSE" |
~ | ��������� | ~ p | "�� p" |
��� �������� ��������� � ��������� ���� BOOLEAN � ���� ��������� ���� BOOLEAN. ������ ������� ����������� ��� ����������� ������ ���� ��������� ������� ����� FALSE. ������ ������� ����������� � �����������, ������ ���� ��������� ������� ����� TRUE.
8.2.2 �������������� ��������
+ | ����� |
---|---|
- | �������� |
* | ������������ |
/ | ������������ ������� |
DIV | ����� ������� |
MOD | ������� |
�������� +, -, * � / ��������� � ��������� �������� �����. ����� ���������� ����� REAL � ������ �������� ������� (/) ��� ���� ���� �� ��������� ����� ��� REAL. � ��������� ������ ����� ���������� ����� SHORTREAL, ���� ��� ������ �� ��������� � SHORTREAL, LONGINT ���� ��� ������ �� ��������� � LONGINT, ��� INTEGER � ����� ������ ������. ���� ��������� ������������ �������� ������� �����, ����� ������������ ������������ �����, �� �� ���������� �� ���������������� �������� INF � ��� �� ������, ��� � �������� ���������. �������, ��� ��� ������� ��������� � � 1.0/0.0, �� �� � 0.0/0.0, �.�. ��������� ��������� �� ����� ������������� ���������� ������ � �������� � ������ ��� ���������� ���������. ���� ������������ ����������� ��������, - ���������� �������� �����, � + ���������� ������������� ��������. �������� DIV � MOD ��������� ������ � ����� ���������. ��� ������� ���������� ���������:
x = (x DIV y) * y + (x MOD y)
0 <= (x MOD y) < y ��� 0 >= (x MOD y) > y
�������, ���: x DIV y = ENTIER(x / y)
�������:
x | y | x DIV y | x MOD y |
---|---|---|---|
5 | 3 | 1 | 2 |
-5 | 3 | -2 | 1 |
5 | -3 | -2 | -1 |
-5 | -3 | 1 | -2 |
�������, ���:
(-5) DIV 3 = -2
��
-5 DIV 3 = -(5 DIV 3) = -1
8.2.3 �������� ��� �����������
+ | ����������� |
---|---|
- | �������� (x - y = x * (-y)) |
* | ����������� |
/ | ������������ �������� (x / y = (x-y) + (y-x)) |
�������� ��� ����������� ��������� � ��������� ���� SET � ���� ��������� ���� SET. ����������� ����� ���������� ���������� ��������� x, �.�. -x ���������� ��������� ����� �� 0 �� MAX(SET), ������� �� �������� ���������� ��������� x. �������� ��� ����������� �� �������� �������������� ((a+b)-c # a+(b-c)).
����������� ��������� ���������� �������� ��������� ������������� ��� ��������� ����� ��������� ��������. �������� ������ ���� ������ � ��������� 0..MAX(SET). �������� a..b ���������� ��� ����� i �����, ��� i >= a � i <= b.
8.2.4 �������� ��� ���������
+ ������������
�������� ������������ ����������� � ��������� ����� �������. ������������ ������� ������� �� ����� ������� ��������, �� �������� ������� ������ ������� ��������. ���� ��� �������� ����� ��� Shortstring, �� ��� ���������� ����� Shortstring, � ��������� ������ ��� ���������� ����� String.
8.2.5 ���������
= | ����� |
---|---|
# | ������� |
< | ������ |
<= | ������ ��� ����� |
> | ������ |
>= | ������ ��� ����� |
IN | �������������� ��������� |
IS | �������� ���� |
��������� ���� ��������� ���� BOOLEAN. ��������� =, #, <, <=, > � >= ��������� � �������� �����, �������� ����� � ����� ������� �����. ��������� = � # ��������� ����� � BOOLEAN � SET, � ����� � ������������ � ����������� ����� (������� �������� NIL). x IN s �������� "x �������� ��������� s". x ������ ���� ����� � ��������� 0..MAX(SET), � s ����� ��� SET. v IS T �������� "������������ ��� ���������� v ����� T (��� ������� ���� T)" � ���������� ��������� ����. ��� ���������, ����
1. v �������� IN ��� VAR ���������� ���� ������� ��� ���������� �� ��� �������, � ����
2. T �������� �������� ������������ ���� v
������� ��������� (��. ������� � ��. 7):
1991 | INTEGER |
---|---|
i DIV 3 | INTEGER |
~p OR q | BOOLEAN |
(i+j) * (i-j) | INTEGER |
s - {8, 9, 13} | SET |
i + x | REAL |
a[i+j] * a[i-j] | REAL |
(0<=i) & (i<100) | BOOLEAN |
t.key = 0 | BOOLEAN |
k IN {i..j-1} | BOOLEAN |
w[i].name$ <= "John" | BOOLEAN |
t IS CenterTree | BOOLEAN |
9. ��������� [statements]
��������� ���������� ��������. ���� ������������ � ����������������� ���������. ������������ ��������� �� �������� ������, ������� ���� �������� �����������. ���: ������������, ����� ���������, �������� �������� RETURN � �������� ������ EXIT. ����������������� ��������� ������� �� ������, ������� ���� �������� �����������. ��� ������������ ��� ��������� �����������������, ���������, ����������� � �������������� ����������. �������� ����� ���� ������, � � ���� ������ �� ���������� ���������� ��������. ������ �������� ��������, ����� �������� ������� ���������� � ����������� �������������������.
Statement = [ Assignment | ProcedureCall | IfStatement | CaseStatement |
WhileStatement | RepeatStatement |
ForStatement | LoopStatement | WithStatement |
EXIT | RETURN [Expression] ].
9.1 ������������ [assignments]
������������ �������� ������� �������� ���������� �����, ������������ ����� ����������. ��������� ������ ���� ����������� �� ������������ [assignment compatible] � ���������� (��. ���������� A). �������� ������������ ������������ ��� ":=" � ������������ ���������� ������.
Assignment = Designator ":=" Expression.
���� ��������� e ���� Te ������������� ���������� v ���� Tv, ���������� ���������:
1. ���� Tv � Te ����� ��� ������, ������������ � ����������� ���� e � v ��� ����� � ������������� ��� ���� ����� ����;
2. ���� Tv � Te ����� ������������ ����, �� ������������ ����� v ���������� ������������ ��� e;
3. ���� Tv � ������ ��������� ����, � e � ������� ����� ����� m < LEN(v), �� v[i] ���������� ������ ei ��� i = 0..m-1, � v[m] ���������� ������ 0X. ���� m >= LEN(v), �� � �������� ���������� ������������ ������.
������� ������������ (��. ������� � ��. 7):
i := 0
p := i = j
x := i + 1
k := Log2(i+j)
F := Log2 (* ��. 10.1 *)
s := {2, 3, 5, 7, 11, 13}
a[i] := (x+y) * (x-y)
t.key := i
w[i+1].name := "John"
t := c
9.2 ������ �������� [procedure calls]
����� ��������� ������������ ���������. �� ����� ��������� ������ ����������� ����������, ������� �������� ��������������� ���������� ���������, ������������ � �������� ��������� (��. ��. 10). ������������ ��������������� �� ��������� ���������� � ������� ����������� � ���������� ����������. ������� ��� ���� ����������: ���������-���������� � ���������-��������.
���� ���������� �������� �������� ����������-����������, �� ��������������� ����������� �������� ������ ���� ��������� ������ ��������� ����������. ���� �� ���������� ������� ����������������� ����������, �� ��������������� ��������� ����������� ��� ����������� ������������ ��������� ������ �����������, �.�. �� ���������� ���������. ���� ���������� �������� � ��������-��������, �� ��������������� ����������� �������� ������ ���� ����������. ��� ��������� ����������� �� ����������� ���������, � ������������ �������� ������������� ����������� ��������� (��. ����� 10.1).
ProcedureCall = Designator [ActualParameters].
�������:
WriteInt(i*2+1) (* ��. 10.1 *)
INC(w[k].count)
t.Insert("John") (* ��. 11 *)
9.3 ����������� ������������������
����������� ������������������ ���������� ������������������ ��������, ��������� ���������� �����������, ������������ ������� � �������.
StatementSequence = Statement {";" Statement}.
9.4 �������� �������� IF
IfStatement =
IF Expression THEN StatementSequence
{ELSIF Expression THEN StatementSequence}
[ELSE StatementSequence]
END.
�������� IF ������ �������� ���������� ���������� [guarded] ����������� �������������������. ���������� ���������, �������������� ����������� ������������������, ���������� ��� ������� [guard]. ������ ����������� � ��� �������, � ������� ��� ����������� � ������, �� ��� ���, ���� ���� �� ��� �� ���� �������� TRUE, ����� ���� ����������� ��������������� ����������� ������������������. ���� �� ���� ������ �� ����� �������������, ����������� ����������� ������������������, ��������� �� �������� ELSE, ���� ������� �������.
������:
IF (ch >= "A") & (ch <= "Z") THEN ReadIdentifier
ELSIF (ch >= "0") & (ch <= "9") THEN ReadNumber
ELSIF (ch = "'") OR (ch = '"') THEN ReadString
ELSE SpecialCharacter
END
9.5 �������� ������ CASE
�������� CASE ��������� ����� � ���������� ��������� ����������� ������������������ � ����������� �� �������� ���������� ���������. ������� ����������� ��������� ������, ����� ����������� �� ����������� ������������������, ��� ������ ����� ������ �������� ���������� ��������. ��������� ������ ������ ����� ����� ��� �������� ���, ������� �������� �������� ���� ����� ������. ����� ������ � ���������, � ������� �������� �� ����� ����������� ����� ������ ����. ���� �������� ��������� �� ����������� � �������� �����, �� ����������� ����������� ������������������, ��������� �� �������� ELSE, ���� ������� �������, � ��������� ������ ��������� �������� ���������������.
CaseStatement = CASE Expression OF Case {"|" Case}[ELSE StatementSequence] END.
Case = [CaseLabelList ":" StatementSequence].
CaseLabelList = CaseLabels {"," CaseLabels}.
CaseLabels = ConstExpression [".." ConstExpression].
������:
CASE ch OF
"A" .. "Z": ReadIdentifier
| "0" .. "9": ReadNumber
| "'", '"': ReadString
ELSE SpecialCharacter
END
9.6 ���� � �������� ����������� WHILE
�������� ����� WHILE ��������� ���������� ����������� ���������-���������, �������������, ���� ����� ���������� ��������� (��� ������) ���� TRUE. ������ ����������� ������ ����� ������ ����������� ����������� ������������������.
WhileStatement = WHILE Expression DO StatementSequence END.
�������:
WHILE i > 0 DO i := i DIV 2; k := k + 1 END
WHILE (t # NIL) & (t.key # i) DO t := t.left END
9.7 ���� � �������� ��������� REPEAT
�������� ����� REPEAT ��������� ���������� ����������� ������������������, ������������� �� ��� ���, ���� ����� ���������� ��������� �� ���� TRUE. ������������������ ����������� ���� �� ���� ���.
RepeatStatement = REPEAT StatementSequence UNTIL Expression.
9.8 ���� � ����� FOR
�������� ����� FOR ��������� ���������� ����������� ������������������, ������������� ��� ������������������ ��������, ������������� ����� ����������, ���������� ����������� ���������� �����.
ForStatement =
FOR ident ":=" Expression TO Expression [BY ConstExpression] DO StatementSequence END.
��������
FOR v := beg TO end BY step DO statements END
������������ ����������
temp := end; v := beg;
IF step > 0 THEN
WHILE v <= temp DO statements; v := v + step END
ELSE
WHILE v >= temp DO statements; v := v + step END
END
temp ����� ���������� ��� � ���������� v. step ������ ���� ��������� ����������� ����������. ���� ��������� step �� �������, ��� ������� ������ 1.
�������:
FOR i := 0 TO 79 DO k := k + a[i] END
FOR i := 79 TO 1 BY -1 DO a[i] := a[i-1] END
9.9 ����������� ���� LOOP
�������� LOOP ��������� ������������� ���������� ����������� ������������������. ��� ������������ ����������� ��������� ������ EXIT ������ ���� ������������������ (��. 9.10).
LoopStatement = LOOP StatementSequence END.
������:
LOOP
ReadInt(i);
IF i < 0 THEN EXIT END;
WriteInt(i)
END
����� LOOP ������� ��� ��������� ������������� ���������� � ����������� ������� ������ ��� � ��� �������, ����� ������� ������ ��������� � �������� ������������� ����������� ������������������.
9.10 ��������� �������� RETURN � ������ EXIT
�������� �������� RETURN ��������� ����������� ���������. �� ������������ �������� RETURN, �� ������� ������� ���������, ���� ���� ���� � ���������-�������. ��� ��������� ������ ���� ��������� �� ������������ (��. ���������� A) � ����� ����������, ��������� � ��������� ��������� (��. ��. 10).
���������-������� ������� ������� ��������� ��������, ������������ ��������-���������. � ������� ���������� [proper procedures], �������� �������� ������ ��������������� � ����� ���� ���������. ������� ����� ����� �������� �������� ���������� ��� �������������� (��������, ��������������) ����� ������.
�������� ������ ������������ �������� EXIT. �� ��������, ��� ���������� ������������� ��������� LOOP ������ ���� ����������, � ���������� ��������� ������ ���� ���������� � ���������, ���������� �� ���� ���������� LOOP. �������� EXIT ��������������, ���� � �� �������������, ������ � ���������� ��� ���������� LOOP.
9.11 ��������� ������������� ���� WITH
�������� WITH ��������� ����������� ������������������ � ����������� �� ���������� �������� ���� � ��������� ������ ���� � ������� ��������� ����������� ���������� ������ ����������� ������������������.
WithStatement = WITH [ Guard DO StatementSequence ]
{"|" [ Guard DO StatementSequence} ]
[ELSE StatementSequence] END.
Guard = Qualident ":" Qualident.
���� v � ��������-���������� ���� ������� ��� ������������ ����������, � ���� �� ����������� ��� T0, �� �������� ���������
WITH v: T1 DO S1 | v: T2 DO S2 ELSE S3 END
������: ���� ������������ ����� ���������� v �������� T1, �� ����������� ����������� ������������������ S1, � ������� v ��������������� ��� ���� �� �� ����������� ����� ��� T1; � ��������� ������ ���� ������������ ����� v �������� T2, �� ����������� S2, � ������� v ��������������� ��� ���� �� �� ����������� ����� ��� T2; � ��������� ������ ����������� S3. T1 � T2 ������ ���� ��������� ���� T0. ���� �� ���� �������� ���� �� ���� �������������� ���������� � ���� ����������� ELSE (������ c ��������������� ����������� �������������������), �� ��������� �������� ���������������.
������:
WITH t: CenterTree DO i := t.width; c := t.subnode END
10. �������� ��������
�������� ��������� ������� �� ��������� ��������� [procedure heading] � ���� ��������� [procedure body]. ��������� ������ ������������� ��������� � �� ���������� ���������. ��� ������� �� ����� ������ ����������� �������� [receiver parameter] � �������� (��. 10.2). ���� �������� ���������� � ���������. ������������� ��������� ����������� � ����� �� ��������.
���� ��� ���� ��������: ������� ��������� [proper procedures] � ���������-������� [function procedures]. ���������-������� �������������� ��������� ������ �������, ����������� � �������� ����� ���������, � ���� ���������, ���������� ��������� ���������. ������� ��������� �������������� ������� ���������. ��������� �������� ����������-��������, ���� ������ �� ���������� ���������� ������ ��������� ��� ����������. ���� ���������-������� ������ ��������� �������� ��������, ������� ���������� �� ���������.
��� ���������, ����������, ���� � ���������, ��������� ������ ���� ���������, �������� ���������� �� ��������� � ���� ���������. ��������� ��������� ���� ����� ����������� ��� ��������� �������, �������� �������� ����� ���� ������� ���� � �����. ����� ��������� ������ �� �������� �������� ����������� �����������.
��������� ���������� ������������ ��� ����������� ����� ������������� �������� NIL ����� ����������� ���� ���������.
�������, ��������� � ���������, ���������� ���������, ������ ����� � � ��� ������ ���������, ��� ��� �� ��������� �������� ������������ �������� � ����� ��� �� ������.
ProcedureDeclaration = ProcedureHeading ";" [ ProcedureBody ident ].
ProcedureHeading = PROCEDURE [Receiver] IdentDef [FormalParameters] MethAttributes.
ProcedureBody = DeclarationSequence [BEGIN StatementSequence] END.
DeclarationSequence = {CONST {ConstantDeclaration ";"} |
TYPE {TypeDeclaration ";"} |
VAR {VariableDeclaration ";"} }
{ProcedureDeclaration ";" | ForwardDeclaration ";"}.
ForwardDeclaration = PROCEDURE " ^ " [Receiver] IdentDef [FormalParameters] MethAttributes.
���� � �������� ��������� ������ ����������� �������� [receiver parameter], �� ��������� ��������� �������, ��������� � ����� ������������ ��������� (��. 10.2). ����������� �������� [forward declaration] ������ ��� ����, ����� ��������� ������ �� ���������, ��� ����������� �������� ���������� � ����������� ������. ������ ���������� ���������� ������������ � ������������ �������� ������ ��������������� [match] (��. ���������� A), � ����� ��������������� ���������� ������ ���� �������. <�� �������� ��� ������� ������������ �������� ���������� ����������� ��������� ��������� � �������� � ����� ������ "^" ����� ������� PROCEDURE.>
10.1 ���������� ���������
���������� ��������� ���� ��������������, ��������� � ������ ���������� ���������� ���������. ��� ������������� ����������� ����������, ��������� � ������ ���������. ������������ ����� ����������� � ������������ ����������� ��������������� ��� ������ ���������. ���� ��� ���� ����������: ���������-�������� [value parameters] � ���������-���������� [variable parameters], ��������� �������� � ������ ���������� ���������� ����� �� ���������� VAR, IN ��� OUT. ���������-�������� ������������ ����� ��������� ����������, ������� � �������� ���������� �������� ������������� �������� ���������������� ������������ ���������. ���������-���������� ������������� ����������� ����������, ���������� ����������, � ��� ������������ [stand for] ��� ����������. ���������-���������� ����� �������������� ������ ��� ����� ������ (IN), ������ ��� ������ ������ (OUT) ��� ��� ����� � ������ (VAR). ��������� IN ����� ������������ ������ ��� ����������, ���������� ��������� ��� ��������. ������ ��������� IN-��������� �������� ������ ��� ������. ��� � ��������� ����������, OUT-��������� ������������ ��� ����������� ����� ���������������� � NIL. �������� ������ �������� ���������� ������ ��������������� ��� �������������� �� ������� ������������ � ���������. ������� ��������� ����������� ��������� ���������������� �� ��� �������� �� ����� ������������ �����, � ������� �� ������. ���������-������� ��� ���������� ������ ����� ������ ������ ����������. ��� ������ ���������� � ������� ���������� �����, � �������� ���� ������ ������ ����������� ����������. ��� ���������� ��������� �� ����� ���� �� �������, �� ��������.
FormalParameters = "(" [FPSection {";" FPSection}] ")" [":" Type].
FPSection = [VAR | IN | OUT] ident {"," ident} ":" Type.
����� f � ���������� ��������, � ����� a � ��������������� ����������� ��������. ���� f � �������� ������, �� a ������ ���� ��������� �� �������� [array compatible] � f, � ����� f ������� �� a. � ��������� ������ a ������ ���� ��������� �� ���������� [parameter compatible] c f (��. ���������� A).
������� �������� ��������:
PROCEDURE ReadInt (OUT x: INTEGER);
VAR i: INTEGER; ch: CHAR;
BEGIN
i := 0; Read(ch);
WHILE ("0" <= ch) & (ch <= "9") DO
i := 10 * i + (ORD(ch) - ORD("0")); Read(ch)
END;
x := i
END ReadInt
PROCEDURE WriteInt (x: INTEGER); (* 0 <= x < 100000 *)
VAR i: INTEGER; buf: ARRAY 5 OF INTEGER;
BEGIN
i := 0;
REPEAT buf[i] := x MOD 10; x := x DIV 10; INC(i) UNTIL x = 0;
REPEAT DEC(i); Write(CHR(buf[i] + ORD("0"))) UNTIL i = 0
END WriteInt
PROCEDURE WriteString (IN s: ARRAY OF CHAR);
VAR i: INTEGER;
BEGIN
i := 0; WHILE (i < LEN(s)) & (s[i] # 0X) DO Write(s[i]); INC(i) END
END WriteString
PROCEDURE Log2 (x: INTEGER): INTEGER;
VAR y: INTEGER; (* assume x > 0 *)
BEGIN
y := 0; WHILE x > 1 DO x := x DIV 2; INC(y) END;
RETURN y
END Log2
PROCEDURE Modify (VAR n: Node);
BEGIN
INC(n.key)
END Modify
10.2 ������
���������, ��������� ��������� <�.�. �� ������ ������, � �� � ����������, ��������� � ������>, ����� ���� ������� � �����-���� ����� �������, ��������� � ��� �� ������. ����� ��������� �������� �������� [methods], ���������� � ������ ����� �������. ����� ���������� ����������� �������� ���� ������������ ��������� � ��������� �������� ���������. ���������� �������� ����� ���� VAR ��� IN ���������� ���� T ��� ����������-��������� ���� POINTER TO T, ��� T � ��� �������. ����� ������ � ����� T � ��������� � ��� ���������.
ProcedureHeading = PROCEDURE [Receiver] IdentDef [FormalParameters] MethAttributes.
Receiver = "(" [VAR | IN] ident ":" ident ")".
MethAttributes = ["," NEW] ["," (ABSTRACT | EMPTY | EXTENSIBLE)].
���� ����� M ������ � ����� T0, �� ����� ������ ������ � ����� �������� T1 ���� T0. ������ ���� ����� M' (� ��� �� ������, ��� � � M) ������ ��� ��������� � T1, �� ���������� ������ � T1 ������ M. M' ��������� ���������������� M ��� T1. ������ ���������� ���������� M � M' ������ ��������������� [match], ����� �������, ����� M � ���������-�������, ������������ ������������ ���. � ��������� ������ ��� ���������� ������� M' ������ ���� ����������� ���� ���������� M (��������������) (��. ���������� A). ���� M � T1 �������������� (��. ��. 4), �� M' ���� ������ ����������������.
���� M �� ��������������, �� M' ���� �� ������ ����������������. ���� M � M' ��������������, �� ����� �������� ������ ���� �����������.
��� ����������� � ���������������� ��������������� ������������� ������ ������������ ��������� ��������:
NEW, ABSTRACT, EMPTY � EXTENSIBLE
� ��������������: �����, �����������, ������ � ����������������.
���������� ������������ ������� NEW ��� ���� ����� �������� �������, � ��� ������ ������������ ��� ���������������� �������. ���� ������� �������� ���������� ����������������� � ������������ �������, ��������� � ����� � ��� ���������; ����� ����������������� ����� ���������� ��� ��������������� �������.
�������� ����������� � ������ ������� ������� ������ �� ��������� ���������. ����������� ������ �� ����� ����������. ��� �������, ���������� ����������� �����, ������ ���� �����������. �����, ���������������� ����������� �������, ������ ���� �����������. ����������� ����� ��������������� ���� ������ ������ ����������������. ����� ������� ������ �� ����� �������� �������. ������ ������ �� ����� ���� �����������-��������� � �� ����� ����� OUT ����������. ��� �������, ���������� ����� ������ ������, ������ ���� ���������������� ��� �����������. �����, ���������������� ������ �������, ������ ���� ������ ��� �����������. ����������� ��� ������ ������ ���������� ���� ������ ���������������� (�����������) � ��� ��������. ��� �� ������ ���������� �����-��������. ���������� (�� �����������) ��� �������, ���������� �������� ������������ ����, ������ ����������� ��� ����������� ������ ������ ����-������.
���������� ������ (������� ����������� ����) ������ ���� ���� �����������������, ���� ��������� [final] (�.�. ���������� ��� ���������). �������� ����� �� ����� ���������������� � �������� ������ ����. ��� �������, ���������� ���������������� ������ ������ ���� ���������������� ��� �����������.
���� v � ��������� ���, � M � �����, �� v.M ���������� ����� M, ��������� � ������������ ����� v. �������, ��� ����� ����� ����� ���������� �� ������������ ������, ���������� �� ����������� ����� ���������� v. v ���������� ������������ ��������� ������ M' �� �������� �������� ����������, ��������� � 10.1.
���� r � ����������� ��������, ��������� ��� ������� ��� T, �� r.M^ �������� ����� M, ��������� � �����-������� ���� T (�����-�����). � ����������� � ����������� ��������� ������ ����������� ��������� ������ ���� ��������������� �����. ������ ���������� ���������� ����� �������� ������ ��������������� (���������� A), � ����� ��������������� ���������� ������ ���� �����.
������, ���������� �������� " - ", ��������� ����������������� ������ ��� ����������. ����� ����� ����� ���� ������������� � ����� ������������� ������, �� ����� ���������� ������ � ������, ���������� �������� ������. (� ��������� ����� ���������� ��������� �����-������ �������, ���������������� ������ ��� ����������, ��� �� ������������� ������. ��� ����������� �������� ��� ���������� �������� ��������.)
�������:
PROCEDURE (t: Tree) Insert (node: Tree), NEW, EXTENSIBLE;
VAR p, father: Tree;
BEGIN p := t;
REPEAT father := p;
IF node.key = p.key THEN RETURN END;
IF node.key < p.key THEN p := p.left ELSE p := p.right END
UNTIL p = NIL;
IF node.key < father.key THEN
father.left := node
ELSE
father.right := node
END;
node.left := NIL; node.right := NIL
END Insert
PROCEDURE (t: CenterTree) Insert (node: Tree); (* redefinition *)
BEGIN
WriteInt(node(CenterTree).width);
t.Insert^ (node) (* calls the Insert method of Tree *)
END Insert
PROCEDURE (obj: Object) Draw (w: Window), NEW, ABSTRACT
PROCEDURE (obj: Object) Notify (e: Event), NEW, EMPTY
10.3 ���������������� [predeclared] ���������
��������� ������� ���� ������ ���������������� ��������. ��������� ��������� �������� ����������� [generic], �.�. ��� ��������� � ������ ����� ���������. v ������������ ����������, x � y � ���������, � T � ���. ������ ���������� ������ ���� ���������� ��� ����������.
���������-�������
��� | ��� ���������� | ��� ���������� | ������� |
---|---|---|---|
ABS(x) | <= INTEGER | INTEGER | ���������� �������� |
������������ ���, | |||
LONGINT | ��� x | ||
ASH(x, y) | x: <= INTEGER | INTEGER | �������������� ����� (x * 2^y) |
x: LONGINT | LONGINT | ||
y: ����� ��� | |||
BITS(x) | INTEGER | SET | {i | ODD(x DIV 2^i)} |
CAP(x) | �������� ��� | ��� x | x � ����� �� ������ Latin-1: |
��������������� ������� ����� | |||
CHR(x) | ����� ��� | CHAR | ������ � ���������� ������� x |
ENTIER(x) | ������������ ��� | LONGINT | ���������� �����, �� ������������� x |
LEN(v, x) | v: ������; x: ����� | INTEGER | ����� v � ��������� x |
��������� | (������ ��������� = 0) | ||
LEN(v) | ��� �������� | INTEGER | ������������ LEN(v, 0) |
String <�������> | INTEGER | ����� ������� (�� ������ 0X) | |
LONG(x) | BYTE | SHORTINT | ��������� |
SHORTINT | INTEGER | ||
INTEGER | LONGINT | ||
SHORTREAL | REAL | ||
SHORTCHAR | CHAR | ||
Shortstring | String | ||
MAX(T) | T = �������� ��� | T | ������������ �������� ��� ���� T |
T = SET | INTEGER | ������������ ������� ��������� | |
MAX(x, y) | <= INTEGER | INTEGER | ������� �������� �� x � y |
����� ��� | LONGINT | ||
<= SHORTREAL | SHORTREAL | ||
�������� ��� | REAL | ||
SHORTCHAR | SHORTCHAR | ||
�������� ��� | CHAR | ||
MIN(T) | T = �������� ��� | T | ����������� �������� ��� ���� T |
T = SET | INTEGER | 0 | |
MIN(x, y) | <= INTEGER | INTEGER | ������� �������� �� x � y |
����� ��� | LONGINT | ||
<= SHORTREAL | SHORTREAL | ||
�������� ��� | REAL | ||
SHORTCHAR | SHORTCHAR | ||
�������� ��� | CHAR | ||
ODD(x) | ����� ��� | BOOLEAN | x MOD 2 = 1 |
ORD(x) | CHAR | INTEGER | ���������� ����� ������ x |
SHORTCHAR | SHORTINT | ���������� ����� ������ x | |
SET | INTEGER | (SUM i: i IN x: 2^i) | |
SHORT(x) | LONGINT | INTEGER | ��������� |
INTEGER | SHORTINT | ��������� | |
SHORTINT | BYTE | ��������� | |
REAL | SHORTREAL | ��������� (�������� ��������) | |
CHAR | SHORTCHAR | �������� | |
String | Shortstring | �������� | |
SIZE(T) | ����� ��� | INTEGER | ���������� ����, ��������� ��� T |
SIZE �� ����� ����������� � ����������� ����������, �.�. ��� �������� ������� �� ����������� ���������� �����������.
������� ���������
��� | ���� ���������� | ������� |
---|---|---|
ASSERT(x) | x: ���������� ��������� | ���������� ���������, ���� �� x |
ASSERT(x, n) | x: ���������� ���������; | ���������� ���������, ���� �� x |
n: ����� ��������� | ||
DEC(v) | ����� ��� | v := v - 1 |
DEC(v, n) | v, n: ����� ��� | v := v - n |
EXCL(v, x) | v: SET; x: ����� ���, 0 <=x <= MAX(SET) | v := v - {x} |
HALT(n) | ����� ��������� | ���������� ��������� |
INC(v) | ����� ��� | v := v + 1 |
INC(v, n) | v, n: ����� ��� | v := v + n |
INCL(v, x) | v: SET; x: ����� ���, 0 <=x <= MAX(SET) | v := v + {x} |
NEW(v) | ��������� �� ������ ��� | ���������� v ^ |
������������� ������ | ||
NEW(v, x0, ..., xn) | v: ��������� �� �������� ������; | ���������� v ^ � ������� x0.. xn |
xi: ����� ��� |
� ASSERT(x, n) � HALT(n) ������������� n ������������ ���������� ����������.
10.4 �����������
���������������� ����� � ������ FINALIZE ������ � ������ ����� ������� ��� ���� �� �� ��� ������ ��� ��������� � ����� ANYREC:
PROCEDURE (a: ANYPTR) FINALIZE-, NEW, EMPTY;
����� FINALIZE ����� ���� ���������� ��� ������ ������������� ����. ���� ����� ���������� � �� ������������ ����� ����� ����, ��� ������ ����� ���� (��� ���������������� �������� ����) ���� ���������� ����� ������ ��������� (�������� ���� ��������� ��������� [globally anchored]) � �� ����, ��� ������, ���������� ��� ������, ����������� ��������.
�� ������������� ����� ������ ���� ������ ��������� ��������� ������ ����� ������, � ���� ����� �� ���������� ��������, ���� ������ ����� ������ �����������. ������� ����������� ���������� ����������� �������� �� ���������.
11. ������
������ ��� ����� �������� ��������, �����, ���������� � �������� ������ � ��������� ����������� ������������������� ��� ������������ ��������� �������� ���������� <� ����� ����������� ������������������� �����������>. ������ ������������ ����� �����, ������������� ��� �����.
Module = MODULE ident ";" [ImportList] DeclarationSequence
[BEGIN StatementSequence]
[CLOSE StatementSequence] END ident ".".
ImportList = IMPORT Import {"," Import} ";".
Import = [ident ":="] ident.
������ ������� ��������� ����� ������������� �������. ���� ������ A ������������� ������� M, � A ������������ ������������� x, �� ������ M �� x ��������� ��� A.x. ���� A ������������� ��� B := A, �� �� ������ x ������� ��������� ��� B.x. ��������� ����� �������� ������������ ������� ���������� ��� ���� ������� � ����������������� ���������������. ������ �� ����� ������������� ��� ����. ��������������, ������� ����� �������������� (�.�. ������� ������ ���� ������ � �������-��������), ������ ���� ���������� ������� �������� � ��������� (��. ����� 4).
����������� ������������������, ��������� �� BEGIN, �����������, ����� ������ ����������� � ������� (�����������), ��� ����������� ����� �������� ������������� �������. �������������, ����������� ������ ������� ����������. ��������� ���������������� ��������� ����� ���� �������������� ��������, � ����� ��������� ������ ���������.
���������� ����������, ��������� � ������, ��������� ����� ����������� ���� ������. ��� �������������, ��� ��� ���������� ������������ ��� ����������� ����� ���������������� � NIL.
����������� ������������������, ��������� �� CLOSE, �����������, ����� ������ ��������� �� ������� <�.�. ����������� �� ����������� ������>.
������:
MODULE Trees; (* exports: Tree, Node, Insert, Search, Write, Init *)
IMPORT StdLog;
TYPE
Tree* = POINTER TO Node;
Node* = RECORD (* exports read-only: Node.name *)
name-: POINTER TO ARRAY OF CHAR;
left, right: Tree
END;
PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR), NEW;
VAR p, father: Tree;
BEGIN
p := t;
REPEAT father := p;
IF name = p.name^ THEN RETURN END;
IF name < p.name^ THEN p := p.left ELSE p := p.right END
UNTIL p = NIL;
NEW(p); p.left := NIL; p.right := NIL;
NEW(p.name, LEN(name$) + 1); p.name^ := name$;
IF name < father.name^ THEN father.left := p ELSE father.right := p END
END Insert;
PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree, NEW;
VAR p: Tree;
BEGIN
p := t;
WHILE (p # NIL) & (name # p.name^) DO
IF name < p.name^ THEN p := p.left ELSE p := p.right END
END;
RETURN p
END Search;
PROCEDURE (t: Tree) Write*, NEW;
BEGIN
IF t.left # NIL THEN t.left.Write END;
StdLog.String(t.name); StdLog.Ln;
IF t.right # NIL THEN t.right.Write END
END Write;
PROCEDURE Init* (t: Tree);
BEGIN
NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL
END Init;
BEGIN
StdLog.String("Trees loaded"); StdLog.Ln
CLOSE
StdLog.String("Trees removed"); StdLog.Ln
END Trees.
���������� A: ����������� ��������
�������� ���� | SHORTCHAR, CHAR |
---|---|
����� ���� | BYTE, SHORTINT, INTEGER, LONGINT |
������������ ���� | SHORTREAL, REAL |
�������� ���� | ����� � ������������ ���� |
���� ������� ����� | Shortstring, String |
�������� ���� | BOOLEAN, SET, �������� � �������� ���� |
���������� ���� [Same types]
��� ���������� a � b � ������ Ta � Tb ����� ���������� ���, ����
1. Ta � Tb ��� ���������� ����� � ��� �� ��������������� ����, ���
2. Ta ������ � �������� ���� ���� Ta = Tb, ���
3. a � b ���������� � ����� ������ ��������������� � �������� ����������, ����� ������ ��� ���������� ����������.
������������� ���� [Equal types]
��� ���� Ta � Tb ������������, ����
1. Ta � Tb ����� ���������� ���, ���
2. Ta � Tb ���� ���� �������� �������� � �������������� ������ ���������, ���
3. Ta � Tb ���� ����������� ����, ��� ������ ���������� ���������� �������������.
4. Ta � Tb ���� ������������ ���� � �������������� �������� ������.
������������ ������� ���������� ���������� [Matching formal parameter lists]
��� ������ ���������� ���������� �������������, ����
1. ��� ����� ���������� ����� ����������, �
2. ��� ����� ���� ������������� ���� ����������� �������, ���� �� ����� �������, �
3. ��������� � ��������������� �������� ����� ������������� ����, �
4. ��������� � ��������������� �������� ���� ��� ���� ���������-��������, ���� IN, OUT ��� VAR ���������.
��������� ����� [Type inclusion]
�������� � �������� ���� �������� (��������) ������� ����� ���� �� ������ � ������������ �� ���������� ����������:
REAL >= SHORTREAL >= LONGINT >= INTEGER >= SHORTINT >= BYTE
CHAR >= SHORTCHAR
����-������� � ����-������ [Type extension]
���� ���� �������� ���� Tb = RECORD (Ta) ... END, �� Tb �������� ���������������� �������� ���� Ta, � Ta � ���������������� ������� ���� Tb. �����-���� ��� Tb �������� �������� [extension] ���� Ta (Ta �������� ������� [base type] ��� Tb), ����
1. Ta � Tb ���� ���������� ����, ���
2. Tb � ���������������� ������� ���������� ������� ���� Ta, ���
3. Ta ����� ��� ANYREC.
���� Pa = POINTER TO Ta � Pb = POINTER TO Tb, �� Pb � ������� ���� Pa (Pa � ������ ��� Pb), ���� Tb �������� �������� ���� Ta.
������������� �� ������������ [Assignment compatible]
��������� e ���� Te �������� ����������� �� ������������ � ���������� v ���� Tv, ���� ����������� ���� �� ��������� �������:
1. Te � Tv ������������ � �� �������� �� ������ �������� ��������, �� ������ �������, ������������ �������� <�.�. ���������� � ���������� ABSTRACT ��� EXTENSIBLE>;
2. Te � Tv � �������� ��� �������� ����, � Tv �������� Te;
3. Te � Tv � ������������ ����, � Te � ������� ���� Tv;
4. Tv � ������������ ��� ����������� ���, � e ���� NIL;
5. Tv � �������� ���, � e � ����������� ���������, ��� �������� ���������� � Tv;
6. Tv � ������ CHAR, Te � String ��� Shortstring, � LEN(e) < LEN(v);
7. Tv � ������ SHORTCHAR, Te � Shortstring, � LEN(e) < LEN(v);
8. Tv � ����������� ���, � e � ��� ���������, ��� ���������� ��������� ������������� ���������� Tv.
������������� �� �������� [Array compatible]
����������� �������� a ���� Ta �������� ����������� �� �������� � ���������� ���������� f ���� Tf, ����
1. Tf � Ta � ������������, ���
2. Tf � �������� ������, Ta � ������������ ������, � ���� �� ��������� ���������� �� ��������, ���
3. Tf � �������� ������ CHAR, � Ta ����� ��� String, ���
4. Tf � �������� ������ SHORTCHAR, � Ta ����� ��� Shortstring.
������������� �� ���������� [Parameter compatible]
����������� �������� a ���� Ta �������� ����������� �� ���������� � ���������� ���������� f ���� Tf, ����
1. Tf � Ta � ������������, ���
2. f � ��������-��������, � Ta � ��������� �� ������������ � Tf, ���
3. f � IN ��� VAR ��������, Tf � Ta � ���� �������, � Ta � ������� ���� Tf.
������������� �� ��������� [Expression compatible]
��� ��������� �������� ���� �� ��������� ���������� �� ���������, ���� ��� ����������� ��������, ������������� � ��������� �������. ������ ���������� ������ ���� ���������� ��� ����������. ��� T1 ������ ���� ����������� ���� T0:
�������� | ������ ������� | ������ ������� | ��� ���������� |
---|---|---|---|
+ - * DIV MOD | <= INTEGER | <= INTEGER | INTEGER |
����� ��� | ����� ��� | LONGINT | |
/ | ����� ��� | ����� ��� | REAL |
+ - * / | <= SHORTREAL | <= SHORTREAL | SHORTREAL |
�������� ��� | �������� ��� | REAL | |
SET | SET | SET | |
+ | Shortstring | Shortstring | Shortstring |
��� ������� | ��� ������� | String | |
OR & ~ | BOOLEAN | BOOLEAN | BOOLEAN |
= # < <= > >= | �������� ��� | �������� ��� | BOOLEAN |
�������� ��� | �������� ��� | BOOLEAN | |
��� ������� | ��� ������� | BOOLEAN | |
= # | BOOLEAN | BOOLEAN | BOOLEAN |
SET | SET | BOOLEAN | |
NIL, ������������ ��� | NIL, ������������ ��� | ||
T0 ��� T1 | T0 ��� T1 | BOOLEAN | |
����������� ��� T, NIL | ����������� ��� T, NIL | BOOLEAN | |
IN | ����� ��� | SET | BOOLEAN |
IS | T0 | ��� T1 | BOOLEAN |
����������� ��������� ����������� ��� ���������� � ������������ ��������� (LONGINT ��� ����� �����, REAL ��� ������������ �����) � ��������� ���������� ��� ���������� <�.�. �������� ��������������� ����� ������������> ��������� �������� � ��� �� ���������.
���������� B: ��������� ������������� �������
Module = MODULE ident ";" [ImportList] DeclSeq [BEGIN StatementSeq] [CLOSE StatementSeq] END ident ".".
ImportList = IMPORT [ident ":="] ident {"," [ident ":="] ident} ";".
DeclSeq = { CONST {ConstDecl ";" } | TYPE {TypeDecl ";"} | VAR {VarDecl ";"}} {ProcDecl ";" | ForwardDecl ";"}.
ConstDecl = IdentDef "=" ConstExpr.
TypeDecl = IdentDef "=" Type.
VarDecl = IdentList ":" Type.
ProcDecl = PROCEDURE [Receiver] IdentDef [FormalPars] MethAttributes
[";" DeclSeq [BEGIN StatementSeq] END ident].
MethAttributes = ["," NEW] ["," (ABSTRACT | EMPTY | EXTENSIBLE)].
ForwardDecl = PROCEDURE "^" [Receiver] IdentDef [FormalPars] MethAttributes.
FormalPars = "(" [FPSection {";" FPSection}] ")" [":" Type].
FPSection = [VAR | IN | OUT] ident {"," ident} ":" Type.
Receiver = "(" [VAR | IN] ident ":" ident ")".
Type = Qualident | ARRAY [ConstExpr {"," ConstExpr}] OF Type
| [ABSTRACT | EXTENSIBLE | LIMITED]
RECORD ["("Qualident")"] FieldList {";" FieldList} END
| POINTER TO Type
| PROCEDURE [FormalPars].
FieldList = [IdentList ":" Type].
StatementSeq = Statement {";" Statement}.
Statement = [ Designator ":=" Expr | Designator ["(" [ExprList] ")"]
| IF Expr THEN StatementSeq
{ELSIF Expr THEN StatementSeq}
[ELSE StatementSeq] END
| CASE Expr OF Case {"|" Case}
[ELSE StatementSeq] END
| WHILE Expr DO StatementSeq END
| REPEAT StatementSeq UNTIL Expr
| FOR ident ":=" Expr TO Expr [BY ConstExpr] DO StatementSeq END
| LOOP StatementSeq END
| WITH [ Guard DO StatementSeq ]
{"|" [ Guard DO StatementSeq ] }
[ELSE StatementSeq] END
| EXIT
| RETURN [Expr]
].
Case = [CaseLabels {"," CaseLabels} ":" StatementSeq].
CaseLabels = ConstExpr [".." ConstExpr].
Guard = Qualident ":" Qualident.
ConstExpr = Expr.
Expr = SimpleExpr [Relation SimpleExpr].
SimpleExpr = ["+" | "-"] Term {AddOp Term}.
Term = Factor {MulOp Factor}.
Factor = Designator | number | character | string | NIL | Set | "(" Expr ")" | " ~ " Factor.
Set = "{" [Element {"," Element}] "}".
Element = Expr [".." Expr].
Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
AddOp = "+" | "-" | OR.
MulOp = " * " | "/" | DIV | MOD | "&".
Designator = Qualident {"." ident | "[" ExprList "]" | " ^ " | "(" Qualident ")" | "(" [ExprList] ")"} [ "$" ].
ExprList = Expr {"," Expr}.
IdentList = IdentDef {"," IdentDef}.
Qualident = [ident "."] ident.
IdentDef = ident [" * " | "-"].
���������� C: ��������� �������� [domains] �������� �����
��� | �������� �������� |
---|---|
BOOLEAN | FALSE, TRUE |
SHORTCHAR | 0X .. 0FFX |
CHAR | 0X .. 0FFFFX |
BYTE | -128 .. 127 |
SHORTINT | -32768 .. 32767 |
INTEGER | -2147483648 .. 2147483647 |
LONGINT | -9223372036854775808 .. 9223372036854775807 |
SHORTREAL | -3.4E38 .. 3.4E38, INF (32-������ ������ IEEE) |
REAL | -1.8E308 .. 1.8E308, INF (64-������ ������ IEEE) |
SET | ������������ �� 0 .. 31 |
���������� D: ������������ ���������� � ����� ����������
����������� ������������� ������� ��������� �� ��� ��������������� �������������.
�� ����� ���������� �������� �������� ����������, ����������� ��������� ������������ ��� �������. ��� ����� ��� ���������� �������� ����� � ������ �����.
����������� ��������� DISPOSE <������������ ������ ��� ����� �� ������������ �������>. ������ <���������� ��������> �� ����� ���� ����������� �� ����� ���������� ������������, ��������� ��� ������� �� �������� ������������, ��������� � ������� ������ [memory leaks] <������, ���������� ���������, ������������ �� ����� ����� ���������, ������� ����������� ����� ����������> � � �������� ����������� [dangling pointers] <��������� ���������, ������������ ��������� �� ������� ������, �� ������ �������������� �������������>. �� ����������� ����� ���������� ������, ��� �� ������������ ������������ ���������� �������, ��� ��� �� ����� ���������� ������ ������� � ������� �� ����� �����������, ��������� �������������� ���� ������.
������ � �� ������� ���� �� ���������������� ��������� (�������) � ���������������� ���� ������ ���� �������� �����������. ���� ����������, ��� ����� �������� �������� �������. ����������� ���������, ������������ ��� �������� ������� ��� ��� ������� � ��������� ����-����������, �� ������������ ������, �� ���������� ������ ��������� ��� ���������� ��� ��������� ����.
�� ����������� ��������� ������������ ����������, � ������� ��� ���������� �� ����� ��������� ������� ������, ��� ������� ��������� ������������ ��������� [linking loader]. ���������� ������� �������� ������� ��������� ����������, ������� ����� ���� ��������� ����������.
����������, ������� �� ������������� ���� ����������� � ����������� � ����� ����������, �� ��������� ��������������� ����������� ������������� �������.