_
~ DAMOLAB - XBNF Neurotranslator ~
"La colère est comme une pluie torrentielle qui submerge tout sur son passage." - Dhammapada, Verset 223
XBNF #TAGS _./._ damolab _./._

XBNF neurotranslator v1.11


| FR | par DAMO | | 03/08/2025 16h00 | (last update 03/08/2025 15h33) | Commentaires |
#XBNF #LINUX
Nouvelle mouture de XBNF Neurotranslator : le compilateur de compilateur ultime
|


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


  • la version 1.10 comportait quelques bugs corrigé en v1.11
    • problème de taille de buffer pour l'écriture des nombres négatifs (Number::write)
  • ajout de la fonction (CHAOS) permettant de lire les elements indépendement de l'ordre de leur déclaration
  • amélioration de (POS) permettant de pointer sur un parent
  • support du sheebang Linux dans les fichiers de grammaire
  • option --progress pour suivre le pourcentage de progression
  • ajout des paramètres o_term_cols et o_term_rows pour la gestion de la console (utilisé par -m et --progress)
  • affichage d'un paramètre avec (PARAM* option)
  • ajout de (CATCH <rule>) permettant d'intercepter et produre les exceptions en sortie sans arrêter le parsing
  • amélioration du design de la production "direct"
    • suppression de la règle directe
    • ajout de definition de type direct (<categorie> = <rules>)
  • gestion des options avec la génération de commandes controller
    • meilleur lisibilité du code (main.cc)
    • simplification du fonctionnement (variables intern_ctrl et intern_ctrl_scope)



2) XBNF Neurotranslator - v1.11 - Quoi de neuf ?


  • fonction (XBNF* <grammaire>) appel d'une autre grammaire (produite), voir test.call_XBNF.xbnf
  • o_strict plus permissif
  • ajout expérimental d'operations (operation.h/cc) afin de gérer des compteurs
    • voir operation.xbnf
  • harmonisation des nombres
    • grammaire XBNF : <number> dans <terminal> au lieu de <element>
    • la type terminal avec un identifiant géré comme une variable



3) XBNF images sur DockerHub



Intégration de deux images docker:

Pour générer ces deux images, chaque projet contient la cible dans leur Makefile:
make docker-build


Les images poussées sur DockerHub correspondent aux versions en cours:
  • latest : dernière version en cours de developpement
  • v1.12 : version en cours à date
  • v1.11 : version v1.11 stabilisée
  • v1.10 : version précédente


Hors docker, cet article explique comment construire une toolchain GNU C++ à partir
d'un système fonctionnel.

4) Améliorations majeurs



4.1) sheebang


Le sheebang permet de lancer la commande xbnf spécifié dans un fichier grammaire.

Une grammaire grep.xbnf peut spécifier la commande et les options:

#!/usr/bin/xbnf sheebang $3 -i $2 -o - --arg $1 $0

<grep>: 
...

pattern: (ARG* 0)



Le lancement se fera de cette manière dans un shell:
# grep.xbnf "pattern to search" file-to-inspect



La correspondance des options :
  • $0 est le fichier xbnf lui-même
  • $1 est le paramètre utilisé avec (ARG* 0)
  • $2 est l'argument du fichier file-to-inspect
  • $3 est optionel, ce sera les options xbnf (-v, -d, ...)



4.2) operations


La notion de variable a été introduite:
- syntax : @variable
- fonction LET pour l'initialisation ou la re-initialisation
- fonction OP pour appliquer un opérateur sur la variable
- @var en lecture (input) la valeur de var est valide si égale au flux courant
- @var en ecriture (output) produit la valeur de @var en sortie

--------

/!\\ Les variables de type nombres sont lu au format 32bits internes.

Pour le moment, seules quelques opérations sont utilisées.

#  hex var.txt
640000006300000062000000




init: (LET @nb 0x64)
	t1
	t2
	t3
	t4
	t5-1

t1 :
	@nb
	(OP "--" @nb)
	#
	"t1: 100 lu.\n"

t2 :   @nb
	(OP "--" @nb)
	#
	"t2: 99 lu.\n"

t3 :   @nb
	#
	"t3: nb=" @nb " => "
	(OP "++" @nb)
	(OP "++" @nb)
	(OP "++" @nb)
	@nb "\n"

t4 : ()
	#
	"t4: nb=" @nb "\n"

t5-1 :	t5-2
	#
	"t5-1: str=" @str "\n"
	t5-2
	"t5-2: str=" @str "\n"


t5-2:   (LET @str "IN")
	#
	(LET @str "OUT")




Cela nous donne:

#  xbnf -i var.txt -o - op.xbnf
t1: 100 lu.
t2: 99 lu.
t3: nb=100 => 103
t4: nb=103
t5-1: str=IN
t5-2: str=OUT


Maintenant si vous utilisez une definition directe en remplacent t5-2: par t5-2=, que ce passe t'il ?

Reponse tout de suite...

4.3) définition direct


La traduction directe permet de produire sur le ou les flux en sortie sans attendre la fin de la lecture (input).

Cela s'écrit simplement en mettant = au lieu de : dans la définition
(EX: <categorie>= ... # ...)

En fonction de l'ordre des flux passés en paramètre, la traduction sera de même directement
produite lorsque la définition sera validée.

Amélioration de la traduction directe:
  • notion de traduction directe est plus logique
  • la syntaxe des règles directes, => était ambigue par rapport à l'ordre d'appel des flux
  • amélioration de la gestion des flux : liste globale au lieu du passage par en paramètre précédement (input/output)
  • suppression de code un peu complexe et superflue ( call_newDirect::output )


A noter que la traduction directe est surtout utile en mode flux (option -f),
ce mode ne rend pas la main sauf si la grammaire échoue ou que la commande (STOP) est appelée.

Le mode flux est utile pour un daemon, un prompt, lecture de logs ou temp-réel.


4.4) fonction CHAOS


Vous souhaitez lire des éléments en entré dans un ordre quelquonque:


# echo BAC > chaos.txt
# xbnf -i chaos.txt -o - chaos.xbnf
b-a-c-


Une grammaire utilisant CHAOS:

axiome : no-order "\n"

no-order : (CHAOS A B C)

A: "A" # "a-"
B: "B" # "b-"
C: "C" # "c-"



/!\\ chaque élement doit être consommé au moins une fois et seulement une fois.

Mais vous pouvez écrire ceci :

no-order : (CHAOS A A B B C C C)


# echo CCABACB > chaos.txt
# xbnf -i chaos.txt -o - chaos.xbnf
c-c-a-b-a-c-b-


S'il manque une occurence de chaque element, CHAOS échoue.


4.5) fonction POS


Il est maintenant possible d'écrire par EX: [../../5]



cat1 : ... cat2 # cat2

cat2 : cat3

cat3: () # "value=" [../../0]




# echo AB> pos.txt
# xbnf -i pos.txt -o - pos.xbnf
value=AB



Joyeuses translations ...



1) Ressources XBNF Neurotranslator



Documentation (FR)

1.1) XBNF Sources Sourceforge


Binaires et sources
Librarie XBNF

1.2) Images dockerHub


Executable et librairies
Sources et Toolchain C++ GNU (Linux 64 bits)

1.3) DamoLab


DamoLab@Sourceforge
DamoLab@DockerHub


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