119 lines
3.4 KiB
Plaintext
119 lines
3.4 KiB
Plaintext
|
.sp 2
|
||
|
.NH
|
||
|
Deviations from the standard
|
||
|
.nh
|
||
|
|
||
|
.PP
|
||
|
The compiler deviates from the ISO 7185 standard with respect to the
|
||
|
following clauses:
|
||
|
|
||
|
.IP "\fBISO 6.1.3:\fR" 14
|
||
|
\h'-5u'Identifiers may be of any length and all characters of an identifier
|
||
|
shall be significant in distinguishing between them.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
The constant IDFSIZE, defined in the file \fIidfsize.h\fR, determines
|
||
|
the (maximum) significant length of an identifier. It can be set at run
|
||
|
time with the \-M option (see also section on compiler options).
|
||
|
.in -3m
|
||
|
.sp
|
||
|
.IP "\fBISO 6.1.8:\fR"
|
||
|
\h'-5u'There shall be at least one separator between any pair of consecutive tokens
|
||
|
made up of identifiers, word-symbols, labels or unsigned-numbers.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
A token separator is not needed when a number is followed by an identifier
|
||
|
or a word-symbol. For example the input sequence, 2\fBthen\fR, is recognized
|
||
|
as the integer 2 followed by the keyword \fBthen\fR.
|
||
|
.in -3m
|
||
|
.sp
|
||
|
.IP "\fBISO 6.2.1:\fR"
|
||
|
\h'-29u'The label-declaration-part shall specify all labels that prefix a statement
|
||
|
in the corresponding statement-part.
|
||
|
.sp
|
||
|
.ti +3m
|
||
|
The compiler generates a warning if a label is declared but never defined.
|
||
|
.bp
|
||
|
.IP "\fBISO 6.2.2:\fR"
|
||
|
\h'-9u'The scope of identifiers and labels should start at the beginning of the
|
||
|
block in which these identifiers or labels are declared.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
The compiler, as most other one pass compilers deviates in this respect,
|
||
|
because the scope of variables and labels start at their defining-point.
|
||
|
.nf
|
||
|
.in +4m
|
||
|
\fBprogram\fR deviates\fB;
|
||
|
const\fR
|
||
|
x \fB=\fR 3\fB;
|
||
|
procedure\fR p\fB;
|
||
|
const\fR
|
||
|
y \fB=\fR x\fB;\fR
|
||
|
x \fB=\fR true\fB;
|
||
|
begin end;
|
||
|
begin
|
||
|
end.\fR
|
||
|
.in -4m
|
||
|
.fi
|
||
|
|
||
|
In procedure p, the constant y has the integer value 3. This program does not
|
||
|
conform to the standard. In [SAL] a simple algorithm is described for
|
||
|
enforcing the scope rules, it involves numbering all scopes encoutered in the
|
||
|
program in order of their opening, and recording in each identifier table
|
||
|
entry the number of the latest scope in which it is used.
|
||
|
|
||
|
Note: The compiler does not deviate from the standard in the following program:
|
||
|
.nf
|
||
|
.in +4m
|
||
|
\fBprogram\fR conforms\fB;
|
||
|
type\fR
|
||
|
x \fB=\fR real\fB;
|
||
|
procedure\fR p\fB;
|
||
|
type\fR
|
||
|
y \fB= ^\fRx\fB;\fR
|
||
|
x \fB=\fR boolean\fB;
|
||
|
var\fR
|
||
|
p \fB:\fR y\fB;
|
||
|
begin end;
|
||
|
begin
|
||
|
end.\fR
|
||
|
.in -4m
|
||
|
.fi
|
||
|
|
||
|
In procedure p, the variable p is a pointer to boolean.
|
||
|
.fi
|
||
|
.in -3m
|
||
|
.sp
|
||
|
.IP "\fBISO 6.4.3.2:\fR"
|
||
|
The standard specifies that any ordinal type is allowed as index-type.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
The required type \fIinteger\fR is not allowed as index-type, i.e.
|
||
|
.ti +2m
|
||
|
\fBARRAY [ \fIinteger\fB ] OF\fR <component-type>
|
||
|
is not permitted.
|
||
|
.br
|
||
|
This could be implemented, but this might cause problems on machines with
|
||
|
a small memory.
|
||
|
.in -3m
|
||
|
.sp
|
||
|
.IP "\fBISO 6.4.3.3:\fR"
|
||
|
\h'-1u'The type possessed by the variant-selector, called the tag-type, must
|
||
|
be an ordinal type, so the integer type is permitted. The values denoted by
|
||
|
all case-constants shall be distinct and the set thereof shall be equal
|
||
|
to the set of values specified by the tag-type.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
Because it is impracticable to enumerate all integers as case-constants,
|
||
|
the integer type is not permitted as tag-type. It would not make a great
|
||
|
difference to allow it as tagtype.
|
||
|
.in -3m
|
||
|
.sp
|
||
|
.IP "\fBISO 6.8.3.9:\fR"
|
||
|
The standard specifies that the control-variable of a for-statement is not
|
||
|
allowed to be modified while executing the loop.
|
||
|
.sp
|
||
|
.in +3m
|
||
|
Violation of this rule is not detected. An algorithm to implement this rule
|
||
|
can be found in [PCV].
|