_
~ DAMOLAB - XBNF Neurotranslator ~
"Comme tu peux le voir, mon jeune élève, tes amis ont échoué. Tu vas maintenant admirer la puissance de feu et l'efficacité de ma toute nouvelle station spaciale de combat." - Empereur à Luke
DAMOLAB _./._ [ XBNF (#TAGS) ] _./._ Blog (Life) _./._ Nous contacter

XBNF neurotranslator v1.14


| FR | par DAMO | | 12/04/2026 20h30 | (last update 04/05/2026 19h10) | Commentaires |
#XBNF #LINUX
Nouvelle mouture de XBNF Neurotranslator : le compilateur de compilateur ultime
|


Pour le détail voir la RELEASE_NOTE.

/!\\ la libriairie pour intégrer la v1.14 est actuellement en cours de validation.

Pour plus de détails, regardez :
- la documentation en français
- les grammaires de tests
- les libraires pour des exemples d'utilisation dans la vrai vie
- sur ce blog, toutes les ressources web

1) XBNF Neurotranslator - v1.14 - Quoi de neuf ?


- un shebang pour windows (commande avec le fichier grammaire directement)
- harmonisation de la syntax des nombres
- détection de EOF (Fin de fichier) plus robuste
- robustesse des flux temps-réel en entrée standard
- détection de la profondeur maximal plus fiable
- (POS) appel dans l'analyse
- (PARAM*) les paramètres peuvent être modifiés à n'importe quel moment
- "StRing"I : ajout de chaines de caractères indépendante de la casse
- (RANGE) gère des caractères sur 4 octets (32 bits)
- plusieurs améliorations importantes du debuggeur
- gestion des exceptions à l'intérieur d'une grammaire
- introduction de la notion d'opérations sur les variables
- (CHANNEL <num> <rule>) : redirige un flux vers un autre canal
- exception si memoire faible avec o_low_memory_detect
- dans cette version, beaucoup de refactoring du code

2) Améliorations majeurs



2.1) syntaxes


Les nombres respectent maintenant les préfixes suivants :
- 0hE24 : [h]exadécimal
- 0d197 : [d]écimal
- 0o567 : [o]ctal
- 0b110 : [b]inaire

Les operations sur des variables sont maintenant géré différement que les fonctions classiques (<FX> <Rule>) :
- @nb++
- @nb--
- @nb.set(<rule>)

Cette mécanique va grandement évoluer dans le futurs, il y a en effet besoin de plus d'intelligence.


La notion de chaine non sensible à la casse, par exemple "STRing"I est valide pour :
- string
- StRinG
- sTrIng
- ...

La fonction RANGE est étendu pour des caractères codé sur plusieurs octet (4 max):
CHAR1: (RANGE 0h4F4C 0hFFFF)
CHAR2: (RANGE "\x4F\x4C" "\xFF\xFF")


2.2) flux temps-réel en entrée


L'utilisation de l'option -f avec -i - peut poser des problèmes lorsque le flux se referme,
par exemple lorsque la commande qui envoi les donnée s'arrête.

L'option o_rt_flush_broken_behaviour permet d'adopter un autre comportement,
celui par défaut lance une exception lorsqu'il y a un problème sur le flux d'entré se produit.
Sachez juste qu'il est possible de tenter une relance ou attendre un changement.

2.3) paramétrage de la profondeur des récusions


La récursion peut poser problème lorsqu'elle ne peut pas être détecté par l'option o_loop_detection,
lorsque la récusion est profonde et implique un grand nombre de règles ou sur un gros volume de données.

Selon les cas de figure :
- la récursion d'une règle se produit à la même position, voir test.loop.xbnf et
samples/logic.xbnf (voir le test "Reversed" dans le Makefile)
- la grammaire ne nécessite pas de traduction complexe (juste extraire un élément
ou identifier un token)
- la grammaire est complexe mais sur un élément précis.

La solution est déja d'identifier et limiter l'impact d'une boucle;

