q1:parser_turing_keller

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
q1:parser_turing_keller [2018/11/25 08:07] – angelegt admin03q1:parser_turing_keller [2019/09/21 07:59] (aktuell) admin03
Zeile 1: Zeile 1:
 <code JAVA> <code JAVA>
-public class InfixCalculation{ +package infix; 
-   + 
-   +public class InfixCalulator 
-  private String rechnung; // die vollständige Rechnung + private String rechnung; // die vollständige Rechnung 
-  private int pos; // Position des nächsten Zeichens +   private int pos; // Position des nächsten Zeichens 
-  private char aktuell; // das aktuelle Zeichen +   private char aktuell; // das aktuelle Zeichen 
-  // Stellt einen gewöhnlichen Infix-Ausdruck mit den vier +   // Stellt einen gewöhnlichen Infix-Ausdruck mit den vier 
-  // Grundrechenarten und Klammern dar, z.B. 3*(-(2+4)) +   // Grundrechenarten und Klammern dar, z.B. 3*(-(2+4)) 
-  public InfixCalculation(String rechnung){ +   public InfixCalulator(String rechnung){ 
-    this.rechnung=rechnung+"_";//hinten ein Stopzeichen +     this.rechnung=rechnung+"_";//hinten ein Stopzeichen 
-  +     System.out.println(this.rechnung); 
-   +   
-  // Rechnet einmal durch +  
-  public double berechne(){ +   // Rechnet einmal durch 
-    pos=0; +   public double berechne(){ 
-    weiter(); + 
-    return summe(); +    
-  + pos=0; 
-   +     weiter(); 
-  private void weiter(){  +     return summe(); 
-    aktuell=rechnung.charAt(pos++);  +   
-    +  
-   +   private void weiter(){  
-  private boolean ziffer() +     aktuell=rechnung.charAt(pos++);  
-  +     
-    return aktuell>='0' && aktuell<='9'; +  
-  +   private boolean ziffer() 
-   +   
-  private double zahl(){ +     return aktuell>='0' && aktuell<='9'; 
-    double zahl = 0.0; +   
-    while (ziffer()) { +  
-      zahl *= 10; +   private double zahl(){ 
-      zahl += Character.getNumericValue(aktuell); +     double zahl = 0.0;    
-      weiter(); +     double kommazahl = 0.0; 
-    +     double potenz = 1.0; 
-    return zahl; +     while (ziffer()) { 
-  +       zahl *= 10; 
-   +       zahl += Character.getNumericValue(aktuell); 
-  // TERM --> ZAHL | (SUMME) +       weiter(); 
-  private double term(){  +     
-    double term = 1.0; +     if(aktuell=='.'){ 
-    if(ziffer()) { +       weiter(); 
-      term = zahl(); +                while (ziffer()) { 
-    +                      potenz *= 10;  
-    if(aktuell=='(') { +                      kommazahl += Character.getNumericValue(aktuell)/potenz; 
-      weiter(); +                       weiter(); 
-      term = summe(); +       } 
-    +     }   
-      return term; +      return zahl+kommazahl   
-  +   
-   +  
-   +   // TERM --> ZAHL | (SUMME) 
-  // PRODUKT --> TERM | TERM*TERM* ... | TERM/TERM/ ... +   private double term(){  
-  // | (auch * und / gemischt) +     double term = 1.0; 
-  private double produkt(){  +     if(ziffer()) { 
-    double produkt = 1.0; // Unsinn, aber compilierbar. +       term = zahl(); 
-    if(ziffer()||aktuell=='(') { +     
-      produkt = term(); +     if(aktuell=='(') { 
-    +       weiter(); 
-    if(aktuell=='*') { +       term = summe(); 
-      weiter(); +       weiter(); 
-      produkt = produkt*produkt(); +     }  
-    +       return term; 
-    if(aktuell=='/') { +   
-      weiter(); +  
-      produkt = produkt/produkt(); +  
-    +   // PRODUKT --> TERM | TERM*TERM* ... | TERM/TERM/ ... 
-        return produkt; +   // | (auch * und / gemischt) 
-  +   private double produkt(){  
-   +     double produkt = 1.0; // Unsinn, aber compilierbar. 
-  // SUMME --> +PRODUKT | -PRODUKT (evtl. führende Vorzeichen) +      
-  // | PRODUKT +     if(ziffer()||aktuell=='(') { 
-  // | PRODUKT+PRODUKT+ ... +       produkt = term(); 
-  // | PRODUKT-PRODUKT- ... +     }  
-  // | (auch + und - gemischt) +     if(aktuell=='*') { 
-  private double summe(){  +       weiter(); 
-    double summe = 0.0; +       produkt = produkt*produkt(); 
-    if(ziffer()) { +     
-      summe += produkt(); +     if(aktuell=='/') { 
-    +       weiter(); 
-    if(aktuell=='+') { +       produkt = produkt/produkt(); 
-      weiter(); +     
-      summe += summe(); +     
-    +      return produkt; 
-    if(aktuell=='-') { +   
-      weiter(); +  
-      summe -= summe(); +   // SUMME --> +PRODUKT | -PRODUKT (evtl. führende Vorzeichen) 
-    +   // | PRODUKT 
-    if(aktuell==')'weiter(); +   // | PRODUKT+PRODUKT+ ... 
-      return summe; +   // | 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()); 
 +     } 
 +}
  
-  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()); 
-    } 
-  } 
 </code> </code>
  • /var/www/infowiki/data/attic/q1/parser_turing_keller.1543133253.txt.gz
  • Zuletzt geändert: 2018/11/25 08:07
  • von admin03