[Java] Traduction automatique : algorithme → langage C

Gevi2013 Messages postés 6 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Salut, ds le cadre de TP de théorie de langage, mon prof me demande de programmer un Traducteur d'algorithme en C. Aidez moi svp;je su debutant en programmation et je ne sais par où commencer ;merci

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Ok pour t'aider. Commence par nous préciser ce que tu as commencé à faire, à nous faire part de tes réflexions et nous dire là où tu bloques.
    On pourra mieux t'orienter.
    1
    1. Gevi2013 Messages postés 6 Statut Membre
       
      Salut et merci a vous
      j'ai commencé par avoir la forme générale et complète que peut avoir un algorithme (mots clés, structures et boucles,etc...) puis je vais cherché leur syntaxe et sémantique en langage C afin de pouvoir générer la grammaire .je rappelle que mon programme doit être écrit en JAVA. Merci
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Gevi2013 Messages postés 6 Statut Membre
         
        je rappelle que mon programme doit être écrit en JAVA.
        Euh, ce n'est pas un rappel, tu ne l'as jamais mentionné. Depuis le début tu ne parles que de C et tu as posté dans la catégorie C... Donc, ton programme doit être écrit en C ou en Java ?
        0
    2. Gevi2013 Messages postés 6 Statut Membre
       
      Excusez moi
      Au fait je n'avais pas bien compris le travail. Après explication que j'ai su que mon programme doit être écrit en Java et qu'il doit être capable de traduire un algorithme en C.Donc le langage que je dois utilisé pour programmer est Java. Merci
      0
      1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > Gevi2013 Messages postés 6 Statut Membre
         
        Ok. Je reroote ton post sur Java et je renomme le titre ;-)
        0
    3. Gevi2013 Messages postés 6 Statut Membre
       
      Merci pour votre Compréhension. Vous êtes génial. Merci
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Pour que je comprennes bien à mon tour ce que tu cherches à faire merci de préciser un peu ce que tu veux, parce que ce n'est toujours pas très clair.

    Est-ce que ton programme Java aura :

    1) en entrée : un algorithme, en sortie : un code C.
    2) en entrée : un code C, en sortie : un code Java.

    Ce n'est pas tout à fait la même chose... (le 1 parait plus facile que le 2)

    Au passage, précises le périmètre de ton projet, par exemple est-ce que tu peux utiliser des bibliothèques existantes (genre JFlex et Cup) ?

    Et pour le 1 : quel formalisme tu utilises pour représenter ton algorithme, quelles sont les fonctionnalités dont ils disposent exhaustivement, etc.

    Pour le 2 : à quelques fonctionnalités du C en particulier tu vas te limiter, parce qu'il est évident que tu ne pourras pas recréer toute la grammaire du C en quelques jours...
    1
    1. Gevi2013 Messages postés 6 Statut Membre
       
      Merci;
      mon programme java aura en entrée un algorithme,en sortie un code C.
      Mon algorithme a la forme classique c'est à dire :
      Algorithme <nom_algorithme>;
      étiquette;
      const //mot clé désignant la déclaration d'une constante ;
      types et structures(tableaux, enregistrement,...)
      fonctions
      procédures
      var pour déclarer des variables;
      début (début du programme principale)
      ---------------//instructions avec l'utilisation éventuelle des opérations de lecture(lire) et d'écriture(écrire) et les structures de contrôle(
      si (condition) alors instructions ;
      sinon instructions
      finsi
      Tant que (condition) faire
      instructions;
      fintq
      repéter
      instructions
      jusqu'à(condition)
      pour(i allant de <valeur initiale> à <valeur final>) faire
      instructions
      finpour
      Selon (choix) faire
      cas1:'instructions;
      ------------------//
      cas n:instructions
      sinon :instructions
      finselon
      -------------------
      Fin
      S'il vous plait c'est l'idée que j'ai pour l'instant;si vous avez mieux dites le moi.
      0
      1. KX Messages postés 19031 Statut Modérateur 3 020 > Gevi2013 Messages postés 6 Statut Membre
         
        "Mon algorithme a la forme classique"
        Je ne crois pas qu'il existe vraiment une "forme classique", un algorithme étant destiné à être lu par un être humain on peut faire ça n'importe comment.

        Disons donc que ta "forme classique" tu en fixes la syntaxe et que ça devienne un langage formel. Il faut ensuite que tu lises ton fichier source contenant ton algorithme, et que tu remplaces les différentes instructions par leur équivalent en C, afin de créer en sortie le code correspondant.

        Par exemple :
        si (condition) alors
              instructions
        sinon instructions
        finsi

        Deviens :
        if (condition) {
            instructions
        } else {
            instructions
        }

        De manière grossière on pourrait donc faire un remplacement systématique :
        "si ("    --> "if ("
        ") alors" --> ") {"
        "sinon"   --> "} else {"
        "finsi"   --> "}"

        Evidemment, il y a des cas particuliers à gérer, mais le cas général devrait être plus ou moins comme ça, sachant que bien sûr "condition" et "instructions" devront eux aussi être traduits en langage C au moment de leurs lectures respectives.
        0
    2. Gevi2013
       
      Merci pour tout
      j'ai à présent des fixées.
      1
  3. Gevi2013
     
    salut;
    S'il vous plait j'ai du mal à écrire la grammaire des instructions d'écriture et de lecture c'est à dire: lire(a);
    ecrire(a) où a est une variable de type donné; entier par exemple.
    Aidez-moi. Merci
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Pour être le plus simple possible tu pourrais préciser le type de la donnée dans le nom de l'opération dans l'instruction :

      lire_entier(a);   --> scanf("%d",&a);
      ecrire_entier(a); --> printf("%d\n",a);
      
      lire_chaine(a);   --> scanf("%s",a);
      ecrire_chaine(a); --> printf("%s\n",a);

      Pour faire cela vraiment bien (mais c'est plus dur), il faudrait conserver le type de la donnée en mémoire lors de sa déclaration pour l'adapter au mieux.
      0