118 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| .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].
 |