APPENDICE A
PROCEDURE E FUNZIONI, STANDARD
Procedure per il trattamento dei flussi
put (f)
get (f)
reset (f)
rewrite (f)
page (f)
appende, al flusso f, il valore della variabile buffer ft; 2 applicabile
solo se prima dell’esecuzione eof (f) é vero; eof (f) rimane vero e ft
diviene indefinito.
posiziona sulla prossima componente del flusso ed assegna questa
componente alla variabile buffer f1. Se non esiste una “prossima
componente”, eof (f) diventa vero ed il valore di ft & indefinito. E
applicabile solo se eof (f) é falso prima dell’esecuzione.
riposiziona, per permettere una lettura, all’inizio del flusso la
posizione corrente: assegna cioé alla variabile buffer ft il valore del
primo elemento di f; eof (f) diviene falso se f non é vuoto, altrimen-
tio ft & indefinito ed eof (f) rimane vero.
sostituisce il valore corrente di f con il flusso vuoto. eof (f) diventa
vero e pud essere scritto con nuovo flusso.
fa si che la stampante passi all’inizio della nuova pagina prima di
stampare la prossima linea di un flusso-testo.
read, readIn, write, writeln, sono analizzate nel capitolo 12.
Procedure di allocazione dinamica
new (p) alloca una nuova variabile v ed assegna I'indirizzo div
alla variabile puntatore p. Se vé tipo record con variante,
la forma
new (p, tl,...tn) ud essere usata per allocare una variabile con valore di
114
campo discriminatore t1...tn. I valori dei campi discrimi-
natori devono essere elencati in modo contiguo e nello
stesso ordine della loro dichiarazione; non possono
essere cambiati durante l’esecuzione.dispose (p) indica che la memoria occupata dalla variabile p non é
pid necessaria.
dispose (p, tl,...,tn) pudessere usata per indicare che memoria occupata dalla
variabile p (con valore di campo discriminatore t1...tn)
non é pitt necessaria, I valori dei campi devono essere
identici a quelli usati nell’allocazione della variabile.
Procedure per trasformazione dati
pack (a, i, z) se a é una variabile vettore del tipo
array [m..n] of T
ez & una variabile di tipo
packed array [u..v] of T
in cui n-m >= v-u, allora la procedura @ equivalente a:
for
u to v doz [i] =a [j-uti]
unpack (z, a, i) & equivalente a
for j
u to v doa [j-uti
Funzioni aritmetiche
abs (x) _calcola il valore assoluto di x. X pud essere sia intero che reale ed il
risultato é dello stesso tipo di x.
sqr (x) calcola x*x. X pud essere sia intero che reale ed il risultato é dello
stesso tipo di x.
sin (x) mentre il risultato @ sempre reale, x pud essere intero o reale
(Questo vale anche per le funzioni che seguono).
cos (x)
arctan (x)
exp (x)
In (x) (logaritmo naturale)
sqrt (x) (radice quadrata)
Predicati (funzioni booleane)
odd (x) x deve essere intero; il risultato & vero se x é dispari e falso se é pari.
115coln (f) dail valore vero quando, leggendo il flusso-testo f, é raggiunta la fine
della linea corrente.
eof (f) da il valore vero quando, leggendo il flusso-testo f, é raggiunta la fine
del flusso.
Funzioni di trasformazione
trunc (x) x deve essere reale; il risultato él'intero pit grande minore od eguale
ad x per x>=0, ed il pit’ piccolo intero maggiore od eguale
ad x per x<=0.
round (x) x deve essere di tipo reale; il risultato - intero é il valore arrotondato.
Vale a dire:
round (x) = trunc (x+0.5), per x > 0
trunc (x-0.5), per x < 0
ord (x) dail numero associato ad x nell’insieme dei valori definiti dal tipo x.
chr (x) x deve essere intero ed il risultato é il carattere il cui numero ordinale
é x (se esiste).
Altre funzioni standard
succ (x) x pud essere di qualunque tipo scalare, eccettuato reale, ed il risultato
@ il successore di x (se questi esiste)
pred (x) x pud essere di qualunque tipo scalare, eccettuato reale, ed il risultato
@ il predecessore di x (se questi esiste).
116Operatore
aritmetici:
+ (unario)
- (unario)
div
/
mod
relazioni:
So
<
>
logici:
not
or
and
su insiemi:
ee
*
APPENDICE B
SOMMARIO DEGLI OPERATORI
Operazione
assegnamento
identita
inversione di
segno
addizione
sottrazione
moltiplicazione
divisione intera
divisione reale
modulo
uguaglianza
disuguaglianza
minore di
maggiore di
minore o uguale
inclusione
maggiore 0 uguale
inclusione
appartenenza
negazione
disgiunzione
congiunzione
unione
differenza di insiemi
intersezione
Tipo operanat
qualunque tipo
eccettuati flussi
Tipo risultato
intero o reale stesso
dell’operando
intero o reale intero 0
reale
intero intero
intero o reale reale
intero intero
scalare, stringa,
set 0 puntatore
scalare o stringa
Booleano
scalare o stringa
set
scalare o stringa
set
primo operando
scalare, il secondo
& il suo tipo set
Booleano Booleano
qualsiasi ins.tipoT — T
17APPENDICE C
TAVOLE
A. Identificatori standard
Costanti:
false, true, maxint
Tipi:
integer, Boolean, real, char, text
Parametri di programma:
input, output
Funzioni:
abs, arctan, chr, cos, eof, eoln, exp, In, odd, ord, pred, round, sin, sqr, sqrt,
succ, trunc
Procedure:
get, new, pack, page, put, read, readln, reset, rewrite, unpack, write,
writeln
B. Parole delimitatrici (parole riservate)
and end nil set
array file not then
begin for of to
case function or type
const goto packed until
div if procedure var
do in program while
downto label record with
else mod _ repeat
C. Identificatori non standard predefiniti in PASCAL 6000 - 3.4
Tipi:
alfa
Funzioni:
card, clock, eos, expo, undefined
Procedure:
date, getseg, halt, linelimit, message, putseg, time
118APPENDICE D
SINTASSI
Formalismo di Backus-Naur (BNF)
Si noti che i simboli
non sono simboli del linguaggio PASCAL ma dei meta-simboli del formalismo
BNF. Le parentesi graffe stanno ad indicare 0 o pit ripetizioni dei simboli
racchiusi; quindi:
A
{B}
@ una formulazione sintetiga della regola puramente recursiva:
A = | AB
::= ::= program
(
{, } );
{ }
{lettera o cifra> = |
{blocco} ::= ::= | label
{, };
::= intero senza segno>
| const
{, };
::= = ::= | | |
| ::= | = { }
119 . { } |
. { } E
|
E ::= | ::= ::= ’ { }*
::= | type
{; };
::= = | | ::= | |
::= ( {, } )
.. ::=
tipo strutturato> ::= |
packed
tipo strutturato disimpaccato> ::= | |
|
array [ {, } ] of
::= ::= ::= record end
::= | ; |
::= {; }
::=
{, } : | ::= case
of {; }
::= : | ::= : () | {, }
::= ::= set of ::= ::= file of ::= 1
120 | var
{; };
{, {identificatore> } :
>
|
procedure ; |
procedure
( } );
::= | var
| function
| procedure
{, }
identificatore> {, } :
= intestazione funzione>
function : ;
function ( {; }): ;
:
::= ::= begin {; istruzione } end
::= | :
|
= |
| | := |
:= ::= |
|
[ {, } ]
121
= . ::
::= 1
t
::= | = = | <> | <| <=|>=|>| in
|