Lex & Yacc Aidez moi please..

tchou93270 Messages postés 16 Statut Membre -  
Urielxx Messages postés 223 Statut Membre -
Bonjour,

Voila mon problème, en fait je voudrais parser un fichier C++ et ne reconnaitre que les fonctions de ce fichier.

Donc en fait je n'ai pas besoin dans l'analyseur lexical de détaillé tous les tokens. Je ne vois pas trop comment faire mon analyseur lexical. Je voudrais définir un token "ALL" qui pourait prendre tous les caracteres sauf "(" et ")".

Et dans l'analyseur syntaxique, dire que les règles sont des succéssions du token ALL mais aussi il peut y avoir "(" ALL")" , ce qui me permettrait de réaliser des actions qd je rencontrerais une fonction dans le programme.

En fait mon but serait de tracés toutes les fonctions d'un programme grâce à lex et yacc (redirection du nom de la fonction dans un fichier), afin de savoir lors de l'exécution d'un programme principal, par quelle fonction il passe.

Es ce que cela est possible d'après vous avec lex et yacc? Ou es ce qu'il y aurait une manière plus simple d'effectuer cette manipulation, avec la commande sed par exemple? (A part des programmes de couverture tel que gcov).

8 réponses

Urielxx Messages postés 223 Statut Membre 46
 
JEtte un coup d'oeil ici :
https://stackoverflow.com/questions/311840/tool-to-trace-local-function-calls-in-linux

Ils expliquent comment faire ce que tu veux avec gdb.
1
Urielxx Messages postés 223 Statut Membre 46
 
Si tu es sous Linux /UNIX tu peux faire l'inverse : compiler ton code afin de générer un exécutable, et dumper cet exécutable afin d'en extraire les noms des différents symboles utilisés, par exemple via la commande "objdump".

Par contre je ne comprends pas bien ce que tu veux faire ? débugger ? Mesurer les performances ? Il y a déjà des outils pour ça (gdb, par ex.)...
0
tchou93270 Messages postés 16 Statut Membre
 
En fait je dois faire de la couverture de test, c'est un stage que j'ai de 6 mois, mais comme gcov est assez lent, je dois chercher une autre solution.
Mon but c'est de savoir à partir d'un testbench, par quelle fonction du programme chaque vecteur de test passe .
0
Urielxx Messages postés 223 Statut Membre 46
 
O_o tu veux faire un truc plus rapide que les mecs qui ont écrit un compilateur ?! Mais c'est audacieux, ça... :) Mais une fois que tu auras ta liste de symbole ou de noms de fonctions, tu ne sera pas plus avancé...

Quelques questions :
- Tu dois vérifier la couverture des fonctions du code, ou alors de la totalité du code ?
- As-tu le droit de modifier le code (insertion de macros, par exemple...) ?

Perso, je pense que réutiliser l'existant (options de gcov, utilisation de gdb à la place) est probablement plus efficace que de coder quelque chose, à moins d'avoir les idées très claires sur le sujet et être certain que le niveau de performance sera au rendez-vous.
0
tchou93270 Messages postés 16 Statut Membre
 
En fait il y a plein de chose qui ne me serve pas dans gcov, ce qui m'interesserait c'est que les fonctions du code (qui sont exécuter lors du main). Je peux modifier le code je pense, mais ca serait bien de ne rien toucher, je pense que ca peux se faire avec un espece de parseur qui se ferait en live, et non pas sur un fichier statique..
En ce qui concerne gdb, je ne vois pas l'option qui permettrait d'obtenir les fonctions de mon executable..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tchou93270 Messages postés 16 Statut Membre
 
Je voudrais utiliser un programme ou instrumentaliser le code pour avoir après l'exécution du main, connaitre le nom des fonctions par lequel il est passé, quelque chose d'automatique, es ce qu'on pourait faire ca avec gdb? Avec une option par exemple, qui nous sort dans un fichier toutes les fonctions par ou il est passé? Je dis bien "les fonctions" et pas toutes les lignes du code.
0
tchou93270 Messages postés 16 Statut Membre
 
j'aurai une autre question aussi, es ce qu'il serait possible de parser un flux avec un parseur? et non pas un simple fichier?
0
Urielxx Messages postés 223 Statut Membre 46
 
Si c'est une autre question, marque celle-ci résolue et crée une nouvelle demande. J'avoue que je n'ai pas trop saisi ta question...
0
tchou93270 Messages postés 16 Statut Membre
 
La question est toujours en rapport avec ce post, je voudrais savoir si on pouvait parser un code qui est en train de se dérouler, et non pas un simple fichier.
0
Urielxx Messages postés 223 Statut Membre 46
 
Je ne pense pas que ce soit possible, d'autant que si c'est du code compilé, il n'est plus du tout au meme format.
0