IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres Java Discussion :

[rhino] appels de fonctions


Sujet :

Autres Java

  1. #1
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut [rhino] appels de fonctions
    Bonjour,

    J'utilise l'API Rhino qui est un compilateur de javascript en JAVA.

    J'ai des fichiers javascript que je veux compiler et trouver les appels de fonctions dans le code. Est-ce que quelqu'un connait rhino et peu me repondre?

  2. #2
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    qu'est ce que ça veux dire :

    J'ai des fichiers javascript que je veux compiler
    jusqu'ici tout va bien ...

    et trouver les appels de fonctions dans le code
    mais alors là j'ai du mal .
    Dans le code compilé ?
    javascript n'est il pas interprété plutôt ?

  3. #3
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    Ouais, je ne comprends pas tres bien comment Rhino fonctionne mais je sais qu'apres avoir compilé mes fichiers javascript rhino peut me retourné le nom des fonctions qui sont définies dans mon fichiers Javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FileReader lReader;
     
          lReader = new FileReader("javascript.js");
          Object lResult = cx.evaluateReader(scope, lReader, "Mon Script", 1, null);
     
          Object[] fObj = scope.getIds();
     
          Object lFct = scope.get((String)fObj[0],scope);
     
          if(lFct instanceof Function){
            Function lFunction = (Function)lFct;
    Maintenant, je voudrais trouver le nom des fonctions qui sont appellées dans le code.

    Est-ce que tu crois que c'est possible?

  4. #4
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Maintenant, je voudrais trouver le nom des fonctions qui sont appellées dans le code.
    Appelées pendant l'éxecution ou appelées dans le code source :

  5. #5
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    Dans le code source...

  6. #6
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par pmartin8
    Dans le code source...
    Autrement dit, tu veux savoir quelles sont les methodes de ton code source qui sont réellement utilisées dans de ce même code.
    Dans mon environement de développement j'ai ce genre de fonction mais ce n'est pas une fonction du compilateur mais plutôt du builder. C'est à dire que une fois que le code est compilé, on compare le code source et le code compilé pour voir quelles sont les fonctions du code source qui ne sont pas utilisées.
    Normalement, si ton compilateur est bien fait, il ne te compile pas les fonctions qui ne sont jamais utilisées.
    Tout ce que fait le builder c'est te proposer de nettoyer ton code source des fonctions inutiles. Je travaille sous JSE8 si ça t'intèresse.

  7. #7
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    ouais c'est exactement ce que je veux faire!! En plus de ca je voudrais savoir les appels à des fonctions qui n'existent pas.

    Est-ce que tu peux me dire comment je peux faire ca??

    merci

  8. #8
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par mitje
    Normalement, si ton compilateur est bien fait,
    tu parles de Rhino?

  9. #9
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    non, en général.

    Comment faire :
    - trouve (si possible )une bonne interface de développement pour javascript et avec les fonctions de build dont je te parlai.

    - Sinon t'as plus qu'a le faire à la main, mais tu as dejà la moitié du boulot qui est faite puisque tu as la liste des fonctions. Aprés c'est de l'analyse syntaxique. Quand tu rentre dans une fonction, tu testes si dans le corps de ta fonction il existe une sous chaine qui corresponfdrait à un element de ta liste.

  10. #10
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    Le probleme cest que je voudrais trouver s'il y a des appels a des fonctions qui n'exsitent pas...

    Ca peu sembler bete comme ca ... mais cest que mes sources Javascript se trouvent dans plusieurs fichiers javascript (une centaine).

    Je te donne un exemple. Dans le fichier 645 j'appelle la fonction doIt() qui se est difinie dans le fichier 203. Le programmeur pensait que le fichier 203 etait visible aux yeux du fichiers 645 mais cela est faux. L'erreur sera seulement lancé une fois que le fichier 203 est interprété. Je voudrais pouvoir le détecter avant l'interprétation...

    Est-ce que tu penses que cest fesable?

  11. #11
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    oui,

    algorithme simple : On cherche les fonctions inaccessibles du fichier X

    parametres :
    Soit A l'ensemble des fonctions du fichier X.
    Soit B ensemble vide.

    Pour chaque fonction f de A on teste si celle-ci est "visible".
    sinon on ajoute f a B.

    Résultat : B contenant les fonction inaccessibles de X.

    Si on fait ça pour chaque fichier on peut savoir quelles sont les fonctions qui pose problème à l'interpretation.
    Faudrai savoir ce que tu entends par visible ?

  12. #12
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    ok ... ton algorithme est simple.. mais il ne permet pas de détecter un appel a une fonction qui n'a jamais été défini.

    Par exemple..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function doIt(){
     
      for(i=0; i < 10; i++){
         badFunction();
      }
    }
    Supposons que la fonction "badFunction" est définie nulle part... On ne pourra pas détecter cette erreur.... A moins que j'ailles mal compris ton algorithme...

  13. #13
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    ok je vois,

    Algorithme :
    Données : A contient toutes les fonctions (déclarées) de tout les fichiers.
    Pour chaque fichier faire ceci :
    - Analyse syntaxique du fichier qui nous donne B contenant toutes les fonctions utilisées dans le fichiers (par exemple BadFonction mais aussi toutes les autres fonctions utilisées).

    - Ensuite on compare A et B pour connaitre les elements de B qui ne sont pas dans A.

    Résultat : C contenant les elements de B qui ne sont pas dans A, ou toutes les fonctions (utilisées) qui n'ont jamais étaient déclarées.
    tu est obligé de faire une introspection syntaxique pour récupérer le nom des fonctions utilisées.

  14. #14
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    ahhh voila on s'approche du sujet chaud 8)

    J'ai bien aimé ton expression "introspection syntaxique" mais as-tu une idée comment faire ca?

    Merci encore!

  15. #15
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    je te donne quelques mots clés :

    - arbre syntaxique.
    - expression régulières.
    - analyse syntaxique.
    - je pense quand java tu dois avoir des outils avec des fonctions avancées.
    Demande sur le forum, fait un nouveau post

    Salut

  16. #16
    Membre habitué Avatar de pmartin8
    Inscrit en
    Novembre 2003
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 306
    Points : 126
    Points
    126
    Par défaut
    ouais en cherchant avec tes mots clés je tombe sur un outil "avancé" Java qui s'appelle Rhino.

    Rhino est un interpreteur/compilateur Javascript en Java. C'est la solution pour moi mais je n'ai pas trouvé comment faire un traitement sur le contenu d'une fonction. La fonction Javascript semble etre "l'atome" de Rhino donc elle n'est pas décomposable.

    Merci quand meme pour ta tentative d'aide ... Je continues de chercher

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo