Zorbing

[Logik] Formel

Dec 6th, 2012
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.10 KB | None | 0 0
  1. package main;
  2.  
  3. public class Formel {
  4.     private String FORMEL;
  5.     private Formel aussage[] = new Formel[2];
  6.     private short pointer = 0;
  7.     private char junk = '-';
  8.     private boolean negThis;
  9.  
  10.     Formel(String formel, boolean neg) {
  11.         FORMEL = formel;
  12.         negThis = neg;
  13.         parse(formel);
  14.     }
  15.  
  16.     /*
  17.      * Private-Methoden
  18.      */
  19.     private void addFormel(String sub, boolean neg) {
  20.         if (pointer < 2) {
  21.             aussage[pointer++] = new Formel(sub, neg);
  22.         } else {
  23.             DNF.wrongFormel();
  24.         }
  25.     }
  26.  
  27.     private void parse(String formel) {
  28.         // für das momentane Zeichen
  29.         char c;
  30.  
  31.         // Name einer Variablen
  32.         String var = "";
  33.         // eine mögliche Unterformel
  34.         String sub = "";
  35.  
  36.         // die Anzahl der Klammern
  37.         int countBrackets = 0;
  38.         // ob das folgende negiert werden soll
  39.         boolean neg = false;
  40.         // ob zuletzt eine Formel kam
  41.         boolean lastFormel = false;
  42.  
  43.         // alle Zeichen der Formel durchgehen
  44.         for (int i = 0; i < formel.length(); i++) {
  45.             // das momentane Zeichen
  46.             c = formel.charAt(i);
  47.             // es wurde bereits mindestens eine Klammer geöffnet
  48.             if (countBrackets > 0) {
  49.                 if (c == '(') {
  50.                     countBrackets++;
  51.                 } else if (c == ')') {
  52.                     countBrackets--;
  53.                     if (countBrackets == 0) {
  54.                         addFormel(sub, neg);
  55.                         lastFormel = true;
  56.                         sub = "";
  57.                         neg = false;
  58.                     }
  59.                 }
  60.                 if (countBrackets > 0) {
  61.                     sub += c;
  62.                 }
  63.             } else
  64.             // eine erste öffnende Klammer tritt auf
  65.             if (c == '(') {
  66.                 if (var.isEmpty() && !lastFormel) {
  67.                     countBrackets = 1;
  68.                 } else {
  69.                     DNF.wrongFormel();
  70.                 }
  71.             } else
  72.             // falls c ein Junktor ist
  73.             if ("~&|>:".indexOf(c) != -1) {
  74.                 if (!neg) {
  75.                     if (!var.isEmpty()) {
  76.                         addFormel(var, neg);
  77.                         var = "";
  78.                     }
  79.                     if (c == '~') {
  80.                         neg = true;
  81.                     } else if (junk == '-') {
  82.                         junk = c;
  83.                         if (junk == '>') {
  84.                             if (pointer == 0) {
  85.                                 DNF.wrongFormel();
  86.                             }
  87.                             aussage[0].negate();
  88.                             junk = '|';
  89.                         }
  90.                     } else {
  91.                         DNF.wrongFormel();
  92.                     }
  93.                     lastFormel = false;
  94.                 } else {
  95.                     DNF.wrongFormel();
  96.                 }
  97.             } else
  98.             // falls c eine a ist und eine Variable anfängt
  99.             if (c == 'a') {
  100.                 if (var.isEmpty()) {
  101.                     var = "a";
  102.                 } else {
  103.                     DNF.wrongFormel();
  104.                 }
  105.             } else
  106.             // falls c ein ' ist und ein Variable benennt
  107.             if (c == '\'') {
  108.                 if (!var.isEmpty()) {
  109.                     var += c;
  110.                 } else {
  111.                     DNF.wrongFormel();
  112.                 }
  113.             }
  114.         }
  115.  
  116.         if (countBrackets > 0) {
  117.             System.out.println(formel);
  118.             DNF.wrongFormel();
  119.         }
  120.         if (!var.isEmpty() && !formel.equals(var)) {
  121.             addFormel(var, neg);
  122.         }
  123.  
  124.         if (junk == ':') {
  125.             // hier müsste man noch die Äquivalenz rausrechnen...
  126.         }
  127.     }
  128.  
  129.     /*
  130.      * Public-Methoden
  131.      */
  132.     public String back() {
  133.         String ret = "";
  134.         if (negThis) {
  135.             ret += "~";
  136.         }
  137.         if (pointer == 0) {
  138.             ret += FORMEL;
  139.         } else if (pointer == 1) {
  140.             ret += aussage[0].back();
  141.         } else if (pointer == 2) {
  142.             ret += "(" + aussage[0].back() + junk + aussage[1].back() + ")";
  143.         }
  144.         return ret;
  145.     }
  146.  
  147.     public boolean calc() {
  148.         return false;
  149.     }
  150.  
  151.     public void negate() {
  152.         negThis = !negThis;
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment