De logique de programmation à java

Soyez le premier à donner votre avis sur cette source.

Vue 11 447 fois - Téléchargée 564 fois

Description

Cet exemple permet de convertir une suite d'instructions tel que :
SI a>b ALORS
a<-5
SINON
a<-7
FINSI
en
if(a>b){
a=5;
}else{
a=7;
}

Source / Exemple :


//JDK 1.5 !!!
import java.util.Scanner;// Classe Scanner (Lecture)
import java.io.File;
import java.util.regex.MatchResult;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
public class Log2Java { 

    public static void main(String[] args) {
      //Scanner clavier=new Scanner(System.in)
      boolean trouvé=true;
      MatchResult res;
      if (args.length<1){
	System.out.println("Utilisation : Log2Java fichier [-noSource]");
	System.out.println("-noSource est optionel et permet de désactiver la sortie de la source...");
	return;
      }

      File fich;
      fich=new File(args[0]);
      //Scanner fichier=new Scanner(System.in);
      Scanner fichier;
      try{
	fichier=new Scanner(fich);
      }catch(java.io.FileNotFoundException e){
	System.out.println("fichier non trouvé");
	return;
      }
	fichier.useDelimiter("\n");
	System.out.println("import java.util.Scanner;\nScanner clavier=new Scanner(System.in);");
	while(fichier.hasNextLine()){
	  //System.out.println(fichier.nextLine()); 
	  trouvé=true;
	  if (fichier.hasNext("\\W*SI (.*)ALORS(?://.*)?")){
	    //System.out.println("ok");
	    res=fichier.match();
	    if (res.groupCount()<1){
	      System.out.println("***ERREUR : Manque la condition !***");
	    }else {
	      String b;
	      b=res.group(1);
	      //b=b.replaceAll("\\bet\\b","&&");
	      b=conversion(b);
	      System.out.println("if("+b+"){");
	    }
	  }else if (fichier.hasNext("\\W*POUR (\\w*) DE (\\w*) A (\\w*)(?: PAR (.*))? FAIRE")){
	    res=fichier.match();
	    if (res.groupCount()<3){
	      System.out.println("***ERREUR : Manque une partie !!!***");
	    }else {
	      String variable,initialisation,fin;
	      variable=res.group(1);
	      initialisation=res.group(2);
	      fin=res.group(3);
	      if (res.group(4)!=null){
		String pas=res.group(4);
		int a=(Integer.decode(initialisation)-Integer.decode(fin));
	      	System.out.println("for("+variable+"="+initialisation+";"+variable+((a<=0)?"<=":">=")+fin+";"+variable+"+="+pas+"){");
	      }else{
	      	System.out.println("for("+variable+"="+initialisation+";"+variable+"<="+fin+";"+variable+"++){");
	      }
	    }  

	  }else if (fichier.hasNext("\\W*TANTQUE (.*) FAIRE")){
	    res=fichier.match();
	    if (res.groupCount()>0){
	      System.out.println("while("+conversion(res.group(1))+"){");
	    }
	  }else if(fichier.hasNext("\\W*AFFICHER (.*)")){
	    res=fichier.match();
	    if (res.groupCount()>0){
	      System.out.println("System.out.println("+conversion(res.group(1))+");");
	    }
	  }else if(fichier.hasNext("\\W*FIN.*")){
	    System.out.println("}");
	  }else if(fichier.hasNext("\\W*SINON")){
	    System.out.println("}else{");
	  }else if(fichier.hasNext("\\W*LIRE (\\w*)")){
	    res=fichier.match();
	    System.out.println(res.group(1)+"=clavier.nextLine();");
	  }else if(fichier.hasNext("\\W*(\\w*)\\W*:entier")){
	    res=fichier.match();
	    if (res.groupCount()==1){
	      System.out.println("int "+res.group(1)+";");
	    }
	  }else if(fichier.hasNext("\\W*(\\w*)\\W*:chaîne")){
	    res=fichier.match();
	    if (res.groupCount()==1)System.out.println("String "+res.group(1)+";" );
	  }else if(fichier.hasNext("\\W*(\\w*)\\W*:bouléen")){
	    res=fichier.match();
	    if (res.groupCount()==1)System.out.println("boolean "+res.group(1)+";");
	  }{
	    trouvé=false;
	  }
	  if (args.length==1){
	    if (trouvé){
	      System.out.println("CS>>"+fichier.nextLine());
	    }else{
	      String tmp=fichier.nextLine();
	      System.out.println(conversion(tmp)+";");
	      System.out.println("CS>>"+tmp);
	    }
	  }else{
	    fichier.nextLine();
	  }
	  
	}
    }
    public static String conversion(String quoi){
      
      quoi=quoi.replaceAll("\\bET\\b","&&");
      quoi=quoi.replaceAll("\\bOU\\b","||");
      quoi=quoi.replaceAll("\\bNON\\b","!");
      quoi=quoi.replaceAll("=","==");
      quoi=quoi.replaceAll("<-","=");
      Scanner chaine=new Scanner(quoi);
      MatchResult res;
      if (chaine.hasNext(".*RACINE\\((.*)\\)")){
	//System.out.println("ok" );
	res=chaine.match();
	//System.out.println("******"+res.group(1) );
	quoi=quoi.replaceAll("RACINE\\(.*\\)","Math.sqrt("+res.group(1)+")");
      }
      return quoi;
    }

}

Conclusion :


L'une de mes sources en VB s'étend plus largement sur les re...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
mardi 16 décembre 2008
Statut
Membre
Dernière intervention
9 avril 2009

je veux un algorithme qui fait la conversion d'une ontologie ecrite en xml vers une ontologie ecrite en owl
Messages postés
5
Date d'inscription
vendredi 5 septembre 2003
Statut
Membre
Dernière intervention
3 février 2006

Bonjour. Apparement,tu souhaites coder un traducteur langage algorithmique vers Java, pour pouvoir ensuite exécuter les algorithmes.
Âvec le même objectif en tête, j'ai participé au développement d'un environnement de programmation en langage algorithmique (coloration syntaxique, compilation, exécution). Il est implanté en Java et est actuellement utilisé par l'IUT informatique de Toulouse III pour former les étudiants en 1re année cf. http://g.cabanac.free.fr/JAVA/COMPALGO.
@+
Guillaume Cabanac

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.