3 votes

Quelles sont les ressources pour construire un analyseur statique pour le C en C ?

J'ai un projet scolaire qui consiste à développer un analyseur statique en C pour C.

Où dois-je commencer ? Quelles sont les ressources qui pourraient m'aider ?

Je suppose que j'aurai besoin d'analyser le C, alors quels sont les bons analyseurs pour le C ou les outils pour construire des analyseurs C ?

2voto

spgennard Points 1354

Je vous emmènerais d'abord sur antlr regardez son guide de démarrage J'utilise personnellement antlr car il donne le choix entre les options suivantes les cibles de génération de code .

Pour utiliser antlr, vous avez besoin d'un fichier de grammaire c ou c++ Alors, prenez-en un et commencez à jouer.

Quoi qu'il en soit, amusez-vous avec

1voto

Jerry Coffin Points 237758

Votre meilleur point de départ serait probablement Clang (à condition qu'il dispose déjà d'un analyseur statique, donc à moins que vous ne souhaitiez en écrire un pour son propre bien, vous feriez mieux d'utiliser/améliorer celui qui existe déjà).

1voto

2.718 Points 346

Etes-vous sûr de vouloir écrire l'analyseur en C ?

Si vous utilisez un langage moderne (par exemple C#, Java, Python), je soutiendrais la suggestion de spgennard d'utiliser ANTLR pour l'analyseur syntaxique.

Si l'écriture de l'analyseur en C est une exigence, alors vous êtes coincé avec lex et yacc (flex et bison) ou peut-être un analyseur artisanal.

On dirait que Uno se rapproche de ce que vous voulez faire. Il utilise lex/yacc et inclut les fichiers de grammaire. La partie analyse est cependant écrite en C++.

Vous trouverez peut-être d'autres idées sur le comment et le quoi dans les outils répertoriés à l'adresse suivante SpinRoot . Wikipedia contient également de bonnes informations.

1voto

SK-logic Points 6952

L'analyse syntaxique est la partie la plus simple et la moins importante d'un analyseur statique. Antlr a déjà été suggéré, il devrait être suffisant pour analyser le C (mais pas le C++). Juste un petit conseil - n'implémentez pas votre propre préprocesseur, mieux vaut réutiliser la sortie de gcc -E .

Pour le reste, vous pouvez jeter un coup d'œil à certaines sources d'analyseurs existants, à savoir Clang et CIL lire sur un SSA représentation et interprétation abstraite . Le choix de la bonne représentation intermédiaire pour votre code est un élément clé.

Je doute que ce soit une tâche facile en C, et vous finirez probablement par implémenter une sorte de DSL pour gérer les AST et les transformations. Cela ressemble à quelque chose de beaucoup plus grand qu'un projet scolaire typique.

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