q1:parser_turing_keller

package infix;
 
public class InfixCalulator {
	 private String rechnung; // die vollständige Rechnung
	  private int pos; // Position des nächsten Zeichens
	  private char aktuell; // das aktuelle Zeichen
	  // Stellt einen gewöhnlichen Infix-Ausdruck mit den vier
	  // Grundrechenarten und Klammern dar, z.B. 3*(-(2+4))
	  public InfixCalulator(String rechnung){
	    this.rechnung=rechnung+"_";//hinten ein Stopzeichen
	    System.out.println(this.rechnung);
	  }
 
	  // Rechnet einmal durch
	  public double berechne(){
 
 
		pos=0;
	    weiter();
	    return summe();
	  }
 
	  private void weiter(){ 
	    aktuell=rechnung.charAt(pos++); 
	    }
 
	  private boolean ziffer()
	  {
	    return aktuell>='0' && aktuell<='9';
	  }
 
	  private double zahl(){
	    double zahl = 0.0;   
	    double kommazahl = 0.0;
	    double potenz = 1.0;
	    while (ziffer()) {
	      zahl *= 10;
	      zahl += Character.getNumericValue(aktuell);
	      weiter();
	    }
	    if(aktuell=='.'){
	      weiter();
	               while (ziffer()) {
	                     potenz *= 10; 
	                     kommazahl += Character.getNumericValue(aktuell)/potenz;
	                      weiter();
	      }
	    }  
	     return zahl+kommazahl;   
	  }
 
	  // TERM --> ZAHL | (SUMME)
	  private double term(){ 
	    double term = 1.0;
	    if(ziffer()) {
	      term = zahl();
	    }
	    if(aktuell=='(') {
	      weiter();
	      term = summe();
	      weiter();
	    } 
	      return term;
	  }
 
 
	  // PRODUKT --> TERM | TERM*TERM* ... | TERM/TERM/ ...
	  // | (auch * und / gemischt)
	  private double produkt(){ 
	    double produkt = 1.0; // Unsinn, aber compilierbar.
 
	    if(ziffer()||aktuell=='(') {
	      produkt = term();
	    } 
	    if(aktuell=='*') {
	      weiter();
	      produkt = produkt*produkt();
	    }
	    if(aktuell=='/') {
	      weiter();
	      produkt = produkt/produkt();
	    }
 
	     return produkt;
	  }
 
	  // SUMME --> +PRODUKT | -PRODUKT (evtl. führende Vorzeichen)
	  // | PRODUKT
	  // | PRODUKT+PRODUKT+ ...
	  // | PRODUKT-PRODUKT- ...
	  // | (auch + und - gemischt)
	  private double summe(){ 
	    double summe = 0.0; 
	    if(aktuell==')') {
			return summe;
			  }
 
	    if(ziffer()) {
	      summe += produkt();
	    }
	    if(aktuell=='(') {
		 summe += produkt();
		  }
 
	    if(aktuell=='+') {
	      weiter();
	      summe += produkt();
	    }
	    if(aktuell=='-') {
	      weiter();
	      summe -= produkt();
	    }
 
	    if(aktuell!='_') {
		  summe += summe();
	    }
 
	    return summe;
	    }
 
 
 
	  public static void main(String[] args) {
	      String lese = "(2-5)+(-3+1)-5+10-10";
	      System.out.println("Tip: java InfixCalculation"+lese);
	      InfixCalulator calc=new InfixCalulator(lese);
	      System.out.println(lese +" = "+calc.berechne());
	    }
}
  • /var/www/infowiki/data/pages/q1/parser_turing_keller.txt
  • Zuletzt geändert: 2019/09/21 09:59
  • von admin03