Parser un code

steve25cent Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 23 juillet 2013 - 27 avril 2012 à 14:22
steve25cent Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 23 juillet 2013 - 27 avril 2012 à 19:10
bonjour,

il me semble je dois parser mon code source pour pouvoir récupérer les fonctions, structures .

j'aimerai savoir comment "parser" un projet écrit en c en utilisant java ?

j'ai installé "cdt" sous éclipse, je trouve pas d'exemples. bref comment fait mon parseur .

merci!

7 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 avril 2012 à 14:44
Salut,

Jamais entendu parler de ctd : où es tu allé chercher ça ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
27 avril 2012 à 14:46
Ok, je pensais à une libraire java mais non, tu parles du plug in d'éclipse pour faire du c++

Ben, si c'est ca, ca ne te servira à rien...
0
steve25cent Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 23 juillet 2013
27 avril 2012 à 15:30
ok! comment dois-je faire pour créer mon parser c en java ?

car je me suis dis cdt allait me servir !
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
27 avril 2012 à 16:00
Salut,

JavaCC peut te rendre un gros service, c'est un générateur de compilateur. Tu écris ta grammaire (.jj), tu la compiles avec l'outil fourni et tu n'as plus qu'à lui filer tes .c en entrée.

Dans ton cas, c'est encore plus facile puisqu'une grammaire C est disponible :
http://java.net/downloads/javacc/contrib/grammars/C.jj (dépêche-toi de la dl parce que le site seras en maintenance ce weekend)

J'ai déjà utilisé JavaCC plusieurs fois donc si tu décides de l'utiliser, tu pourras toujours poser des questions.
0

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

Posez votre question
steve25cent Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 23 juillet 2013
27 avril 2012 à 16:42
ça semble être utile pour la 1ère partie de mon projet

et on lui fourni pas les .h ? car à chaque .c correspond un .h dans un projet je pense bien.
est ce possible de lui fournir tout mon répertoire(mon projet) et il me le parse en m’envoie tout ce dont j'ai besoin

la 2ème partie c'est de récupérer ces informations données par mon parseur et les mettre dans un fichier .uml préalablement crée en java.
car là j'ai pu déjà crée un model uml en utilisant l'api uml2 et java. dans mon modèle j'ai crée des package correspondant à des répertoires et sous répertoires de mon projet. ensuite j'ai crée des classes correspondant aux fichiers .c dans chaque répertoire.

bon là, je veux maintenant grace Javacc que tu me conseil parser et, correspondre les fonctions aux opérations de mes classes, les variable dans les attributs et les "typedef struct", créer des "datatype"

en gros je veux modéliser mon code c qui un programme de commande d'un robot

as-tu une idée pour cette deuxième phase ?
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
27 avril 2012 à 17:55
J'ai pense avoir compris ton projet et JavaCC peut t'aider dans les 2 parties.

Par contre, c'est à toi de compléter le .jj pour rajouter des bouts de code, ici et là afin d'alimenter ton modèle UML.

Une fois que ta grammaire sera terminée, et que tu l'auras compilée, tu pourras lui filer les .c et les .h (1 par 1 par contre, ce sera à toi de parcourir l'arborescence du projet C).

Il faut que tu regardes des exemples sur le net pour voir comment rajouter des instructions au sein de la grammaire, JavaCC est plutôt bien documenté.

J'ai utilisé JavaCC dans un projet, voici un exemple SANS INSTRUCTION (seulement le parsing pour vérifier la syntaxe) :
public void constante():
{

}
{
<NOMBRE> | <CONSTANTE_E> | <CONSTANTE_PI>
}


et voilà la version instrumentée avec des instructions (les instructions sont simplement du code Java, tu peux y faire appel à des classes que tu as écrites par ailleurs) :

/**
 * lit une constante
 *
 * @return la fonction constante associee
 */
public Fonction constante():
{
Token tokenValeur;
double valeur;
}
{
(
tokenValeur = <NOMBRE>
{ valeur = Double.parseDouble(tokenValeur.image); }

|	<CONSTANTE_E>
{ valeur = Math.E; }

|	<CONSTANTE_PI>
{ valeur = Math.PI; }
)

{ return FabriqueFonction.getInstance().creerConstante(valeur); }	 
}
0
steve25cent Messages postés 20 Date d'inscription lundi 3 août 2009 Statut Membre Dernière intervention 23 juillet 2013
27 avril 2012 à 19:10
merci je comprends bien!

mais que de ce cassé la tête en rajoutant des instructions au sein d la grammaire, je pense

l'API CDT(c/c++) d'eclipse possède déjà toute cette grammaire. donc vaudrait mieux l'utiliser. car mon IDE c'est eclipse

as-tu des exemples d'utilisation de cet API pour parser, car j'en trouve presque pas sur le net ?

sinon j'utiliserai ton outil.
0
Rejoignez-nous