q1:parser_turing_keller

Dies ist eine alte Version des Dokuments!


public class InfixCalculation{
 
 
  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 InfixCalculation(String rechnung){
    this.rechnung=rechnung+"_";//hinten ein Stopzeichen
  }
 
  // 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;
    while (ziffer()) {
      zahl *= 10;
      zahl += Character.getNumericValue(aktuell);
      weiter();
    }
    return zahl;
  }
 
  // TERM --> ZAHL | (SUMME)
  private double term(){ 
    double term = 1.0;
    if(ziffer()) {
      term = zahl();
    }
    if(aktuell=='(') {
      weiter();
      term = summe();
    }
      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(ziffer()) {
      summe += produkt();
    }
    if(aktuell=='+') {
      weiter();
      summe += summe();
    }
    if(aktuell=='-') {
      weiter();
      summe -= summe();
    }
    if(aktuell==')') weiter();
      return summe;
    }
 
 
 
  public static void main(String[] args) {
      System.out.println("Tip: java InfixCalculation \"3*(4-7)\"");
      InfixCalculation calc=new InfixCalculation("3*(4-7)");
      System.out.println("3*(4-7)"+" = "+calc.berechne());
    }
  }
  • /var/www/infowiki/data/attic/q1/parser_turing_keller.1543133253.txt.gz
  • Zuletzt geändert: 2018/11/25 08:07
  • von admin03