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

Ada Discussion :

Récupérer un mot dans un fichier


Sujet :

Ada

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 16
    Points : 7
    Points
    7
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Points : 19
    Points
    19
    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 ?

  3. #3
    Membre averti Avatar de Blackknight
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 214
    Points : 383
    Points
    383
    Par défaut
    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

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    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 ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 76
    Points
    76
    Par défaut
    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).

Discussions similaires

  1. Récupérer des mots dans un fichier html
    Par neterfari dans le forum C++/CLI
    Réponses: 5
    Dernier message: 03/04/2014, 09h49
  2. récupérer un mot dans un fichier txt
    Par thedevil dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2007, 14h59
  3. Réponses: 18
    Dernier message: 22/06/2006, 10h28
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58
  5. Comment changer des mots dans un fichier?
    Par ptitbonum dans le forum Linux
    Réponses: 5
    Dernier message: 07/04/2004, 23h42

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