A Système de transformation des programmes est un outil qui analyse le texte source, construit des AST, vous permet de les modifier en utilisant des transformations de source à source ("si vous voyez ce motif, remplacez-le par ce motif"). De tels outils sont idéaux pour effectuer des mutations de codes sources existants, qui sont simplement "si vous voyez ce motif, remplacez-le par une variante de motif".
Bien entendu, vous avez besoin d'un moteur de transformation de programmes capable d'analyser le langage qui vous intéresse, tout en effectuant les transformations dirigées par les motifs. Notre site Boîte à outils de réingénierie du logiciel DMS est un système qui peut faire cela, et qui gère Python, et une variété d'autres langages.
Voir ceci Réponse SO pour un exemple d'une AST analysée par DMS pour Python capturant des commentaires. avec précision. DMS peut apporter des modifications à l'AST, et régénérer un texte valide, y compris les commentaires. Vous pouvez lui demander d'imprimer l'AST en utilisant ses propres conventions de formatage (vous pouvez les modifier), ou de faire une "impression de fidélité", qui utilise les informations de ligne et de colonne d'origine pour préserver au maximum la mise en page d'origine (certains changements de mise en page sont inévitables lorsqu'un nouveau code est inséré).
Pour mettre en œuvre une règle de "mutation" pour Python avec DMS, vous pourriez écrire ce qui suit :
rule mutate_addition(s:sum, p:product):sum->sum =
" \s + \p " -> " \s - \p"
if mutate_this_place(s);
Cette règle remplace "+" par "-" d'une manière syntaxiquement correcte ; elle opère sur l'AST et ne touchera donc pas aux chaînes ou aux commentaires qui se trouvent être corrects. La condition supplémentaire sur "mutate_this_place" vous permet de contrôler la fréquence à laquelle cela se produit ; vous ne voulez pas muter les éléments suivants chaque place dans le programme.
Il est évident que vous voudriez un tas d'autres règles comme celle-ci qui détectent les différentes structures de code et les remplacent par les versions mutées. DMS est heureux d'appliquer un ensemble de règles. L'AST muté est alors prettyprinted.
5 votes
Déclassé depuis la version 2.6 : le paquetage du compilateur a été supprimé dans Python 3.0.
1 votes
Pourquoi ne pouvez-vous pas modifier la source ? Pourquoi ne pouvez-vous pas écrire un décorateur ?
3 votes
La vache ! Je voulais faire un testeur de mutation pour python en utilisant la même technique (spécifiquement en créant un plugin de nez), prévois-tu de le mettre en open sourcing ?
2 votes
@Ryan Oui, je mettrai en source ouverte tout ce que je crée. Nous devrions rester en contact à ce sujet
1 votes
Bien sûr, je vous ai envoyé un courriel via Launchpad.
1 votes
Faites-vous tourner des algorithmes génétiques sur vos mutations ? :P
1 votes
macropy fournit un sucre syntaxique pour manipuler les ast au moment de l'importation.