CONVENTIONS D'ÉCRITURE

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.

A. Espacement et indentation.

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.

B. Le commentaire de pile.

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:
 

fl   valeur quelconque (0 ou -1)

 
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:
 

adr len   adresse et longueur d'une chaîne

C. Commentaire du flot d'entrée.

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

D. Libellé des noms à définir.

  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 +PRINT
  sans symbole nom PRINTING
  force à faux un drapeau booléen - nom -PRINT
       
  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$


E. Prononciation des symboles.

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