Una forma sencilla de convertir el código fuente de Python a un AST con comentarios intactos

He hecho un poco de búsqueda sobre cómo capturar los AST de Python con los comentarios conservados. La forma sugerida incluye el uso de bibliotecas ast y tokenize para realizar el trabajo.

He tenido bastante éxito en el uso de estas bibliotecas según mis requisitos, pero creo que tiene que haber una mejor manera.

Este pensamiento se deriva del hecho de que lib2to3 convierte el código de python2 en código de python3 con los comentarios conservados. También se afirma que el proceso es Source-Code-in-Python2 -> AST -> Source-Code-in-Python3 (para ser presentado de manera simplificada).

Mi pregunta es ¿cómo capturo el AST intermedio ? He mirado en python-docs pero no hay un indicador de línea de comando para obtener el AST.

Solo para proporcionarle el contexto: estoy tratando de convertir el código fuente de Python a un archivo XML (con comentarios conservados) para un procesamiento adicional

    Solo para proporcionarle el contexto: estoy tratando de convertir el código fuente de Python a un archivo XML (con comentarios conservados) para un procesamiento adicional

    Una forma “fácil” es usar una herramienta que ya lo hace, en lugar de reinventarla, especialmente si no tiene mucho tiempo.

    Nuestro Kit de herramientas de reingeniería de software de DMS puede analizar Python (y muchos otros idiomas), crear AST y capturar comentarios, y escupir el árbol resultante como XML. Vea el ejemplo a continuación.

    Un comentario: XML inicialmente parece agradable, pero es una forma torpe de representar / analizar / transformar código. La razón por la que existen herramientas como DMS es proporcionar toda la maquinaria necesaria para manipular los AST analizados de manera más efectiva que la transformación de XML y escalar mucho mejor (por ejemplo, a millones de líneas de código): en última instancia, para ahorrar ingeniería Tiempo y tiempo de ejecución.

    Incluso si decide sobre XML, ¿dónde obtendrá buenas herramientas para procesarlo? (XSLT no es la respuesta correcta). Finalmente, si pretende modificar el progtwig y cambia el XML, ¿cómo pretende recuperar el código fuente? DMS puede modificar los AST y regenerar el texto del progtwig fuente válido (incluidos los comentarios).

    Entonces, mientras que DMS exportará AST en XML (porque personas como usted parecen insistir en ello), esta función rara vez se usa en la práctica. El caso de uso típico es analizar, analizar, modificar el AST, y luego imprimir el AST modificado, utilizando DMS de forma integrada.

    Para este progtwig de python:

     # A comment in the header import sys TOKENBLANKS=1 class MyClassNameTranslator: # get_name looks up name def get_name(self, name): """Get a translation for a real name""" return self.realnames[name] 

    DMS genera la siguiente versión XML de su AST, completa con comentarios capturados:

     C:\[snip]Python\Tools\Parser>run ..\domainparser ++XML C:\[snip]tiny.py Python~v3_0 Domain Parser Version 2.5.15 Copyright (C) 1996-2013 Semantic Designs, Inc; All Rights Reserved; SD Confidential Powered by DMS (R) Software Reengineering Toolkit 165 tree nodes in tree.              # A comment in the header              sys                      TOKENBLANKS                                                         MyClassNameTranslator      # get_name looks up name        get_name            self          name                                     Get a translation for a real name                                                   self       realnames                         name                                                          C:/DMS/Domains/Python/v2_6/Examples/tiny.py   Python~v3_0