Autres articles / Other articles

Les reconnaisseurs de code

publication: 28 avril 2024 / mis à jour 29 avril 2024

Read this page in english

 

Les reconnaisseurs est un concept abordé dans plusieurs versions du langage Forth.

Depuis la version 7.0.7.19, ESP32forth intègre les reconnaisseurs de code. Les reconnaisseurs permettent d'étendre l'interpréteur/compilateur FORTH.

Ce concept vient d'être implanté dans toutes les versions eForth, dont ESP32forth, par Brad NELSON. Voici la vidéo qui explique ce concept:

Dans cette vidéo, Brad NELSON donne un exemple permettant d'ajouter et traiter un système de logarithmes, dont vous trouverez le code source ici.

Reconnaitre les nombres binaires

La version FlashForth accepte les nombres binaires sous la forme %nnnnnnnnn, ceci sans nécessiter la sélection de la base binaire. ESP32forth ne dispose pas de cette facilité:

binary 10110111 decimal 

Avec Flashforth, pour analyser le code binaire situé après le caractère % comme nombre entier, il suffirait simplement de taper ceci:

%10110111 

Avant la version 7.0.7.19 de eForth/ESP32forth, il aurait été nécessaire de modifier le code source de ESP32Forth.

Voici le code permettant d'étendre les reconnaisseurs de code FORTH de ESP32forth pour détecter et traiter les entiers binaires:

( Add recognizer for binary integers. ) 
internals also recognizers definitions 
: REC-BIN-NUM ( c-addr len -- f addr1 | addr2 ) 
    over c@ [char] % = 
    if 
        1- swap 1+ swap 
        base @ >r BINARY 
        s>number? if 
            ['] aliteral RECTYPE-NUM 
        else 
            RECTYPE-NONE 
        then 
        r> base ! 
    else 
        RECTYPE-NONE 
    then 
  ; 
 
' REC-BIN-NUM +RECOGNIZER 
 
previous definitions forth 

Une fois ce code compilé, on peut maintenant entrer les valeurs binaires en faisant simplement précéder du caractère %, comme ceci:

%123
--> %123
ERROR: %123 NOT FOUND!
--> %101
5 --> .
5  ok

J'ai volontairement entré d'abord un nombre %123 non binaire. L'inteerpréteur FORTH détecte ceci comme une erreur d'interprétation. Le second essai %101 empile parfaitement la valeur correspondant au nombre binaire 101.


Legal: site web personnel sans commerce / personal site without seling