Retour

refoperateurpile.tex

Télécharger le fichier
%% Les définitions suivantes sont extraites du manuel de référence
%% Postscript (Addison-Wesley)
%% 
%% \itemitem {|pop|\quad } $any$ |pop| $-$
%% 
%% \itemitem {} enlève l'élément au sommet de la pile d'opérandes et le jette
%% \itemitem {} {\bf Exemple}
%% \itemitem {} \qquad 1 2 3 pop $\Longrightarrow$ 1 2
%% \itemitem {} \qquad 1 2 3 pop pop $\Longrightarrow$ 1 
%% \itemitem {} {\bf Erreurs~: stackunderflow}
%% 
%% \itemitem {|exch|\quad } $any_1 \ any_2$ |exch| $any_2 \ any_1$
%% \itemitem {} intervertit les deux éléments au sommet de la pile d'opérandes
%% \itemitem {} {\bf Exemple}
%% \itemitem {} \qquad 1 2 exch $\Longrightarrow$ 2 1
%% \itemitem {} {\bf Erreurs~: stackunderflow}
%% 
%% \itemitem {|dup|\quad } $any$ |dup| $any \ any$
%% \itemitem {} duplique l'élément au sommet de la pile d'opérandes
%% \itemitem {} {\bf Erreurs~: stackunderflow, stackoverflow}
%% 
%% \itemitem {|copy|\quad } $any_1 \ldots any_n \ n$ |copy| $any_1 \ldots
%% any_n \ any_1 \ldots any_n $
%% \itemitem {} si $n$ est un entier non négatif, |copy| pousse $n$
%% depuis la pile et duplique les $n$ éléments supérieurs dans la pile d'opérandes
%% \itemitem {} {\bf Exemple}
%% \itemitem {} \qquad 1 2 3 2 copy $\Longrightarrow$ 1 2 3 1 2 3
%% \itemitem {} \qquad 1 2 3 0 copy $\Longrightarrow$ 1 2 3
%% \itemitem {} {\bf Erreurs~: stackunderflow, stackoverflow, typecheck,
%% rangecheck, invalidacces}
%% 
%% \itemitem {|clear|\quad } $\vdash any_1 \ldots any_n$ |clear| $\vdash $
%% \itemitem {} enlève tous les éléments de la pile d'opérandes et lesignore
%% \itemitem {} {\bf Erreurs~: } aucune
%% 
Les extraits de définitions suivants proviennent du manuel de référence
Postscript (Addison-Wesley). Se référer à ce manuel pour obtenir des définitions 
complètes.
 
