⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ries.java

📁 Pasc+Java 这是一个国外的随机自动机*(RAM)一个学习用的程序
💻 JAVA
字号:
import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.*;import javax.swing.*;import javax.swing.filechooser.FileFilter;import javax.swing.event.*;import java.awt.datatransfer.*;import java.math.*;public class Ries{	//String alphabet;	/**	* Erzeugt decimale Darstellung einer binaer dargestellten Zahl	* @param String - die zu konvertierende Zahl in Form eines Strings	* @return String - Ergebnis in Form von String	*/			  public static String bi_to_n(String s) throws NumberFormatException	  {		      int x=0;		      //int k=2;		      BigInteger k=new BigInteger("2");		      BigInteger ergebnis=new BigInteger("0");		      for(int i=s.length()-1;i>=0;i--)		      {			      char ch=s.charAt(i);			      //if((ch=='0') && (ch=='1'))			      //{			      //int a=Integer.parseInt(new Character(ch).toString());			      BigInteger a=new BigInteger(new Character(ch).toString());			      if((a.toString().equals("0")) || (a.toString().equals("1")))			      {				//      throw new NumberFormatException();			      //}			      //System.out.println(new BigInt(new Integer((int)(a*Math.pow(k,x))).toString()).toString());			      BigInteger big=(k.pow(x)).multiply(a);			      ergebnis=ergebnis.add(big);			      //ergebnis.add(new BigInt(new Double(a*Math.pow(k,x)).toString()));			      //System.out.println(a.toString()+" "+x+" "+" "+big+" "+ergebnis.toString());			      			      x++;			      }			      else			      {throw new NumberFormatException();}			     		      }		      //System.out.println(ergebnis);		      //return (new Integer(ergebnis).toString());		      return ergebnis.toString();	  }	  	  	  public static String k_to_n(int zahl,String s,String alphabet) throws NumberFormatException	  {		      int x=0;		      //int k=2;		      BigInteger k=new BigInteger(new Integer(zahl).toString());		      BigInteger ergebnis=new BigInteger("0");		      BigInteger a;		      for(int i=s.length()-1;i>=0;i--)		      {			      char ch=s.charAt(i);			      if(alphabet.indexOf(new Character(ch).toString())!=-1)			      {			      //int a=Integer.parseInt(new Character(ch).toString());			      try			      {			        a=new BigInteger(new Character(ch).toString());			      }			      catch(NumberFormatException e)			      {				      int u=alphabet.indexOf(ch);				      a=new BigInteger(new Integer(u).toString());			      }			      BigInteger big=(k.pow(x)).multiply(a);			      ergebnis=ergebnis.add(big);			      //System.out.println(a.toString()+" "+x+" "+" "+big+" "+ergebnis.toString());			      			      x++;			      }			      else				      throw new NumberFormatException();		      }		      return ergebnis.toString();		      	  }	  /*    public static String n_to_k(BigInt k,String s,String alphabet)    {	    BigInt a=new BigInt(s);	    String k_ergebnis="";	    String end_ergebnis="";	    String end_ergebnis1="";	    while(a.ne(new BigInt("0")))	    {		    k_ergebnis+=(a.mod(k)).toString();		    a=a.divide(k);	    }	    for(int i=k_ergebnis.length()-1;i>=0;i--)	    {		    end_ergebnis+=k_ergebnis.charAt(i);	    }	    	    for(int i=0;i<end_ergebnis.length();i++)	    {		    int index=Integer.parseInt(new Character(end_ergebnis.charAt(i)).toString());		    end_ergebnis1+=new Character(alphabet.charAt(index)).toString();	    }	    	    return end_ergebnis1;    }*/    public static String alphabet_einlesen(String alph)    {	    String ergebnis="";	    StringTokenizer strTok=new StringTokenizer(alph,",");	    while(strTok.hasMoreTokens())	    {		    ergebnis+=strTok.nextToken();	    }	    return ergebnis;    }    public static void main(String[] args) {	    	    String alphabet="";	    final int DECIMAL=0;	    final int BINARY=1;	    final int K_ADISCH=2;	    int eingabeArt=DECIMAL;        // added by Michael        if (args.length >= 2) {            if (args[0].equals("-c")) {                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));                // Scanner und Parser werden erzeugt                Scanner scanner = new Scanner(args[1]);                Parser parser = new Parser(scanner);                if(parser.parseProgramm()) {                    // Es wird ein Objekt der Klasse PrintWriter erzeugt , das dafuer sorgt , dass                    // in Java uebersetztes Ries-Programm in der Datei JavaCode.java gespeichert wird.                    // Falls JavaCode.java nicht existiert , wird sie erzeugt                    try {                        PrintWriter out=new PrintWriter(new FileOutputStream("JavaCode.java"));                        //Die Ausgabe wird in JavaCode.java gespeichert                        out.print(parser.getJavaCode());                        out.close();                        System.out.println("Uebersetzung in Javacode geglueckt...");                    } catch (FileNotFoundException e) {                        System.out.println("Beim Erstellen der Ausgabedatei 'JavaCode.java' ist ein Fehler aufgetreten");                    }                    // Zur Erzeugung neuer Prozesse steht die Methode exec der Klasse Runtime zur Verfuegung.                    // Der Systembefehl wird in einem einfachen String-Objekt uebergeben.                    // Um die Ausgabe eines Prozesses zu lesen muss Java mit dem Prozess (Process-Objekt)                    // kommunizieren.                    //Die Prozessdaten werden auf System.out angezeigt                    PrintWriter out1=new PrintWriter(System.out,true);                    //Systembefehl                    String cmd="javac JavaCode.java";                    try {                        //Ausfuehrung des Systemsbefehls                        Process proc=Runtime.getRuntime().exec(cmd);                        //Ausgabe der durch javac entdeckten Fehler                        BufferedReader in1=new BufferedReader(new InputStreamReader(proc.getErrorStream()));                        for(;;) {                            String inp=in1.readLine();                            if(inp==null)                                break;                            out1.println(inp);                        }                        System.out.println("Uebersetzung des Javacodes in ausfuehrbaren Code geglueckt...\nFertig.");                    } catch(IOException e) {                        System.out.println("Fehler");                    }		    		    	try{	    System.out.println("Programm laeuft...");	    BufferedReader in_eingabe;	    FileWriter fw;	    if(args.length>=3)		     in_eingabe=new BufferedReader(new FileReader(args[2]));//Datei in der Eingabedaten  gespeichert werden	    else		    		     in_eingabe=new BufferedReader(new FileReader("Eingabe.txt"));//Datei in der Eingabedaten  gespeichert werden	    if(args.length==4)		    fw=new FileWriter(args[3]); //Datei in der Ausgabedaten gespeichert werden	    else		    fw=new FileWriter("Ausgabe.txt"); //Datei in der Ausgabedaten gespeichert werden	    String kommandoZeilenParameter="";	    String zwischenString="";	    String s="";	    //Man liest aus Eingabedatei und speichert den Inhalt in der Variable zwischenString	    while((s=in_eingabe.readLine())!=null)	    {		    zwischenString+=s;	    }		    	    StringTokenizer t=new StringTokenizer(zwischenString);//Die Eingabedaten werden in Tokens geteilt	    try  //Falls Eingabedatei leer ist wird NoSuchElementException geworfen	    {	      String str=t.nextToken(); //Erster Token gibt die Art der Eingabe an(binaer,decimal,k-adisch)	      System.out.println(str);	      if(str.equals("d"))	      {		    eingabeArt=DECIMAL;	      }	      else if(str.equals("b"))	      {		     eingabeArt=BINARY;	      }	      else if(str.equals("k"))	      {		     eingabeArt=K_ADISCH;	      }	      else		     eingabeArt=DECIMAL;	    if(eingabeArt==K_ADISCH)	    {		    String strng=t.nextToken();		    alphabet=alphabet_einlesen(strng);	    }	      while(t.hasMoreTokens())   //Parameter werden eingelesen	      {		    String strng=t.nextToken();		    if(eingabeArt==DECIMAL || eingabeArt==BINARY)		    {			    try	//Es wird uberprueft,ob es um Zahlen handelt.Falls nicht wird Exception geworfen			    {				    BigInt b=new BigInt(strng);			    }			    catch(Exception e){ fw.write("Es werden Zahlen als Parameter erwartet"); }			    if(eingabeArt==BINARY)  //Falls es um Zahlen in binaerer Darstellungsform vorliegen,werden sie in Dezimalzahlen umgewandelt			    {				    try				    {					    String p=bi_to_n(strng)+" ";					    kommandoZeilenParameter+=p;				    }				    catch(NumberFormatException e){ fw.write("Bin鋜e Zahlen erwartet\n");}				    			    }			    else				    kommandoZeilenParameter+=" "+strng;		    }		    else if(eingabeArt==K_ADISCH)		    {			    try			    {				    String p=k_to_n(alphabet.length(),strng,alphabet)+ " ";				    kommandoZeilenParameter+=p;			    }			    catch(NumberFormatException e){ fw.write("Keine g黮tige Zahl\n");}		    }		    else			    kommandoZeilenParameter+=" "+strng;	      }	    	   		      Process proc=Runtime.getRuntime().exec("java JavaCode "+kommandoZeilenParameter);  //Ausf黨rung des Systemsbefehls	      BufferedReader in1=new BufferedReader(new InputStreamReader(proc.getErrorStream())); //Ausgabe der durch java entdeckten Fehler	      BufferedReader in2=new BufferedReader(new InputStreamReader(proc.getInputStream())); //Ausgabe der durch java berechneten Daten	      String inp=in1.readLine();	      String ausgabe;	    	      while((ausgabe=in2.readLine())!=null)	      {	        //if(inp==null)//Falls keine Fehler beim Ausfuerung vorliegen 	        //{		      		      if((ausgabe.indexOf("Ergebnis"))==-1)//Falls kein Ergebnis errechnet wurde,wird eine Erklaerung dafuer ausgegeben 		      {			      fw.write(ausgabe+"\n");		      }		      else		      {			      fw.write(ausgabe);			      if(eingabeArt==BINARY)//Falls die Eingabe binaer war,wird Ergebnis sowohl binaer als auch dezimal ausgegeben			      {				      BigInt n=new BigInt(ausgabe.substring(10));				      fw.write("\nBin鋜e Ausgabe: "+n.toString(2));			      }			      else if(eingabeArt==K_ADISCH)			      {				      //BigInt k=new BigInt(new Integer(alphabet.length()).toString());				      //BigInt n=new BigInt(ausgabe.substring(10));				      //fw.write("\nK_Adische Ausgabe: "+n_to_k(k,n.toString(),alphabet));			      }		      }		      	        //}	        //else	        //{			//fw.write(inp);//Fehlerausgabe	        //}	        //fw.close();//s.u.	}            System.out.println("Ausfuerung abgeschlossen");	    fw.close();	    }	catch(NoSuchElementException e){ System.out.println("Ausfuerung abgeschlossen");fw.write("Datei ist leer");fw.close(); }	}	          catch(IOException e){System.out.println(e.toString());}		    		                    } else {                    Vector errors=parser.getErrors();                    for(int i=0;i<errors.size();i++) {                        ParserException e=(ParserException)errors.get(i);                        System.out.println(e.getMessage());                    }                }            } else {                System.out.println("So wird Ries richtig gestartet:\n\n" +                                   "\tjava Ries [-h|-c] [Dateiname]\n" +                                   "\n" +                                   "-h\tlaesst die Hilfe zum Programmaufruf erscheinen\n" +                                   "-c\tstartet das Compilieren ohne graphische Benutzeroberflaeche, falls\n" +                                   "\tzusaetzlich ein Dateiname angegeben wurde");            }        } else if (args.length == 1) {            if (args[0].equals("-h")) {                System.out.println("So wird Ries gestartet:\n\n" +                                   "\tjava Ries [-h|-c] [Dateiname]\n" +                                   "\n" +                                   "-h\tlaesst die Hilfe zum Programmaufruf erscheinen\n" +                                   "-c\tstartet das Compilieren ohne graphische Benutzeroberflaeche, falls\n" +                                   "\tzusaetzlich ein Dateiname angegeben wurde");            } else if (args[0].equals("-c")) {                System.out.println("Die Compilierung ohne graphische Benutzeroberflaeche ist ohne Angabe\n" +                                   "einer Quellcodedatei nicht moeglich.");            } else {                RiesFrame frame=new RiesFrame();                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                frame.show();                frame.loadFile(args[0]);            }        } else if (args.length == 0) {            RiesFrame frame=new RiesFrame();            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            frame.show();        } else {            System.out.println("So wird richtig Ries gestartet:\n\n" +                               "\tjava Ries [-h|-c] [Dateiname]\n" +                               "\n" +                               "-h\tlaesst die Hilfe zum Programmaufruf erscheinen\n" +                               "-c\tstartet das Compilieren ohne graphische Benutzeroberflaeche, falls\n" +                               "\tzusaetzlich ein Dateiname angegeben wurde");        }    }    // Ende Michael}class RiesFrame extends JFrame{	/**	* Erzeugt ein Objekt der Klasse RiesFrame, das zwei Textbereiche(zu Texteingabe,zu Fehlerausgabe),	* drei Men黶(Datei,Bearbeiten,Tools) und eine Symbolleiste beinhaltet	*/  public RiesFrame()  {     setTitle("Ries");     setSize(WIDTH,HEIGHT);     sysClipboard=Toolkit.getDefaultToolkit().getSystemClipboard(); //Zwischenablage wird initialisiert     //Men

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -