updated
This commit is contained in:
parent
e130b1991f
commit
d70a20ae4c
|
@ -30,13 +30,6 @@ in the "Report on The Programming Language Modula-2", as it appeared in [1],
|
||||||
from now on referred to as "the Report".
|
from now on referred to as "the Report".
|
||||||
Also, the Report sometimes leaves room for interpretation. The section numbers
|
Also, the Report sometimes leaves room for interpretation. The section numbers
|
||||||
mentioned are the section numbers of the Report.
|
mentioned are the section numbers of the Report.
|
||||||
.PP
|
|
||||||
Basically, the compiler recognizes the language as described in [1], and
|
|
||||||
most of [2], for backwards compatibility. It warns the user for old-fashioned
|
|
||||||
constructions (constructions that [1] does not allow).
|
|
||||||
If the \fI-Rm2-3\fP option (see [6]) is passed to \fIack\fP, this backwards
|
|
||||||
compatibility feature is disabled. Also, it may not be present on some
|
|
||||||
smaller machines, like the PDP-11.
|
|
||||||
.NH 2
|
.NH 2
|
||||||
Syntax (section 2)
|
Syntax (section 2)
|
||||||
.PP
|
.PP
|
||||||
|
@ -68,8 +61,11 @@ The Foreign pragma is only meaningful in a \f5DEFINITION MODULE\fP,
|
||||||
and indicates that this
|
and indicates that this
|
||||||
\f5DEFINITION MODULE\fP describes an interface to a module written in another
|
\f5DEFINITION MODULE\fP describes an interface to a module written in another
|
||||||
language (for instance C, Pascal, or EM).
|
language (for instance C, Pascal, or EM).
|
||||||
Runtime checks are: range-checks, checks when assigning CARDINALS to INTEGERS
|
Runtime checks that can be disabled are:
|
||||||
and vice versa, and checks that FOR-loop control-variables are not changed
|
range checks,
|
||||||
|
\f5CARDINAL\fP overflow checks,
|
||||||
|
checks when assigning a \f5CARDINAL\fP to an \f5INTEGER\fP and vice versa,
|
||||||
|
and checks that \f5FOR\fP-loop control-variables are not changed
|
||||||
in the body of the loop.
|
in the body of the loop.
|
||||||
.PP
|
.PP
|
||||||
Constants of type \f5LONGINT\fP are integers with a suffix letter \f5D\fP
|
Constants of type \f5LONGINT\fP are integers with a suffix letter \f5D\fP
|
||||||
|
@ -96,7 +92,8 @@ Each operand of a constant expression must be a constant:
|
||||||
a string, a number, a set, an enumeration literal, a qualifier denoting a
|
a string, a number, a set, an enumeration literal, a qualifier denoting a
|
||||||
constant expression, a typetransfer with a constant argument, or
|
constant expression, a typetransfer with a constant argument, or
|
||||||
one of the standard procedures
|
one of the standard procedures
|
||||||
\f5ABS\fP, \f5CAP\fP, \f5CHR\fP, \f5LONG\fP, \f5MAX\fP, \f5MIN\fP, \f5ODD\fP, \f5ORD\fP,
|
\f5ABS\fP, \f5CAP\fP, \f5CHR\fP, \f5LONG\fP, \f5MAX\fP, \f5MIN\fP,
|
||||||
|
\f5ODD\fP, \f5ORD\fP,
|
||||||
\f5SIZE\fP, \f5SHORT\fP, \f5TSIZE\fP, or \f5VAL\fP, with constant argument(s);
|
\f5SIZE\fP, \f5SHORT\fP, \f5TSIZE\fP, or \f5VAL\fP, with constant argument(s);
|
||||||
\f5TSIZE\fP and \f5SIZE\fP may also have a variable as argument.
|
\f5TSIZE\fP and \f5SIZE\fP may also have a variable as argument.
|
||||||
.PP
|
.PP
|
||||||
|
@ -109,7 +106,8 @@ Type declarations (section 6)
|
||||||
.NH 3
|
.NH 3
|
||||||
Basic types (section 6.1)
|
Basic types (section 6.1)
|
||||||
.PP
|
.PP
|
||||||
The type \f5CHAR\fP includes the ASCII character set as a subset. Values range from
|
The type \f5CHAR\fP includes the ASCII character set as a subset.
|
||||||
|
Values range from
|
||||||
\f50C\fP to \f5377C\fP, not from \f50C\fP to \f5177C\fP.
|
\f50C\fP to \f5377C\fP, not from \f50C\fP to \f5177C\fP.
|
||||||
.NH 3
|
.NH 3
|
||||||
Enumerations (section 6.2)
|
Enumerations (section 6.2)
|
||||||
|
@ -121,14 +119,15 @@ Record types (section 6.5)
|
||||||
.PP
|
.PP
|
||||||
The syntax of variant sections in [1] is different from the one in [2].
|
The syntax of variant sections in [1] is different from the one in [2].
|
||||||
Our implementation recognizes both, giving a warning for the older one.
|
Our implementation recognizes both, giving a warning for the older one.
|
||||||
However, see section 2.
|
However, see section 3.
|
||||||
.NH 3
|
.NH 3
|
||||||
Set types (section 6.6)
|
Set types (section 6.6)
|
||||||
.PP
|
.PP
|
||||||
The only limitation imposed by the compiler is that the base type of the
|
The only limitation imposed by the compiler is that the base type of the
|
||||||
set must be a subrange type, an enumeration type, \f5CHAR\fP, or
|
set must be a subrange type, an enumeration type, \f5CHAR\fP, or
|
||||||
\f5BOOLEAN\fP. So, the lower bound
|
\f5BOOLEAN\fP.
|
||||||
does not have to be positive. However, if a negative lower bound is used,
|
So, the lower bound may be negative.
|
||||||
|
However, if a negative lower bound is used,
|
||||||
the compiler gives a warning of the \fIrestricted\fP class (see the manual
|
the compiler gives a warning of the \fIrestricted\fP class (see the manual
|
||||||
page of the compiler).
|
page of the compiler).
|
||||||
.PP
|
.PP
|
||||||
|
@ -145,7 +144,8 @@ Operators (section 8.2)
|
||||||
.NH 4
|
.NH 4
|
||||||
Arithmetic operators (section 8.2.1)
|
Arithmetic operators (section 8.2.1)
|
||||||
.PP
|
.PP
|
||||||
The Report does not specify the priority of the unary operators \f5+\fP or \f5-\fP:
|
The Report does not specify the priority of the unary
|
||||||
|
operators \f5+\fP or \f5-\fP:
|
||||||
It does not specify whether
|
It does not specify whether
|
||||||
.DS
|
.DS
|
||||||
.ft 5
|
.ft 5
|
||||||
|
@ -217,15 +217,15 @@ Standard procedures (section 10.2)
|
||||||
.PP
|
.PP
|
||||||
Our implementation supports \f5NEW\fP and \f5DISPOSE\fP
|
Our implementation supports \f5NEW\fP and \f5DISPOSE\fP
|
||||||
for backwards compatibility,
|
for backwards compatibility,
|
||||||
but issues warnings for their use. However, see section 2.
|
but issues warnings for their use. However, see section 3.
|
||||||
.PP
|
.PP
|
||||||
Also, some new standard procedures were added, similar to the new standard
|
Also, some new standard procedures were added, similar to the new standard
|
||||||
procedures in Wirth's newest compiler:
|
procedures in Wirth's newest compiler:
|
||||||
.IP \-
|
.IP \-
|
||||||
\f5LONG\fP converts an argument of type \f5INTEGER\fP or \f5REAL\fP to the types \f5LONGINT\fP or
|
\f5LONG\fP converts an argument of type \f5INTEGER\fP or \f5REAL\fP to the
|
||||||
\f5LONGREAL\fP.
|
types \f5LONGINT\fP or \f5LONGREAL\fP.
|
||||||
.IP \-
|
.IP \-
|
||||||
\f5SHORT\fP performs the inverse transformation, without range-checks.
|
\f5SHORT\fP performs the inverse transformation, without range checks.
|
||||||
.IP \-
|
.IP \-
|
||||||
\f5FLOATD\fP is analogous to \f5FLOAT\fP, but yields a result of type
|
\f5FLOATD\fP is analogous to \f5FLOAT\fP, but yields a result of type
|
||||||
\f5LONGREAL\fP.
|
\f5LONGREAL\fP.
|
||||||
|
@ -243,6 +243,16 @@ work properly.
|
||||||
.PP
|
.PP
|
||||||
The procedure \f5IOTRANSFER\fP is not implemented.
|
The procedure \f5IOTRANSFER\fP is not implemented.
|
||||||
.NH 1
|
.NH 1
|
||||||
|
Backwards compatibility
|
||||||
|
.PP
|
||||||
|
Besides recognizing the language as described in [1], the compiler recognizes
|
||||||
|
most of the language described in [2], for backwards compatibility.
|
||||||
|
It warns the user for old-fashioned
|
||||||
|
constructions (constructions that [1] does not allow).
|
||||||
|
If the \fI-Rm2-3\fP option (see [6]) is passed to \fIack\fP, this backwards
|
||||||
|
compatibility feature is disabled. Also, it may not be present on some
|
||||||
|
smaller machines, like the PDP-11.
|
||||||
|
.NH 1
|
||||||
Compile time errors
|
Compile time errors
|
||||||
.PP
|
.PP
|
||||||
The compile time error messages are intended to be self-explanatory,
|
The compile time error messages are intended to be self-explanatory,
|
||||||
|
@ -270,7 +280,8 @@ The ACK Modula-2 compiler produces code for an EM machine as defined in [3].
|
||||||
Therefore, it depends on the implementation
|
Therefore, it depends on the implementation
|
||||||
of the EM machine for detection some of the runtime errors that could occur.
|
of the EM machine for detection some of the runtime errors that could occur.
|
||||||
.PP
|
.PP
|
||||||
The \fITraps\fP module enables the use to install his own runtime error handler.
|
The \fITraps\fP module enables the user to install his own runtime
|
||||||
|
error handler.
|
||||||
The default one just displays what happened and exits.
|
The default one just displays what happened and exits.
|
||||||
Basically, a trap handler is just a procedure that takes an INTEGER as
|
Basically, a trap handler is just a procedure that takes an INTEGER as
|
||||||
parameter. The INTEGER is the trap number. This INTEGER can be one of the
|
parameter. The INTEGER is the trap number. This INTEGER can be one of the
|
||||||
|
|
Loading…
Reference in a new issue