Description
Text medley est un langage de type DSL (Domain Specific Language), dédié à la génération de textes aléatoires. C'est probablement l'un de mes projets les plus ésotériques et, pour autant, l'un des plus intéressants !
Fonctionnement et syntaxe
Text medley fonctionne grâce à une grammaire, qui définit un ensemble de règles. Chacune de ces règles a le potentiel de renvoyer un texte aléatoire parmi plusieurs prédéfinis, et on peut ensuite combiner plusieurs règles pour obtenir des textes de plus en plus aléatoires.
Prenons cet exemple :
#main:
-vars:
$name = #name
-output:
hello $name!
goodbye $name!
this time it is $name and only $name
#end
#name:
-output:
John
Paul
world
#end
Il y a deux règles, #main et #name. La règle #name est construite pour renvoyer John, Paul ou world à chaque fois qu'on l'utilise. La règle #main s'en sert d'ailleurs pour afficher un texte parmi trois sorties possibles, utilisant donc un mot parmi les trois possibles de #name. Il y a donc 9 combinaisons possibles. Ainsi, elle pourra produire hello John!, hello world!, ou goodbye Paul! !
Utilisation
Interprété
La première utilisation possible du langage est par l'interprétation. On confie la grammaire à un programme, en lui spécifiant le point d'entrée pour que celui-ci l'utilise et génère ainsi un texte. Comme le langage est écrit en Haxe, il existe des interpréteurs dans tous les langages que Haxe peut cibler : C++, Java, Python, Lua, JavaScript, PHP... C'est donc une solution simple et plutôt efficace !
Compilé
En plus de cela, le langage fournit une macro qui peut compiler Text Medley en code Haxe lors d'une compilation. On obtient alors une classe avec des fonctions statiques pour chaque règle. Les mêmes langages cibles sont utilisables que pour l'interpréteur et on bénéficie ainsi des optimisations possibles de Haxe, ce qui est plutôt cool, mais cela implique de posséder le compilateur Haxe.
Transpilé
La dernière façon d'utiliser le langage est de le transpiler dans un autre langage. Pour cela, des compilateurs ont été conçus pour intégrer le langage dans des codebases TypeScript, OCaml et Ruby (entre autres). C'est une méthode plus simple, car on n'a besoin que d'un compilateur sous forme de binaire et on peut ainsi utiliser Text Medley dans un éventail de langages bien plus large, à partir du moment où ce dernier supporte la manipulation de textes, les fonctions et la gestion de l'aléatoire. Autant dire que tous les langages modernes sont concernés !