En phase d'analyse (input) :
- o_max_depth_analyze : pour limiter la profondeur (en phase d'analyse/input)
- o_stop_max_depth_analyze : pour invalider la règle (ROLLBACK) au lieu de générer une exception

En phase de production (output) :
- o_max_depth_produce : pour limiter la profondeur (en phase de production/output)
- o_stop_max_depth_produce : pour stopper la règle au lieu d'une générer une exception

D'autres solutions peuvent être mis en place :
- utiliser la définition directe (= au lieu de :) et ainsi vider l'arbre en cours de route
- boucler mais sans conservation de l'arbre d'analyse mais la chaine analysée :
 (SNAP {* ... *}) 

- utiliser d'autres méthodes d'analyse : STRING-TO, LOOKUP ou NOT

2.4) paramétrage des ressources mémoire


Une mémoire pleine peut causer un freeze du système, lorsqu'une grammaire n'est pas optimisée,
il peut être utile de positionner une valeur limite de mémoire libre avec o_low_memory_detect.
En dessous de cette valeur en Mo, une exception sera levée.

2.5) (CHANNEL <channel> <rule>)


Cette fonction permet de rediriger le flux du canal courant (celui ou CHANNEL apparait) vers un autre canal,
cette redirection n'est appliquée que dans la règle <rule>.

<channel> correspont à la position du canal parmis les canaux (séparé par des #).

Le meilleur exemple reste la grammaire xbnf.xbnf (la grammaire qui se décrit elle-même),
XBNF       :    shebang (RC) definition (RC) XBNF 
		# definition XBNF
		# (CHANNEL 0 definition XBNF)


Appelée de cette façon :
 xbnf -i xbnf.xbnf -0 -o - xbnf.xbnf 


Le canal 2 en sortie (output/production) est redirigé en interne vers le canal 0,
la sortie va ainsi produire exactement la même chose que ce qui a été analysé.

Pour rappel, les options -i (input) / -o (output) / -0 (skip), sont appliquées dans
le même ordre que les canaux (#) déclarés à l'intérieur de la grammaire.



2.6) POS


Le mécanisme du (POS <element>) utilisé pour produire un élément en indiquant sa position sans devoir
le ré-écrire peut maintenant être utilisé pour ré-analyser un élément déja parsé.

 regle : r1 ... [0] 

lorsque r1 est parsé la valeur de la chaine est conservé dans l'arbre d'analyse,
[0] s'attends à parser la chaine correspondante (lu par r1).

De même, le concept n'a pas été poussé mais peut être interressant.


2.7) Les exceptions


La fonction (CATCH "pattern" <rule>) permet de récupérer la chaine produite par une exception qui
produite par la règle <rule> si la chaine "pattern" est dans le message de l'exception.
Ce peut être n'importe quelle exception produite durant les phases d'analyse ou production (input/output).

La fonction (THROW "chaine") produit une exception avec le message "chaine".
Je n'ai pas poussé les tests mais cela peut être intéressant.


2.8) Le debugger


La commande "a" avec une chaine permet, d'avancer dans l'analyse jusqu'à la présence de cette chaine.

Ajout de phases, en plus de :
- input : phase d'analyse
- output : phase de production

les phases :
- init : initialisation des éléments de la grammaires comme XBNF
- proceed : application des flux au élément (INFLUX et OUTFLUX)
- cached : analyse en mode cache (optimisation de la lecture de la grammaire)

Pour parcourir ces phases en détail, il faut configurer avec 'C' et activer ces phases.


Dans le débugger, pour aller directement jusqu'à la phase suivante, c'est la commande [N].

Pour rappel, il est plus facile de debugger une grammaire en mettant ***
juste avant l'endroit précis ou vous avez besoin de voir ce qu'il s'y passe.

Joyeuses translations ...





Nom/surnom:
Message:


revenir sur l'article
#XBNF #LINUX

Aucun commentaire.

dans
une
galaxy
lointaine
Charte du site damolab.zapto.org est motorisé par

"La force est une sorte de fluide crée par tout être vivant, une énergie qui nous entoure et nous pénètre, et qui maintient la galaxie en un tout unique."
- Obi-Wan à Luke Yoda