\sparagraphe {Opérateurs de manipulation de la pile d'opérandes}
 
\itemitem {|pop|\quad } $any$ |pop| $-$
 
\itemitem {} enlève l'élément au sommet de la pile d'opérandes et le jette
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 1 2 3 pop $\Longrightarrow$ 1 2
\itemitem {} \qquad 1 2 3 pop pop $\Longrightarrow$ 1 
\itemitem {} {\bf Erreurs~: stackunderflow}
 
\itemitem {|exch|\quad } $any_1 \ any_2$ |exch| $any_2 \ any_1$
\itemitem {} intervertit les deux éléments au sommet de la pile d'opérandes
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 1 2 exch $\Longrightarrow$ 2 1
\itemitem {} {\bf Erreurs~: stackunderflow}
 
\itemitem {|dup|\quad } $any$ |dup| $any \ any$
\itemitem {} duplique l'élément au sommet de la pile d'opérandes
\itemitem {} {\bf Erreurs~: stackunderflow, stackoverflow}
 
\itemitem {|copy|\quad } $any_1 \ldots any_n \ n$ |copy| $any_1 \ldots
any_n \ any_1 \ldots any_n $
\itemitem {} si $n$ est un entier non négatif, |copy| pousse $n$
depuis la pile et duplique les $n$ éléments supérieurs dans la pile d'opérandes.
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 1 2 3 2 copy $\Longrightarrow$ 1 2 3 2 3
\itemitem {} \qquad 1 2 3 0 copy $\Longrightarrow$ 1 2 3
\itemitem {} {\bf Erreurs~: stackunderflow, stackoverflow, typecheck,
rangecheck, invalidacces}
 
\itemitem {|clear|\quad } $\vdash any_1 \ldots any_n$ |clear| $\vdash $
\itemitem {} enlève tous les éléments de la pile d'opérandes et lesignore
\itemitem {} {\bf Erreurs~: } aucune
 
\sparagraphe {Opérateurs relationneles, booléen et bit à bit}
 
\itemitem {|eq|\quad } $any_1 any_2$ |eq| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $true$ s'ils sont égaux, $false$ s'ils ne le sont pas.
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 4.0 4 eq $\Longrightarrow$ true |%%| conversion de type
\itemitem {} \qquad (abc) (abc) eq $\Longrightarrow$ true
\itemitem {} \qquad (abc) /abc eq $\Longrightarrow$ true  |%%| une chaine et une nom peuvent 
être égaux
\itemitem {} \qquad [1 2 3] dup eq $\Longrightarrow$ true  |%%| un tableau est égal à lui-même
\itemitem {} \qquad [1 2 3] [1 2 3] eq $\Longrightarrow$ false |%%| deux tableaux distincts sont 
différents.
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow
 
\itemitem {|ne|\quad } $any_1 any_2$ |ne| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $false$ s'ils sont égaux, $true$ s'ils ne le sont pas.
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow
 
\itemitem {|ge|\quad } $num_1 num_2$ |ge| $bool$
\itemitem {|ge|\quad } $str_1 str_2$ |ge| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $true$ si le premier opérande est supérieur ou égal au second, 
$false$ dans tous les autres cas.
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 4.2 4 ge $\Longrightarrow$ true 
\itemitem {} \qquad (abc) (d) ge $\Longrightarrow$ true
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow, typecheck
 
\itemitem {|gt|\quad } $num_1 num_2$ |gt| $bool$
\itemitem {|gt|\quad } $str_1 str_2$ |gt| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $true$ si le premier opérande est strictement plus grand que
le second, $false$ dans tous les autres cas.
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow, typecheck
 
\itemitem {|le|\quad } $num_1 num_2$ |le| $bool$
\itemitem {|le|\quad } $str_1 str_2$ |le| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $true$ si le premier opérande est inférieur ou égal au second, 
$false$ dans tous les autres cas.
\itemitem {} {\bf Exemple}
\itemitem {} \qquad 4.2 4 le $\Longrightarrow$ true 
\itemitem {} \qquad (abc) (d) le $\Longrightarrow$ true
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow, typecheck
 
\itemitem {|lt|\quad } $num_1 num_2$ |lt| $bool$
\itemitem {|lt|\quad } $str_1 str_2$ |lt| $bool$
\itemitem {} enlève deux objets de la pile d'opérande et y place la valeur
booléenne $true$ si le premier opérande est strictement plus petit que
le second, $false$ dans tous les autres cas.
\itemitem {} {\bf Erreurs~: } invalidaccess, stackunderflow, typecheck
 
\itemitem {|and|\quad } $bool_1 bool_2$ |and| $bool_3$
\itemitem {|and|\quad } $int_1 int_2$ |and| $bool$
\itemitem {} Si les opérandes sont des booléens, |and| renvoie leur conjonction
logique. Si les opérandes sont des entiers, |and| renvoie le $and$ bit-à-bit de 
leurs représentations binaires.
\itemitem {} {\bf Erreurs~: } stackunderflow, typecheck
 
\itemitem {|not|\quad } $bool_1$ |not| $bool_2$
\itemitem {|not|\quad } $int_1$ |not| $int_2$
\itemitem {} Si les opérandes est un booléen, |not| renvoie sa conjonction
logique. Si l'opérande est un entier, |not| renvoie le complément bit-à-bit de 
sa représentation binaire.
\itemitem {} {\bf Erreurs~: } stackunderflow, typecheck
 
\itemitem {|or|\quad } $bool_1 bool_2$ |or| $bool_3$
\itemitem {|or|\quad } $int_1 int_2$ |or| $int_3$
\itemitem {} Si les opérandes sont des booléens, |or| renvoie leur différence
logique. Si les opérandes sont des entiers, |or| renvoie le \og ou inclusif\fg \ de 
leurs représentations binaires.
\itemitem {} {\bf Erreurs~: } stackunderflow, typecheck
 
\itemitem {|xor|\quad } $bool_1 bool_2$ |xor| $bool_3$
\itemitem {|xor|\quad } $int_1 int_2$ |xor| $int_3$
\itemitem {} Si les opérandes sont des booléens, |xor| renvoie leur \og ou exclusif\fg \
logique. Si les opérandes sont des entiers, |xor| renvoie le \og ou exclusif\fg \ de 
leurs représentations binaires.
\itemitem {} {\bf Erreurs~: } stackunderflow, typecheck