[Java] Traduction automatique : algorithme → langage C

Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Ok. Je reroote ton post sur Java et je renomme le titre ;-)
0
Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour votre Compréhension. Vous êtes génial. Merci
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Gevi2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
"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
Gevi2013
 
Merci pour tout
j'ai à présent des fixées.
1
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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