3 votes

Bibliothèque pour l'analyse des déclarations de type C ?

J'essaie de trouver une bibliothèque open source (soit écrite en C o C++ ) pour m'aider à analyser les données arbitraires C/C++ les déclarations de type (par exemple les déclarations du type void *(*(*foo[])( int, void * [] ))[123] ) que je vais ensuite méta-modéliser.

Quelqu'un peut-il recommander un logiciel libre C/C++ Bibliothèque d'analyse de la déclaration de type ?

Note : Je ne peux pas utiliser de code sous licence GPL (comme le code cdecl ) car il s'agit d'une application à code source fermé et j'espère une solution plus robuste que celle que je peux écrire moi-même.

1voto

Ira Baxter Points 48153

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.

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