Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Ada
Ada Forum d'entraide sur la programmation en langage Ada
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 09/04/2011, 22h29   #1
Invité de passage
 
Inscription : mars 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 16
Points : 0
Points : 0
Par défaut Récupérer un mot dans un fichier

Bonjour à tous

Voilà, je vous expose mon problème.

Je souhaite créer un programme ADA qui permette de traduire du pseudo-code (un langage algorithmique "en français") en un programme ADA.

Pour cela, j'ai déjà un fichier "algo.txt" qui comporte mon algo, ainsi qu'un fichier "prog.adb" qui va contenir le code source de mon programme.
Voilà le comportement que je souhaite reproduire :
ex :
Contenu de algo.txt :
"
Code :
1
2
3
Si a>b alors 
faire a <-c
FSi
"
et voilà ce que je souhaite obtenir au final dans mon fichier "prog.adb" :
Code :
1
2
3
IF a>b then
a := c ;
END IF;
(Note : je me limite pour l'instant à cette partie du travail, l'inclusion des bibliothèques et l' "enrobage du code" viendra par après).

J'ai déjà quelques idées, fondées sur un code comme celui-ci :
Code :
1
2
3
4
5
WHILE NOT End_Of_File(FicOri) LOOP
      Get_Line(FichierAlgot, Mot, Last);
         IF (Mot = "if") THEN Put_Line(FicDest, "si "); end if;
   END LOOP;
Bon évidemment ça ne marche pas, mais j'essaie d'en résumer l'idée.
En gros "Si je rencontre le mot "si" dans mon fichier TXT, alors j'écris à la même position le mot "if" dans mon fichier ADB. Je compte faire pareil en extension mais pour des mots genre "pour" (for), "tantque" (while), etc.
Sachant que les autres mots (ex, nom des variables, opérateurs de comparaisons) ne seront pas remplacés.

En réalité, je ne sais pas comment m'y prendre pour faire ça (je débute en ADA). Et j'ai bien du mal à trouver de la documentation qui traite concrètement de ce genre de problématique.
John_Locke_42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 16h06   #2
Futur Membre du Club
 
Homme
Inscription : avril 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 9
Points : 15
Points : 15
Par défaut Le B.A BA de la compilation

Le langage utilisé pour le pseudo-code doit avoir une grammaire relativement simple. Il faudrait en écrire (en Ada) l'analyseur lexical et le parser pour générer l'arbre syntaxique du code à traduire et ensuite le parcourir pour l'interpréter et générer le code Ada correspondant.
Tout cela est abordé dans les principes dans les cours de compilation. La page Web "AdaGOOP Home Page" adresse ce sujet du point de vue d'Ada avec fourniture d'un générateur de programmes Parser.

Une question plus prosaique : pourquoi ne pas utiliser un sous-ensemble réduit d'Ada comme langage de pseudo-code ?
RedBlackTree est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/04/2011, 10h11   #3
Membre confirmé
 
Avatar de Blackknight
 
Homme Frédéric Praca
Ingénieur développement logiciels
Inscription : février 2009
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Frédéric Praca
Âge : 38
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2009
Messages : 140
Points : 226
Points : 226
Envoyer un message via AIM à Blackknight Envoyer un message via MSN à Blackknight
Sinon, tu peux aussi tenter de t'attaquer aux versions Ada de Lex et Yacc que tu pourras trouver chez M. Obry ou encore regarder OpenToken.
Il y en a encore d'autres dont tu trouveras un petit référencement
Blackknight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 22h05   #4
Invité de passage
 
Inscription : mars 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 16
Points : 0
Points : 0
Merci, mais n'y a t-il pas un moyen plus simple que Lexx et Yacc (par exemple, avec de simples structures conditionnelles IF... THEN ... ELSEIF) ?

Je suis vraiment débutant en langage ADA, et je m'étais déjà aventuré sur Lexx et Yacc ... en C, mais sans succès ...
John_Locke_42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 12h22   #5
Futur Membre du Club
 
Inscription : mars 2011
Messages : 21
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 21
Points : 16
Points : 16
Une façon pour passer d'une manière pas trop compliquée d'un pseudo code à un code Ada pourrait consister en :
  • choisir un pseudocode qui ne diffère d'Ada que par des mots clés d'un seul tenant (FinSi et non Fin Si) qu'il suffirait de remplacer par leurs équivalents pour obtenir un code Ada valide.
  • Utiliser la syntaxe Ada pour les appels de procédure et fonction et terminer les instructions par un ';'
  • Utiliser la syntaxe Ada pour l'écriture des identificateurs et des nombres.
  • Constituer le fichier texte du pseudo-code en lignes indépendantes (pas de mots clés à cheval sur deux lignes par exemple)
  • Lire le fichier ligne par ligne et décomposer celles-çi en mots indépendants au moyen de la procédure Find_Token à 5 paramètres qui est fournie aussi bien par les packages String, Bounded_String que Unbounded_String (bien en étudier la documentation)
  • Remplacer les mots clés du pseudo-code trouvés par leurs équivalents Ada et reconstituer les lignes en les écrivant dans un autre fichier en gardant tous les autres mots dans leur ordre.
Cela devrait marcher si je n'ai rien oublié...

Mais la meilleure approche reste tout de même celle préconisée par Blacknight et RedBlackTree qui, bien comprise et menée à bien, serait un excellent investissement (au moins sur le plan de la culture informatique).
Emile8 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 00h32.


 
 
 
 
Partenaires

Hébergement Web