%% 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