package main;
public class Formel {
private String FORMEL;
private Formel aussage[] = new Formel[2];
private short pointer = 0;
private char junk = '-';
private boolean negThis;
Formel(String formel, boolean neg) {
FORMEL = formel;
negThis = neg;
parse(formel);
}
/*
* Private-Methoden
*/
private void addFormel(String sub, boolean neg) {
if (pointer < 2) {
aussage[pointer++] = new Formel(sub, neg);
} else {
DNF.wrongFormel();
}
}
private void parse(String formel) {
// für das momentane Zeichen
char c;
// Name einer Variablen
String var = "";
// eine mögliche Unterformel
String sub = "";
// die Anzahl der Klammern
int countBrackets = 0;
// ob das folgende negiert werden soll
boolean neg = false;
// ob zuletzt eine Formel kam
boolean lastFormel = false;
// alle Zeichen der Formel durchgehen
for (int i = 0; i < formel.length(); i++) {
// das momentane Zeichen
c = formel.charAt(i);
// es wurde bereits mindestens eine Klammer geöffnet
if (countBrackets > 0) {
if (c == '(') {
countBrackets++;
} else if (c == ')') {
countBrackets--;
if (countBrackets == 0) {
addFormel(sub, neg);
lastFormel = true;
sub = "";
neg = false;
}
}
if (countBrackets > 0) {
sub += c;
}
} else
// eine erste öffnende Klammer tritt auf
if (c == '(') {
if (var.isEmpty() && !lastFormel) {
countBrackets = 1;
} else {
DNF.wrongFormel();
}
} else
// falls c ein Junktor ist
if ("~&|>:".indexOf(c) != -1) {
if (!neg) {
if (!var.isEmpty()) {
addFormel(var, neg);
var = "";
}
if (c == '~') {
neg = true;
} else if (junk == '-') {
junk = c;
if (junk == '>') {
if (pointer == 0) {
DNF.wrongFormel();
}
aussage[0].negate();
junk = '|';
}
} else {
DNF.wrongFormel();
}
lastFormel = false;
} else {
DNF.wrongFormel();
}
} else
// falls c eine a ist und eine Variable anfängt
if (c == 'a') {
if (var.isEmpty()) {
var = "a";
} else {
DNF.wrongFormel();
}
} else
// falls c ein ' ist und ein Variable benennt
if (c == '\'') {
if (!var.isEmpty()) {
var += c;
} else {
DNF.wrongFormel();
}
}
}
if (countBrackets > 0) {
System.out.println(formel);
DNF.wrongFormel();
}
if (!var.isEmpty() && !formel.equals(var)) {
addFormel(var, neg);
}
if (junk == ':') {
// hier müsste man noch die Äquivalenz rausrechnen...
}
}
/*
* Public-Methoden
*/
public String back() {
String ret = "";
if (negThis) {
ret += "~";
}
if (pointer == 0) {
ret += FORMEL;
} else if (pointer == 1) {
ret += aussage[0].back();
} else if (pointer == 2) {
ret += "(" + aussage[0].back() + junk + aussage[1].back() + ")";
}
return ret;
}
public boolean calc() {
return false;
}
public void negate() {
negThis = !negThis;
}
}
Comments