This information is included for the benefit of those who are coming to the Modula-2 language from Pascal. Only the differences between the two languages are shown. Since there are many versions of Pascal, the information here may not be correct for a given version.
Modula-2 | :Pascal | :
---|---|
FOR i := S TO N [BY M] | for i := S [down]to N do |
DO statement sequence END; | <compound> statement |
WHILE .. DO .. END; | while .. do .. ; |
LOOP .. {EXIT} .. END; | n/a |
RETURN (* Required in function procedure, optional in regular procedure *) | n/a |
IF .. THEN .. | if .. then |
{ELSIF .. THEN ..} | [else ..] |
[ELSE ..] | |
END; | |
CASE labels: | |
constant expressions or ranges | must be constants |
ELSE available; | no else available |
delimiter is | | |
RECORDS: | |
Any number or order of variants in record | one variant at end of record |
WITH unqualifies one level | with can unqualify many levels |
NEW, DISPOSE must be translated to | NEW, DISPOSE execute directly |
functions [DE]ALLOCATE |
Modula-2 | Pascal | |
---|---|---|
Not equals | <> or # | <> |
Conjunction | AND or & | and |
Comment delimiters | (* *) | (* *) or { } |
Quotation marks | ' or " | ' only |
Character constants | literal or <octal>C | literal only |
Decimal | explicit | may be implicit |
Scale factor | E | E or e |
Set delimiters | { .. } | [ .. ] |
Subrange delimiters | [ .. ] | n/a |
Statement delimiter | ;* | ; |
Case delimiter | |* | ; |
Dereferencing operator | ^ (not in declaration) | ^ (also in declaration) |
Set operations | IN,INCL,EXCL,+,-,*,/ | IN,+,- |
Symbols for octal, hex | ||
and char constants | B, H, C | n/a |
* may be superfluous |
Modula-2 | Pascal | |
---|---|---|
Modules | yes | no |
Regular Procedures | yes | yes |
Function Procedures | PROCEDURE | function |
Separate Compilation | yes | not usually |
Low-level facilities | yes | no |
Coroutines | yes | no |
Compound Statements | statement sequence | begin .. end |
Comment Nesting | yes | no |
Ranges used by name | yes | no |
Control transfer | EXIT, RETURN | goto |
I/O Statements | imported type specific | (general) read[ln], write[ln] |
General Syntax: | ||
Program Heading | MODULE name; | PROGRAM Name (I/O list); |
Program Ending | END name. | end. |
Import Lists | any number | n/a |
Export lists | only one | n/a |
Declaration order | any order | const, type, var, procedures |
Reserved words, | upper case | any case |
Standard identifiers | upper case | any case |
Constant expressions in Declaration | yes | no |
Identifiers - case | sensitive | insensitive |
- length | unlimited | usually limited |
Predefined types | CARDINAL | n/a |
INTEGER | integer | |
REAL, LONGREAL | real | |
COMPLEX, LONGCOMPLEX | n/a | |
CHAR | char | |
POINTER | pointer | |
BOOLEAN | boolean | |
ARRAY | array | |
RECORD | record | |
PACKEDSET | n/a | |
PROC | n/a | |
SYSTEM.LOC | n/a | |
Type coercion | SYSTEM.CAST | no |
Procedures as variables | yes | no |
Scalar type arithmetic | INC (s), INC (s,n), | |
DEC (s), DEC (s,n) | pred, succ | |
function declaration | PROCEDURE name | Function name |
({params}): resultType | {(params)}: resultType | |
Calls to parameterless functions | empty parameter list required | no parameter list |
Mutual recursion | FORWARD in one-pass compilers | forward is required |
Boolean expression | ||
evaluation | Short-circuted | whole expression |
Mixed expressions | not allowed | often allowed |
Open arrays using | ||
generic LOC | allowed | not allowed |
Explicit SET typing | yes | no |
Packing ARRAY OF CHAR | automatic | explicitly done |
Multiple range | [a..b],[c..d] | {a..b,c..d} |
inverse of ORD | VAL | only for CHR |
Terminate program | HALT | use goto |
capitalization | CAP | n/a |
Round off | TRUNC (x+.5) | round (x) |
NIL | standard identifier | reserved word |
Exceptions | available | n/a |
Termination | can be trapped & handled | n/a |