Pascal identifiers may contain an underline, as in CUST_REC
,
but that is non-standard. Pascal comments are (* xxxxx *)
or { xxxxx }
. Strings
are in single quotes ('xxx'
) not double ("). Array
indexing starts at 1, not at 0 (the most insidious
difference if you are used to 0-based strings or arrays).
Constants are written
in the normal way (Pascal does not require 53D
for a double
INTEGER
). Use CONST
to equate names to constants. INTEGER
is 32 bits by default.
To use both size integers, define two
TYPE
s: INT = -32768 .. 32767
and
DBL = INTEGER
. For
logical-type variables, use BOOLEAN
.
For byte-type, use CHAR
.
Arithmetic
is normal, except that "/" means REAL divide and DIV
means
integer divide. Pointer notation differs from some other
languages, but you will get used to it.
Pascal uses brackets "[]
"
for indexing arrays and parentheses "()
" for passing
parameters. Parameters are by value, unless you specify
VAR
, and actual parameters must match
declared ones in both type and size (languages such
as C allow you to pass almost anything); this keeps you from
making many stupid errors but can be frustrating when writing
general system routine.
Pascal does AND/OR
before =, <, or >,
so you need parentheses
in a test like this: IF (COUNT<MAX) AND (PRINT=1) THEN
. To
get in the habit, put redundant parentheses around all compares:
IF (INDEX = MAX) THEN
. In Pascal, you should assume full
evaluation of logical expressions, not partial
evaluation. Some languages branch out of IF A AND B THEN
immediately if A
is FALSE
. Some Pascal compilers use full
and some use partial. Rewriting code that assumes partial
for a compiler that uses full is difficult.
Pascal has some features that may not be familiar to the SPL user: record, type, set, new variable, scalar type, subrange. Programmers should learn these powerful features.
Pascal has a REPEAT UNTIL
loop and
WHILE DO
. CASE
has
labels on each statement (they need not be in order) and
stops on an END
, but has no BEGIN
after the OF
. The FOR
loop uses TO
, not UNTIL
, as in FOR I:=1 TO 9 DO
.
In Pascal, FOR
loops are
well-defined and you need them to step properly through
subranges (e.g., CONST N=9; VAR X : 1..N; BUF : ARRAY 1..N
OF CHAR; FOR X := 1 TO N DO BUF[X] := ' '
). Try to rewrite
this example with a REPEAT
or WHILE
loop, without getting a
subrange violation.
If you are writing Pascal for MPE/iX, consult Stan Sieler's paper "How to Code: Pascal."