CodeWorker est un outil d'automatisation du développement, sous GNU LGPL. Cet outil se propose d'être un générateur de code universel, capable non seulement de générer du code, mais de générer celui-ci en l'injectant dans du code existant.
Cordeworker se matérialise comme un interpréteur d'un langage de script intégrant la possibilité de définir une grammaire BNF du langage à parser ou du source cible dans lequel on veut injecter du code. La génération se décrit à l'aide de modèles de génération (template-based scripts), décrivant le remplissage d'un graphe de parsing pendant l'analyse. Ce graphe pourra ensuite être manipulé.
Sa force réside dans sa souplesse totale : on peut lui faire lire un source en C++ ainsi que des information en XML, pour injecter du code dans du Java. Partant de là, et de grammaire BNF decrivant XML, Java, etc... on peut imaginer toutes sortes d'outils. Notons le mode JEdit prenant en charge la coloration syntaxique pour CodeWorker.
CodeWorker est donc un outil puissant, stable, qui a sûrement besoin de contributions comme des scripts pour analyser toutes sortes de langages et ainsi permettre de nombreuses manipulations !
Cordeworker se matérialise comme un interpréteur d'un langage de script intégrant la possibilité de définir une grammaire BNF du langage à parser ou du source cible dans lequel on veut injecter du code. La génération se décrit à l'aide de modèles de génération (template-based scripts), décrivant le remplissage d'un graphe de parsing pendant l'analyse. Ce graphe pourra ensuite être manipulé.
Sa force réside dans sa souplesse totale : on peut lui faire lire un source en C++ ainsi que des information en XML, pour injecter du code dans du Java. Partant de là, et de grammaire BNF decrivant XML, Java, etc... on peut imaginer toutes sortes d'outils. Notons le mode JEdit prenant en charge la coloration syntaxique pour CodeWorker.
CodeWorker est donc un outil puissant, stable, qui a sûrement besoin de contributions comme des scripts pour analyser toutes sortes de langages et ainsi permettre de nombreuses manipulations !
CodeWorker (1183 hits)
Tutoriel complet (1275 hits)
Repository of scripts (219 hits)
Fiche sur Framasoft (433 hits)
> Lire la dépêche (56 commentaires, moyenne: 2,4).
Vous avez demandé le commentaire #885562.




Parser du C++
Parser du C++ n'est pas trivial. En particulier, la syntaxe n'est pas LALR et l'analyse sémantique doit se faire en même temps.
Je doute qu'un tel outil en soit capable, étant donné que même le fameux Doxygen n'a qu'un parser C++ approximatif.
[^]Re: Parser du C++
g++ le fait, pourquoi codeworker ne le ferait pas ? au pire il faut regarder comment les createurs de g++ ont fait, libre powa ! \o/ Tout ca pour dire qu'avec le temps et la motivation, c'est faisable, et que donc je ne vois pas pourquoi ils n'en seraient pas capables...
et doxygen a t'il reellement besoin d'un parser exact ?
[^]Re: Parser du C++
Effectivement, d'après http://en.wikipedia.org/wiki/C%2B%2B :
It is relatively difficult to write a good C++ parser with classic parsing algorithms such as LALR(1).[5] This is partly because the C++ grammar is not LALR. Because of this, there are very few tools for analyzing or performing non-trivial transformations (e.g., refactoring) of existing code. One way to handle this difficulty is to choose a different syntax, such as Significantly Prettier and Easier C++ Syntax, which is LALR(1) parsable. More powerful parsers, such as GLR parsers, can be substantially simpler (though slower).
Mais je crois que la parseur est assez flexible, savoir s'il l'est assez je ne sais pas.
Mais il faut noter que ce parseur prend directement une grammaire écrite en BNF, et non une suite de règles à la lex/yacc.
[^]Re: Parser du C++
En fait dans le cadre du refactoring, la plus grosse difficulté n'est pas tant le fait que la grammaire ne soit pas LALR, mais le préprocesseur.
La seule chose pour laquelle on peut avoir une grammaire fiable, c'est après le passage du préprocesseur. Avant, c'est virtuellement n'importe quoi.
C'est pour cela par exemple que les outils de traitement de source pagayent souvent avec du C++.
[^]Re: Parser du C++
Et encore, c'est pas si simple.
Prenons l'expression suivante :
A<b> c;
Si A identifie un template, alors c'est une instanciation de template.
Sinon, c'est une comparaison.