Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 15h07   #1
Membre à l'essai
 
Étudiant
Inscription : février 2005
Messages : 48
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2005
Messages : 48
Points : 22
Points : 22
Envoyer un message via MSN à goof_22
Par défaut Qualimétrie de source Cobol

Bonjour,
je suis actuellement en stage dans une SSII.
Le but de mon projet est de réaliser un logiciel java qui vérifie la validité des normes dans les sources Cobol (exemple: la bonne indentation du programme).
Je cherche actuellement comment parcourir facilement des sources en évitant de passer par du ligne à ligne.
La proposition du début de stage était de travailler sur les sources libres de checkstyle( permet de vérifier qu'un programme java est bien écrit), et de le transposer sur des sources Cobol.

Checkstyle utilise antlr qui permet de générer un parseur à partir d'une grammaire. le problème est que je n'ai trouver aucune grammaire Cobol viable.
J'ai essayer d'extraire une grammaire utiliser dans le projet koopa, mais cela s'avère trop difficile. En effet il utilise beaucoup de grammaire, et génère bizarrement et n'a aucune documentation, même pas javadoc. Enfin, résolution des grammaire n'est pas concluante.

Le but de mon projet est de réaliser un socle permettant à des programmeur cobol connaissant en partie java( pas expert ) de pouvoir ajout de nouvelle testeur de norme facilement. Pour cette raison j'aimerais éviter qu'il ai à travailler ligne par ligne.

Si vous pouvez m'aider, voir me donner une direction à suivre. Je suis en stage depuis 1 semaine. Le projet doit être aboutis fin aout.

J'espère que j'ai été assez clair dans mes explications.
Merci de votre aide.
Lauric
goof_22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 16h40   #2
Expert Confirmé
 
Inscription : décembre 2007
Messages : 1 903
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 903
Points : 3 688
Points : 3 688
Citation:
Envoyé par goof_22 Voir le message
(.../...)
Je cherche actuellement comment parcourir facilement des sources en évitant de passer par du ligne à ligne.
(.../...)
Bonjour, et bienvenue. Ton projet semble interessant, quoique ardu.

J'ai du mal avec ce point là : que veux-tu dire par "en évitant de passer par du ligne à ligne"? Typiquement, nombre de normes de développements(et spécialement les indentation), sont dépendantes des lignes les unes par rapport aux autres. Par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
EVALUATE TRUE
   WHEN A = B
      PERFORM Z1
   WHEN A = C
      PERFORM Z2
   WHEN B = C
      PERFORM Z3
   WHEN OTHER
      PERFORM Z4
END-EVALUATE
Cette indentation est un peu particulière puisqu'on recule deux fois pour ensuite revenir au niveau initial sans intermédiaire. Ta difficulté, donc, est de trouver le Scope terminator(ici le END-EVALUATE) correspondant à l'ordre initial. Puis, ensuite, identifier les opérateurs intérmédiaires(ici les WHEN) à séparer de l'ordre qui va avec.

Ta deuxième difficulté, c'est le point.

Code :
1
2
3
4
5
IF A=B
   IF A=C
      PERFORM Z5
   END-IF
END-IF
est strictement équivalent à
Code :
1
2
3
IF A=B
   IF A=C
      PERFORM Z5.
En d'autre termes, le point sert de scope terminator à tout ce qui suit.

Troisième difficulté, le cas spécifique du PERFORM, mot à tout faire du COBOL. Quelques exemples, non exhaustifs :

PERFORM Z6 : executer le paragraphe Z6, et revenir dès que l'on atteint le paragraphe Z5
PERFORM Z6 THRU Z9 : executer tous les paragraphes compris entre Z5 et Z9(ce qu'il y a dans Z9 n'étant pas executé)
PERFORM Z6 UNTIL FIN-FICHIER executer le paragraphe Z6 tant que FIN-FICHIER est faux.
PERFORM UNTIL FIN-FICHIER : tant que FIN-FICHIER est faux, executer le code entre le perform et le end-perform.....

Bon courage, en tous cas.
__________________
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
el_slapper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 10h01   #3
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 37
Points : 33
Points : 33
Bonjour,

Utilise Koopa!

Etant donné le temps que tu as, je pense que le mieux pour toi est d'utiliser directement Koopa. Il parse les programmes et ensuite te permet de faire des requêtes Xpath sur le xml résultant.

Par exemple, si tu as une règle qui définit le format du nom du programme par une expression régulière. Avec Koopa, il suffit de récupérer le nom du programme par une requête Xpath (dans la doc : //compilationUnit//programName) et ensuite vérifier que le résultat respecte le format du nom de programme.
Dans ce cas, ça oblige la personne qui écrit la règle à connaitre Xpath et Java.

L'idéal serait d'interroger le xml généré par Koopa en Xquery. Comme ça, pour définir une règle il suffirait de la définir par Xquery sans aucun code Java.
ekans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 16h15   #4
Membre à l'essai
 
Étudiant
Inscription : février 2005
Messages : 48
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2005
Messages : 48
Points : 22
Points : 22
Envoyer un message via MSN à goof_22
El_slapper: en fait je cherchais si il y avais une autre solution, mais je vais passé par du ligne à ligne, et réaliser la validation des normes à l'aide des régex.
Merci pour la deuxième difficulté, je n'y aurais peut être pas pensé.

Ekans: Comme dit dans mon premier post, pendant un temps j'ai essayer d'extraire la grammaire de koopa, sans réussite..
Pour ma part j'ai eu quelque difficulté à utiliser koopa, et surtout je ne vois pas comment l'inclure dans mon code.
Mais surtout mon élément déterminant, est que en testant le visualiseur de koopa sur des sources cobol, j'ai remarqué qu'il loupais des mots clé. hors je ne peux me le permettre, quite à prendre un peu plus de temps. Merci quand même, je mettrais peut être des avancé sur ce post, ou d'autre question.
Bonne Journée
goof_22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 16h54   #5
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 37
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 37
Points : 33
Points : 33
Bon courage alors.

Mais attention, sauf si tes règles sont simples, tu risques d'être rapidement limité au niveau des règles que tu pourras vérifier si tu n'as pas de parser cobol.
ekans est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h52.


 
 
 
 
Partenaires

Hébergement Web