Hallo,
habe folgendes Problem ich möchte Aussagenlogische Formeln, wie z.B.
( 1 or ( 2 or a ) ) in Java auswerten und dann das Ergebnis als Hexadezimalwert zurück geben.
So, ich glaub ich hab mir die Arbeit nen bissel schwerer gemacht, da ich das mit Pattern versuche und vorher noch nie was damit gemacht habe. Es scheitert momentan schon daran die Formeln atomar darzustellen, sodass ich später ne Auswertung machen kann...
Das ganze soll nach dem Divide and Conquer Prinzip gelöst werden... hier mal mein ansatz:
[Java=1]package de.tda.einlesen;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
public class Einlesen {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while (line != null) {
line = reader.readLine();
if (line != null)
aussagenLogik(line);
// if (line != null)
// System.out.println(line);
}
}
public static void aussagenLogik(String line) {
Pattern p = Pattern.compile("([^()])(.*)");
Pattern p2 = Pattern.compile("[(]{1}(.*)[)]{1}");
Pattern p3 = Pattern.compile("([(]*)(.*)([)]*)");
Matcher m = p.matcher(line);
if (m.matches()) {
System.out.println(m.group(0));
} else {
m = p2.matcher(line);
if (m.matches()) {
aussagenLogik(m.group(1));
System.out.println(m.group(1));
} else {
m = p3.matcher(line);
if (m.matches()) {
aussagenLogik(m.group(1));
System.out.println(m.group(1));
}
}
}
}
}
[/Java]
So meine Fragen nun dazu:
1. Wieso geht die dritte IF-Bedingung nicht?
2. Wenn ich da weiterkomme wie zerlege ich die Formeln in atomare aussagen und ist es sinnvoll für die Operatoren and, or, not, implies, xor, iff enums einzuführen?
LG greenkohl23
habe folgendes Problem ich möchte Aussagenlogische Formeln, wie z.B.
( 1 or ( 2 or a ) ) in Java auswerten und dann das Ergebnis als Hexadezimalwert zurück geben.
So, ich glaub ich hab mir die Arbeit nen bissel schwerer gemacht, da ich das mit Pattern versuche und vorher noch nie was damit gemacht habe. Es scheitert momentan schon daran die Formeln atomar darzustellen, sodass ich später ne Auswertung machen kann...
Das ganze soll nach dem Divide and Conquer Prinzip gelöst werden... hier mal mein ansatz:
[Java=1]package de.tda.einlesen;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
public class Einlesen {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);
File file = chooser.getSelectedFile();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while (line != null) {
line = reader.readLine();
if (line != null)
aussagenLogik(line);
// if (line != null)
// System.out.println(line);
}
}
public static void aussagenLogik(String line) {
Pattern p = Pattern.compile("([^()])(.*)");
Pattern p2 = Pattern.compile("[(]{1}(.*)[)]{1}");
Pattern p3 = Pattern.compile("([(]*)(.*)([)]*)");
Matcher m = p.matcher(line);
if (m.matches()) {
System.out.println(m.group(0));
} else {
m = p2.matcher(line);
if (m.matches()) {
aussagenLogik(m.group(1));
System.out.println(m.group(1));
} else {
m = p3.matcher(line);
if (m.matches()) {
aussagenLogik(m.group(1));
System.out.println(m.group(1));
}
}
}
}
}
[/Java]
So meine Fragen nun dazu:
1. Wieso geht die dritte IF-Bedingung nicht?
2. Wenn ich da weiterkomme wie zerlege ich die Formeln in atomare aussagen und ist es sinnvoll für die Operatoren and, or, not, implies, xor, iff enums einzuführen?
LG greenkohl23