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

avec Java Discussion :

AST de cobol en java


Sujet :

avec Java

  1. #21
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Mais par définition si je n'ais aucune classe qui s'appelle Cobolparser, je ne peux pas avoir Cobolparseur dans mon constructeur

  2. #22
    Invité
    Invité(e)
    Par défaut
    Alors dans le tuto officiel de jtb il est écrit ceci ;
    * Run JTB on the grammar. On Unix systems, this would be done with the following command:

    % jtb Java1.1.jj

    This will generate the syntaxtree directory which contains your tree node classes, the visitor directory which contains Visitor interface, DepthFirstVisitor class, ObjectVisitor interface and ObjectDepthFirst class, and jtb.out.jj, the grammar file with code inserted to build the syntax tree.
    * Run JavaCC on the annotated grammar file to generate the parser.
    va voir ici : http://compilers.cs.ucla.edu/jtb/jtb-2003/tutorial.html
    Il semble manquer cette étape à ton autre tuto...

  3. #23
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Cela ne marche toujours pas, je suis vraiment perdu et je dois rendre cela pour ce soir.
    Ce qui est le plus embêtant c'est que je suis tout proche de la solution d'après moi, il n'y a que un problème avec ce main, car toute l'exécution avec JTB ce déroule parfaitement et je trouve exactement les fichiers et l'architecture que je dois trouver, mais il me manque juste cette classe qui est présente dans mon main.
    Je pense que une spécialiste java devrait comprendre mon problème.

    Help please


    PS: tous mes fichiers sont encore disponible à l'adresse suivante http://asbrechaumont.com/astcobol/

  4. #24
    Invité
    Invité(e)
    Par défaut
    Salut
    D'après le tuto de JTB, ton parser est généré par javaCC et non pas JTB.
    Il ne faut pas être spécialiste en java, c'est juste qu'il faut connaitre l'outil. TU as essayé de générer le parser comme dans le tuto de JTB, avec la gammaire générée par JTB ?

  5. #25
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    J'ai appliquer JavaCC qui ma retourné 5 fichiers .java
    CobolParser.java
    CobolParserConstants.java
    CobolParserTokenManager.java
    SimpleCharStream.java
    Token.java
    TokenMgrError.java

    Dont le fameux CobolParser.

    J'ai donc écris mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import java.io.File;
    import java.io.FileInputStream;
    import syntaxtree.CompilationUnit;
    import visitor.TreeDumper;
    import visitor.TreeFormatter;
     
     
    public class main {
     
    	/**
             * @param args
             * @return 
             */
    	public main(){
    	 parse("/home/wje/Bureau/testcobol.cobol");
    	 System.out.println("How many rows?");
    	}
    	 public static void parse( String source ) {
    		    try {
    		    	System.out.println("How many rows?");
    		      // open the source file
    		      File source_file = new File( source );
    		      FileInputStream is = new FileInputStream( source_file );
     
    		      // starts parsing
    		      CobolParser parser = new CobolParser( is );
    		      CompilationUnit unit = parser.CompilationUnit();
     
    		      // creates a formatter visitor
    		      TreeFormatter fmt = new TreeFormatter();
    		      fmt.visit( unit );
     
    		      // creates a dumper visitor
    		      TreeDumper dump = new TreeDumper();
    		      dump.visit( unit );
    		    }
    		    catch( Exception ex ) {
    		      ex.printStackTrace();
    		    }
    		  }
     
     
    }
    Et maintenant il me trouve l'erreur suivante lors de la compilation :
    Exception in thread "main" java.lang.NoClassDefFoundError: main/java
    Caused by: java.lang.ClassNotFoundException: main.java
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

  6. #26
    Invité
    Invité(e)
    Par défaut
    Tu compiles à la main ou toujours dans eclipse ?
    Ca me parait bizarre comme exception ca. Tu as bien inclus les classes dans eclipse ? dans le bon package ?
    La on dirat que tu as fait un truc du genre :
    pour exécuter.
    Tu peux m'en dire plus ?

  7. #27
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    J'ai refait un projet car il y avais des erreurs? les fichiers généré devait être importé dans leur package et de plus mon main n'étais pas reconnu ( faut d'inattention ).
    J'ai recrée le tout et maintenant je n'ais plus d'erreur ( juste des warning de type never read ) et pour cause quand j'execute mon projet il me sort une erreur de type :
    Exception in thread "main" java.lang.NoSuchMethodError: main

    Si tu veux voir le code ou exécuter le projet chez toi pour voir ce qui ne colle pas tu peux aller voir sur http://asbrechaumont.com/astcobol/ j'ai remis mon nouveau projet qui semble plus cohérent que l'ancien.

  8. #28
    Invité
    Invité(e)
    Par défaut
    Comme le dit le message d'erreur, pour exécuter un programme en java, comme en C, il te faut une méthode main de signature suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static void main(String[] args) {
        ...
    }
    Dans cette méthode tu appelles par exemple ta méthode parse ainsi :
    si ton fichier à parser est donné en paramètre dans la ligne de commande après ton programme

  9. #29
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Merci d'avoir répondu,
    Mais quand je mais public static void main(String[] args) {
    Il me dis warning the method has a constructor name.
    ( je l'avais déjà mis avant, mais je l'ai enlevé pour cela. )

    Maintenant il me mais une autre erreur ( ca progresse )


    testparser.ParseException: Encountered "SUBTRACT" at line 1, column 6.
    Was expecting:
    "identification" ...

    at testparser.CobolParser.generateParseException(CobolParser.java:30495)
    at testparser.CobolParser.jj_consume_token(CobolParser.java:30339)
    at testparser.CobolParser.IdentificationDivision(CobolParser.java:1933)
    at testparser.CobolParser.ProgramUnit(CobolParser.java:1850)
    at testparser.CobolParser.CompilationUnit(CobolParser.java:1798)
    at main.parse(main.java:28)
    at main.main(main.java:16)

  10. #30
    Invité
    Invité(e)
    Par défaut
    Bon ben ton parser marche maintenant...
    Le problème vient de ton fichier en cobol que tu parses, il n'est pas conforme à la grammaire...
    Sinon pour le warning c'est aprce que tu as appelé ta classe main.
    Tu devrais respecter les conventions de nommage : les noms des classes commencent par une majuscule, les noms de méthodes par une minuscule...
    Bref ton problème est résolu, si le fichier source n'est pas conforme à ta grammaire, c'est
    • soit ta grammaire n'est pas la bonne version pour le programme écrit
    • soit ton programme ne respecte pas la grammaire

    Tout dépend si tu cherches une grammaire s'adaptant à ton programme ou si tu as écrit un programme censé suivre ta grammaire...
    Je ne sais pas si ton programme a une erreur à dessein ou non. Bref là faut voir avec ton chef, quelle version de cobol il utilise et si tout est compatible...

  11. #31
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Ok merci beaucoup pour votre aide.
    Donc si j'ai un fichier cobol avec la même grammaire que celle que j'ai insérée dans mon programme cela devrait m'afficher un ast ???

  12. #32
    Invité
    Invité(e)
    Par défaut
    Ben en théorie oui si ton fichier cobol suit la grammaire dont tu as un parser, il sera accepté et un AST sera construit...
    Oublie pas (bouton en bas de la discussion)

  13. #33
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Merci beaucoup pour tous, je suis plus spécialisé dans le réseau le citrix et particulièrement les solutions open-source comme alfresco ou asterisk.
    Alors si tu as un problème de ce type Georges n'hésite pas à me contacter.

  14. #34
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Malheureusement je viens de tester avec du code cobol, mais mon parseur ne reconnaît pas les commentaire ni les requête sql, de plus aucun ast n'est généré, à la fin de l'exécution seul le programme se ré affiche sans aucun changement.

  15. #35
    Invité
    Invité(e)
    Par défaut
    Ben tout dépend de ta grammaire, je ne l'ai pas lue, je ne sais pas pour quelle version de cobol elle est valable... Il faut regarder dedans, tu as peut-être des commentaires qui t'indiqueront ce qui est supporté. Si ton parser ne reconnait pas le SQL c'est peut-être parce que c'est un parser pour cobol... On ne peut pas compiler du Java avec gcc

  16. #36
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    Et pour mon ast? il devrait apparaître ou?

  17. #37
    Invité
    Invité(e)
    Par défaut
    Aucune idée moi, tu as fait quoi comme visiteur ? Regarde un peu les concepts utilisés, renseigne toi sur le net là dessus

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut
    Salut à tous!
    Et bien je dois faire exactement la même chose ;-).
    J'ai bien tout généré grâce à javaCC et JTB, avec le .jj de Bernard Pinon

    Et mon main ne marche pas: leurs exemples appellent une méthode void pour récupérer un node:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    package org.objectweb.petals.parsercobol;
     
    import org.objectweb.petals.parsercobol.syntaxtree.Node;
    import org.objectweb.petals.parsercobol.visitor.DepthFirstVisitor;
     
    public class Main {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            CobolParser parser = new CobolParser(System.in);
     
            try {
               Node root = parser.CompilationUnit();
               System.err.println("Cobol program parsed successfully.");
               root.accept(new DepthFirstVisitor());
            }
            catch (ParseException e) {
               System.err.println("Encountered errors during parse.");
            }
     
     
        }
     
    }
    L'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type mismatch: cannot convert from void to Node
    Et en effet la méthode est statique et void:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static final public void CompilationUnit() throws ParseException {...}
    Déjà tu utilisais quoi comme version de javacc (j'ai la 4.1) et de jtb (j'ai la 1.3.2)?
    Merci d'avance à celui qui a une idée!

  19. #39
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 26
    Par défaut
    J'ai la même version de javacc et de jtb.
    Moi il me retourne uniquement le code sans aucun nouveau formatage dans la console, il ne génère pas d'ast et ne prend pas en compte les commentaire et les requêtes sql.

  20. #40
    Invité
    Invité(e)
    Par défaut
    @Jerem285 si il ne prend pas en compte le sql comme je te l'avais dit, c'est parce que tu n'as pas une grammaire pour le sql mais pour le cobol... un parser ne peut pas tout comprendre, de meme que tu ne parles pas toutes les langues existantes. Il faut bien comprendre qu'un parser ne peut comprendre que la grammaire que tu lui as donnée, donc pour tes commentaires, si ils ne suivent pas un format décrit dans la grammaire, il ne les reconnaitra pas non plus.
    Enfin pour la sortie, bien sûr qu'il te construit un ast en parsant (si ton programme d'entrée est correct) mais il ne t'affiche que ce que tu lui as dit d'afficher avec un visiteur. Bref tiens compte de mes remarques et fais quelques recherches sur le sujet des visiteurs si tu ne connais pas. De meme lis la doc de jtb pour voir ce qu'il faut faire comme visiteur. Il y a surement des exemples sur leur site.

    @tigroo31 tu as pris la meme grammaire que jerem285 ? tu as suivi les memes étapes ?

Discussions similaires

  1. Cobol call Java sous MVS
    Par ego dans le forum Cobol
    Réponses: 4
    Dernier message: 16/08/2010, 20h03
  2. Cobol devant Java en terme de demande :)
    Par lepinekong dans le forum Actualités
    Réponses: 8
    Dernier message: 24/01/2010, 22h14
  3. de cobol vers java
    Par CobolProgrammator dans le forum z/OS
    Réponses: 4
    Dernier message: 18/02/2009, 17h45
  4. Réponses: 0
    Dernier message: 22/07/2008, 12h30

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