3 votes

Traduction de Python en CIL(C Intermediate Language)

J'ai travaillé récemment sur l'analyse statique du code source Python. Il existe déjà un analyseur statique écrit en Ocaml pour le CIL (C Intermediate Language) dans notre groupe. Nous voulons réutiliser cet analyseur, donc notre approche idéale est de traduire Python en CIL.

Actuellement, j'utilise le module ast intégré à Python pour analyser Python vers Python AST. Et ensuite je traduis l'AST Python que ast.dump a imprimé en AST C. En ce qui concerne l'AST C, l'API CIL et l'analyseur statique sont tous écrits en Ocaml. Je choisis Ocamllex&Ocamlyacc pour analyser l'AST Python en AST C. Cependant, il y a quelques gros problèmes.

La représentation AST que ast.dump a imprimée est difficile à identifier. Cela rend mon analyseur pas facile à mettre en oeuvre. D'autre part, je ne peux pas utiliser Ocaml pour accéder à la structure interne de Python ast. Même si je le pouvais, la structure des données est différente de celle d'Ocaml.

Je me demande si je n'ai pas choisi une mauvaise approche pour la traduction du code Python en AST C au début ? Existe-t-il d'autres outils ou approches existants qui pourraient répondre à mes besoins ?

S'il y a quelque chose qui m'échappe, merci de le signaler, cela m'aidera beaucoup. Merci.

3voto

Ira Baxter Points 48153

Je ne pense pas que cela va fonctionner très bien. Le CIL est essentiellement le langage C. Pour que votre astuce fonctionne, vous devez traduire Python complètement à C... mais les langues ont des concepts très différents. Comment allez-vous modéliser les objets Python ? Les continuations ? Chargement dynamique ? Typage à l'exécution ? Arithmétique de précision infinie ? Je pense que vos problèmes ne sont pas l'AST ; ils sont plutôt conceptuels.

Si vous pourrait traduire en CIL, vous auriez maintenant un nouveau problème. Les analyseurs sont plus faciles à construire lorsque les constructions qu'ils doivent trouver sont facilement détectées. Une fois que vous avez traduit votre suite en C, le raisonnement sur les interactions avec les continuations sera difficile, car elles ne seront pas faciles à reconnaître.

Je pense que je dépenserais mon énergie à essayer de construire un analyseur statique Python où les concepts Python seraient faciles à détecter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X