L'analyse du langage C est notoirement difficile, et pour faire ce que vous voulez, vous aurez probablement besoin d'une résolution de nom et de type. Il est nécessaire d'avoir ce qui équivaut à un compilateur frontal complet pour faire cela correctement ; de manière réaliste, vous avez même besoin du préprocesseur car le code que vous lirez contiendra des directives de préprocesseur. Ces dispositifs représentent une énorme quantité de travail ; vous avez raison de dire qu'il n'est pas souhaitable d'en écrire un soi-même, à moins de disposer de beaucoup de temps.
Vos choix réalistes sont des paquets open source tels que GCC (difficile à tordre pour votre tâche), GCCXML (veut produire des déclarations à partir de programmes bien formés) ou Clang (de manière similaire) ; Eclipse CDT a un analyseur C (de manière similaire). Je ne peux pas dire si ces logiciels ont des API ou des licences qui vous satisfont. EDG fournit des interfaces C et C++ (mais ne veut traiter que des programmes bien formés), de même que mon entreprise (Semantic Designs) via notre DMS Software Reengineering Toolkit.
De cet ensemble, seul le DMS est susceptible de faciliter l'analyse des déclarations de type de manière isolée ; il peut analyser n'importe quel non-terminal de ses grammaires (même le y compris celles qui sont ambiguës ). Plus important encore, si vous voulez vraiment "aller vers un méta-modèle", vous voudrez probablement analyser une déclaration et déterminer les sous-types/types référencés (par exemple, si elle utilise un typedef). Vous voudrez donc combiner l'analyse complète avec la résolution des noms/types pour fournir des définitions d'arrière-plan, suivies de l'analyse des déclarations spécifiques qui vous intéressent, suivie de la résolution des noms et des types des déclarations spécifiques en utilisant le contexte de la table des symboles fourni par les définitions d'arrière-plan. La machinerie du SGD offre toutes ces possibilités.