[<<markdown[Le langage de programmation Talenha a pour but de personnaliser des programmes informatiques.
Sous la forme d'une application web avec une arborescence de fichiers et un éditeur graphique, c'est un langage virtuel, automatiquement colorisé durant la saisie, il vérifie la syntaxe et la grammaire immédiatement
et il offre une documentation automatique et instantanée des fonctions. Il dispose de fonctionnalités originales, s'exécute sur le navigateur,
trace toutes les opérations dans une fenêtre et affiche la durée totale des traitements. Il propose en standard la création de nouveaux langages ou de DSL (**Domain Specific Language**) via un système de tokenisation,
de règles grammaticales et un modèle de traitement simultané pour les calculs. Ce projet a démarré en 2019 mais il correspond, en fait, à l'aboutissement de plusieurs années de recherches.
La personnalisation de programmes informatiques est une branche de l'industrialisation des logiciels. Une personnalisation peut être très complexe; générer un logiciel à partir
d'un algorithme informatique est sans doute la tâche la plus complexe qui soit.
Dans cet objectif, pourtant, *le langage virtuel* Talenha propose diverses méthodes de génération telles que la compilation directe, la programmation par aspect, la construction de méthodes de modélisation
et la conservation des caractères d'échappement dans les textes (des fonctions telles que **escape** et **unescape** sont disponibles).
En complément, Talenha inclut un nouveau paradigme : *la programmation orientée modèle*. La création de squelettes, de **snippets** complexes et des interfaces utilisateurs simplifient
la saisie des programmes informatiques. En parallèle, de précieuses informations quant à la syntaxe correcte d'un langage ou l'utilisation d'une librairie peuvent être conservées sous forme de modèles préfabriqués.
De même, la création d'analyseurs syntaxiques et grammaticaux permet d'extraire des bouts de codes afin de les conserver et de les réutiliser plus tard.
Les futurs utilisateurs de ce langage sont des programmeurs mais peuvent être aussi bien des concepteurs et des architectes qui conçoivent des logiciels en assemblant des briques une à une et en les adaptant.
Idéalement, de la méthode et de l'organisation sont les meilleurs atouts pour réussir à générer automatiquement un programme informatique ou des pages web. D'ailleurs, ce site a été généré avec talenha.
# Qu'est-ce que la personnalisation ?
La personnalisation suppose un modèle de départ comportant des éléments interactifs qui donnera un document final adapté à la destination. C'est par exemple la réalisation de **mailings** qui peuvent être très complexes et personnalisés pour chaque destinataire. Ce n'est pourtant pas un langage de macros ni de scripts, je l'appelle plutôt un langage virtuel.
# Qu'est-ce qu'un langage virtuel ?
Un *langage virtuel* utilise un programme écrit dans un langage de haut niveau, en l'occurrence le JavaScript. Talenha a été entièrement écrit en JavaScript pour la tokenisation, pour l'analyse syntaxique, la colorisation syntaxique ainsi que pour les calculs. Exceptionnellement, un langage décrit dans Talenha sera compilé en JavaScript par un programme écrit en PHP. Les calculs sont finalement réalisés par une machine virtuelle dont l'entrée est un arbre syntaxique abstrait ce qui lui confère le nom de langage virtuel.
# Qu'est-ce que la compilation directe ?
Il s'agit de pouvoir effectuer les traitements sur un ou plusieurs fichiers ou à partir d'un texte. La fonction ci-dessous traite tous les fichiers dans l'ordre.
<{ compile f1 f2 ... }>
La fonction ci-dessous traite une suite de textes.
<{ compile(s1, s2, ...) }>
Ce sont les parenthèses qui permettent à l'analyse grammaticale de distinguer le traitement à effectuer.
# La programmation par aspect
La machine virtuelle génère des fichiers textes. Les fonctions suivantes écrivent dans un fichier; la fonction **aspect** insère les textes au moment d'un élément de substitution (**placeholder**).
1. <{ write("chemin/fichier", liste) }>
2. <{ aspect("chemin/fichier", #nom, option, liste) }>
Par exemple :
<{#(codeOpen)
write("output.html", [
"<html lang=\"fr\">...<body>", #body,
"</body></html>"
]),
aspect("output.html", #body,
after, [ "Bonjour !" ])
#(codeClose)}>
Tous les fichiers sont stockés sur le serveur web dans une base de données MySQL. Exceptionnellement, l'arbre syntaxique abstrait des fichiers pour la machine virtuelle est stocké sur le navigateur (via **IndexedDB**) afin de réduire le temps de la compilation.
> Le langage de programmation Talenha fonctionne sur Chrome et similaire. Mais, depuis qu'il y a un **import dynamique** dans les **web workers**, il ne fonctionne pas sur Firefox et ses dérivés.
# Les méthodes de modélisation
On peut découper un programme informatique en trois sous-ensembles :
-Le squelette
-Les fonctionnalités technologiques
-Les algorithmes
La modélisation de ces trois éléments consistent à créer des langages capables de composer le squelette en tenant compte de toutes les possibilités syntaxiques, puis de créer des fonctions d'écritures libres pour les fonctionnalités technologiques et enfin de créer un langage générique pour les algorithmes.
La programmation par aspect et la compilation directe permettent de modulariser et ensuite de compiler l'ensemble avec des éléments personnalisés communs.
# Les fonctions **escape** et **unescape**
Ce sont deux fonctions du langage talenha. La fonction **escape** remplace les caractères:
-retours chariots par \n,
-un guillemet par \",
-le caractère \ par \\.
Tandis que la fonction **unescape** fait l'inverse.
## Par rapport aux autres langages
En C, lorsque vous écrivez :
<{ printf("Une chaîne:\"Bonjour !\"") }> alors le résultat après compilation est <{ Une chaîne:"Bonjour !" }>.
Dans le langage talenha, écrire <{#(codeOpen) print("Une chaîne:\"Bonjour !\"") #(codeClose)}> affiche dans la console <{ Une chaîne:\"Bonjour !\" }>.
## Les textes
Le langage de programmation talenha génère des programmes informatiques. Aussi, pour générer un code en C, écrire tout simplement en C : <{ printf("Une chaine:\"Bonjour !\""); }>.
Pour écrire dans le langage talenha, encadrez votre code entre les deux chevrons <{[<<[ ]>>]}>.
Tous les textes entre guillemets peuvent contenir des retours à la ligne.
<{#(codeOpen) print("Une ligne
Une seconde ligne") #(codeClose) }> donne <{Une ligne
Une seconde ligne}>.
Avec la fonction **escape** :
<{#(codeOpen) print(escape("Une ligne
Une seconde ligne")) #(codeClose)}> donne <{Une ligne\nUne seconde ligne}>.
Tandis que <{#(codeOpen) print("Une ligne\nUne seconde ligne") #(codeClose)}> donne <{Une ligne\nUne seconde ligne}>.
Avec la fonction **unescape** :
<{#(codeOpen)
print(unescape("Une ligne\nUne seconde ligne"))
#(codeClose)}> donne <{Une ligne
Une seconde ligne}>.
Il est possible d'obtenir le texte entre guillemets.
<{#(codeOpen) x = "Bonjour !", print(x.value) #(codeClose)}> donne <{"Bonjour !"}>.
Aussi, les fonctions <{ escape(s, ...) }> et <{ unescape(s, ...) }> sont utiles pour les textes.
> Pour une version future, les textes peuvent être aussi entre apostrophes ou entre arobase (@).
## Version DOS et Unix
Le traitement du caractère <{ \r }> est inclus dans ces fonctions.
# La création de langages
Pour créer un nouveau langage, la commande est la suivante:
<{#(codeOpen)
create transpiler nom {
// ...
}
#(codeClose)}>
Vous créez le langage par tokenisation puis vous définissez des règles grammaticales. Pour chaque règle, vous décrivez une implémentation qui sera réalisée si la règle est valide au moment de la compilation.
Le langage talenha comme de nombreux autres langages ont deux étapes (deux passes) :
1. L'analyse syntaxique et grammaticale avec la colorisation syntaxique automatique,
2. La compilation et la réalisation des opérations du programme.
Si des erreurs syntaxiques ou grammaticales se produisent, il y a deux cas :
1. La colorisation n'est plus effectuée après l'erreur,
2. Un fond en rouge est affiché à proximité de l'erreur.
Il y a deux erreurs de compilation courantes :
1. Une variable inconnue,
2. Un dépassement de la pile des appels.
Selon l'implémentation, un langage peut avoir plusieurs objectifs comme par exemple, la coloration syntaxique du langage C ou du langage HTML, l'indentation automatique ou encore l'extrait de code et bien d'autres applications.
Pour faire appel à un langage créé, encadrez le code entre les deux chevrons <{[<<nom[ ]>>]}> avec le nom du langage.
# Conclusion
Le langage de programmation Talenha permet de créer des programmes informatiques ou des sites web. Une fois le premier projet terminé, chaque élément peut être réutilisé pour d'autres.
Modifier les fichiers générés n'est pas recommandé; toutefois, un langage pourrait détecter les différences et mettre à jour ces fichiers pour plusieurs itérations dans le processus de développement d'un logiciel.
]>>]