CodeWorker

Un outil de parsing & un générateur de code


... depuis le 19/01/2003

Version Logiciel+Documentation+site Web : 4.5.3
Mise à jour : 27 avril 2010

Distributé sous GNU Lesser General Public License.

Presentation

CodeWorker est un outil de parsing et un générateur de code, disponible en logiciel libre (distribué sous GNU Lesser General Public License) et destiné à couvrir plusieurs aspects de la programmation générative. La programmation générative est une approche de l'ingénierie logicielle pour produire des systèmes informatique réutilisables, taillés sur mesure, facile à faire évoluer et robustes, le tout avec un haut niveau d'automatisation.

L'outil interprète un langage de script qui pilote les traitements de parsing et de génération de code dans une syntaxe familière aux développeurs, le tout pour construire aisément des DSL (Domain Specific Language). Il insiste sur adapter sa syntaxe aux particularités des tâches à accomplir (acquisition des spécifications, génération de code, conduite du projet) et sur offrir de puissantes fonctionnalités pour faire de la génération de code intensive.

N'hésitez surtout pas à me contacter pour toutes questions, critiques, suggestions, ...

Le parsing

CodeWorker fournit deux méthodes distinctes pour réaliser un parsing:
  • la lecture de tokens est procédurale,
  • la description en notation BNF est déclarative, et suit une sorte de BNF (le Backus-Naur Form décrit une grammaire suivant une syntaxe particulière) étendue avec des expressions régulières, un peu semblable à javacc dans le monde JAVA ou à ANTLR.
Pendant le parsing de fichiers, CodeWorker renseigne une structure de donnée appropriée, appelée un arbre, un arbre de parsing en l'occurrence. Un arbre est une structure bien commode pour représenter un ensemble hierarchisé de noeuds, comme en XML par exemple.

Cet arbre de parsing est partagé à la fois par la tâche d'acquisition des spécifications, qui prend en charge de le renseigner, et par la tâche de génération de code qui va le parcourir pour produire du texte.

La generation de code

Etant donné une spécification donnée dans n'importe quel format, CodeWorker génèrera du code source, du texte ou des données binaires, tel qu'indiqué dans les scripts patron de génération.

La génération de code peut exploiter trois modes : génération classique, expansion de fichier existant ou traduction vers un autre format.

  • Le mode génération laisse le script produire la plus grande part du fichier de sortie, exécutant un patron de génération à la server page comme il existe en JSP ou PHP. Seules quelques portions appelées zônes de code protégées dans le vocabulaire de CodeWorker sont préservées dans le fichier et destinées à contenir du code tapé à la main. Quelques outils de modélisation ont adopté cette philosophie, et qui génèrent un squelette copieusement entrecoupé de zônes destinées au développeur.
  • Le mode expansion est utilisé quand le fichier est en partie écrit à la main et ne doit pas se décliner en plusieurs fichiers générés. Les points où insérer du code sont appelés marqueurs dans le vocabulaire de CodeWorker. Le Class Wizard de Visual C++ change le code source en suivant ce principe.
  • Le mode translation quand à la fois le parsing/scan et la génération de code sont requis pour traiter un fichier. Cela se produit dans les cas suivants:
    • une transcription source-à-source : un fichier doit être réécrit dans un format différent. Par exemple, un fichier LaTeX pourrait devoir être retranscrit en HTML.
    • une transformation de programme : un fichier doit subir des changements pour optimisation, réorganisation, instrumentation ou réécriture de quelques portions. Par exemple, un script pourrait ajouter une trace au début de chaque corps de fonction d'un source JAVA ou C++. Pour réaliser cela, le scan servira à détecter les corps de fonction, et la génération de code insérera le code C++ ou Java qui implémente la trace.
 CodeWorker est maintenu par Cédric Lemaire. SVP, envoyez un mail pour soumettre un bogue ou une amélioration.