Onze DMS Software Reengineering Toolkit met zijn C ++ 14 front-end kan hiervoor worden gebruikt.
DMS is een programma voor algemene doeleinden analyse- en transformatietool op basis van compilertechnologie. Het parseert de broncode op basis van de front-end die het gebruikt, om datastructuren zoals AST's te compileren die zijn voorzien van bronlocatie-informatie, symbooltabellen en controlestroomgrafieken. Het biedt een verscheidenheid aan bibliotheken en DSL's voor het specificeren van acties over die compilergegevensstructuren, inclusief lopende AST's, patroonvergelijking over AST's met behulp van oppervlakte-syntaxispatronen, het wijzigen van de AST's en tenslotte het mooi afdrukken van elke gewijzigde code naar een compileerbaar bronformulier met opmerkingen.
Om de taak van OP af te handelen, zou men DMS configureren om "slechts" de broncode te parseren (u kunt naamresolutie en stroomanalyse voor deze taak overslaan) om AST's te bouwen voor de bestanden van belang. Met behulp van de regelnummers zou men de AST kunnen doorlopen op zoek naar knooppunten die overeenkomen met de regelnummers, de functiesubboom kiezen die overeenkomt met het knooppunt, en alleen die substructuren mooi afdrukken om de volledige functiedefinitie te zien, of alleen de functiehandtekening mooi afdrukken. Voila.
Een alternatieve benadering zou de bestanden ontleden en vervolgens de naam omzetten. Het doorlopen van de symbooltabel is eenvoudig en geeft toegang tot de functiehandtekening en locatie dankzij verwijzingen naar de AST van de functie.
In beide gevallen zou men, in plaats van alleen functienamen / handtekeningen / lichamen af te drukken, kunnen gebruiken DMS om de statische analyses van uw keuze te implementeren.
DMS wordt al meer dan een decennium gebruikt voor het analyseren en transformeren van grote C ++ - codebases.
Ik ben de auteur, dus niet doen beschouw dit als een aanbeveling. Ik documenteer het bestaan ervan als een oplossing.