Si la présentation des définitions et le libellé des mots définis par le programmeur FORTH sont laissés à son entière appréciation, il est quand même recommandé de suivre quelques règles. Une bonne présentation facilite la maintenance des programmes.
L'espacement et l'indentation ont pour but d'aérer une définition et mettre en valeur les structures et les composants de la définition. Ces directives s'appliquent esentiellement aux définitions de type "deux-points":
Pas de ligne vierge entre définitions, sauf pour séparer des groupes de définitions distinctes.
Le commentaire désignant l'action du mot sur le contenu de la pile est indiqué entre parenthèses, après le libellé du mot, en utilisant le mot ( ou (S. Le second mot est plus particulièrement réservé au commentaire de pile.
La nature des données traitées par le mot peut être indiquée de manière symbolique à l'aide des abréviations suivantes:
n
|
nombre signé 16 bits | |
d
|
nombre signé 32 bits | |
u
|
nombre non signé 16 bits | |
ud
|
nombre non signé 32 bits | |
t
|
nombre 24 bits (en virgule flottante) | |
q
|
nombre 64 bits | |
c
|
valeur ASCII sur 7 bits, 0 <= c <= 127 | |
b
|
octet sur 8 bits, 0 <= b <= 255 | |
?
|
drapeau booléen, s'écrit aussi sous la forme: | |
|
|
|
t=
|
valeur vraie | |
f=
|
valeur fausse | |
adr
|
adresse, valeur 16 bits non signée | |
cfa
|
adresse du champ de code d'exécution | |
pfa
|
adresse du champ paramétrique | |
lfa
|
adresse du champ de lien | |
nfa
|
adresse du champ du nom | |
str
|
paire 16 bits désignant l'adresse et la longueur d'une chaîne, équivalent: | |
|
|
Certaines définitions traitent le flot d'entrée, cas notamment des mots de définition mais également d'autres types de mots.
De tels mots nécessitent, près d'eux, des mots en apposition.
Que sont ces appositions?
Ce peuvent être:
-des mots | <mot> | |
-des textes | <text> | |
-des nombres | <n> ou <d> ou <nb> | |
-des chaînes | <str> ou <strVar> | |
-des expressions de clés | <key>, etc... |
Où placer ces appositions? Suivant le mot M sous revue et la nature de ces appositions, ce peut être avant ou après le mot M.
Le commentaire de pile indique clairement ce qui doit se trouver sur la pile AVANT l'exécution du mot M, donc les appositions avant. mais il est muet sur les appositions arrières. Il peut être pédagogique de préciser aussi les appositions avant (bien que cela puisse faire double emploi) dans le commentaire de pile.
C'est pourquoi, il est préconisé la définition et l'emploi, si nécessaire, du commentaire d'entrée.
Les appositions seraient placées entre crochets anglés |< >| (signe inférieur à et supérieur à). Exemple:
CONSTANT ( n ---, <nom>)
ou, si l'on veut préciser davantage la manoeuvre d'entrée:
: CONSTANT ( <n> ---, <nom>)
: DEFER ( - <mot>)
: $! ( <str>, <strVar>, ad1 l1 ad2 l2 ---)
: INPUT$ ( <strVar> ad l --- <Enter ><text> )
: VOCABULARY ( --- <voc> )
: ALSO ( <voc><nomFich[.ext]> ---)
: SAVE ( ad1 ad2 ---<nomFich[.ext]>
En résumé, la syntaxe du commentaire d'entrée serait la suivante:
( <appoAv1> ... <appAvN> --- <appoAr1> ... <appoArN> )
Arithmétique | Forme | Exemple | |
entier 1 | 1nom | 1+ | |
entier 2 | 2nom | 2* | |
pointeur relatif | +nom | +TRACE | |
pointeur par zones | *nom | *TRACE | |
Compilation | |||
début d'un mot de haut niveau | nom: | CASE: | |
fin d'un mot de haut niveau | ;nom | ;CODE | |
insertion dans le dictionnaire nom | nom, | C, | |
exécution pendant la compilation, immédiat | [nom] | [COMPILE] | |
idem, avec influence sur le flot d'entrée nom | nom' | CR' | |
primitive interne | (nom) | (LOOP) | |
mot de définition | :nom | :COULEUR | |
Structures de données | |||
tableau de données | nomS | MONNAIES | |
nombre total d'éléments | #nom | #MONNAIE | |
valeur de l'élément courant (variable) | nom# | MONNAIE# | |
item courant | n nom | 5 MONNAIE | |
avance au prochain élément | +nom | +MONNAIE | |
taille du décalage depuis le début de la structure |
nom+ | MONNAIE+ | |
taille par (octets par) | /nom | /MONNAIE | |
index de pointage | >nom | >IN | |
index de fichier | (nom) | (BANQUE) | |
pointeur de fichier | - nom | -GUICHET | |
initialiation d'une structure de données | 0nom | 0MONNAIE | |
Direction, conversion | |||
en arrière | nom< | SLIDE< | |
en avant | nom> | CMOVE> | |
depuis | <nom | <MODEM | |
vers | >nom | >MODEM | |
conversion en | nom>nom | PIED>METRE | |
Logique, contrôle | |||
donne un drapeau booléen | nom? | CREDIT? | |
donne un drapeau booléen inverse | - nom? | -DEBIT? | |
adresse d'un drapeau booléen | 'nom? | 'CREDIT? | |
opérateur conditionnel | ?nom | ?DUP | |
force à vrai un drapeau booléen | +nom | ||
sans symbole | nom | PRINTING | |
force à faux un drapeau booléen | - nom | ||
Mémoire | |||
sauve une valeur | @nom | @CURSEUR | |
restaure une valeur | !nom | !CURSEUR | |
sauve dans une valeur | nom! | DELAI! | |
rappel depuis une valeur | nom@ | INDEX@ | |
adresse d'un nom | 'nom | 'S | |
échange d'octets | >nom< | >MOVE< | |
Type numérique | |||
rappel d'un octet | Cnom | C@ | |
traitement sur 32 bits (double précision) | Dnom | D+ | |
opérateur mixte 16-32 bits | Mnom | M* | |
opérateur 24 bits | Tnom | T* | |
opérateur 64 bits | Qnom | Q* | |
traitement 16 bits non signé | Unom | U. | |
Sortie, affichage | |||
affichage d'un item | .nom | .DATE | |
affichage d'un nombre | nom. | D. U. | |
affichage d'un nombre justifié à droite | nom.R | U.R | |
Texte | |||
chaîne suivie par " | nom" | ABORT" | |
opérateur sur texte ou chaîne de caractères (similaire au préfixe $ utilisé en BASIC) |
"nom | "COMPARE | |
variable chaîne ou zone mémoire alphanumérique | nom$ | TAMPON$ |
Dans les articles des revues anglaises et américaines traitant du FORTH, les auteurs citent certaines fonctions par leur prononciation afin d'éviter les problèmes de compréhension liés à la typographie de celles-ci. En français, quand nous écrivons point- virgule, nous faisons bien entendu référence au mot ; .
Symbole
|
prononciation française | prononciation anglaise | |
!
|
point d'exclamation | store | |
@
|
arobase | fetch | |
#
|
dièse | sharp (or "number") | |
$
|
dollar | dollar | |
%
|
pour cent | percent | |
^
|
carré ( ou exposant) | caret | |
&
|
esperluette | ampersand | |
*
|
étoile (ou multiplier) | star | |
(
|
parenthèse ouvrante ( ou ouvrante) | left paren | |
)
|
parenthèse fermante ( ou fermante) | right paren | |
-
|
moins | dash, not | |
+
|
plus | plus | |
=
|
égal | equals | |
{ }
|
accolades | faces (or "curly brackets") | |
[ ]
|
crochets | square brackets | |
"
|
guillemet | quote | |
'
|
apostrophe | tick (prefix) | |
~
|
tilde | tilde | |
|
|
barre verticale | bar | |
\
|
barre de fraction inverse, sous (ou barre oblique inverse) | backslash | |
/
|
barre de fraction, sur (ou barre oblique) | slash | |
<
|
inférieur à | less-than | |
>
|
supérieur à | greater-than | |
?
|
point d'interrogation | question (or "query") | |
,
|
virgule | comma | |
.
|
point | dot |
-- hautdepage -- page d'accueil --