QueryNode

Status
Nicht offen für weitere Antworten.
J

Janina

Gast
Hallo,

ich habe folgende Aufgabe bekommen:

Schreibe eine Klasse QueryNode, die aus einer Suchanfrage einen Anfragebaum aufbaut. Die Anfragesprache soll folgende Syntax haben:

ANFRAGE ::= "AND" "(" ANFRAGE ", " ANFRAGE ")" |
"OR" "(" ANFRAGE ", " ANFRAGE ")" |
"NOT" "(" ANFRAGE ")" |
"'" WORT "'" ;
WORT ::= BUCHSTABE { WORT } ;
BUCHSTABE ::= 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' |
'J' | 'K' | 'L' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' |
'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | 'a' | 'b' |
'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' |
'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' |
'u' | 'v' | 'w' | 'x' | 'y' | 'z' ;

Eine beispielhafte Anfrage könnte also zum Beispiel so aussehen:

AND('Java', NOT('Kaffee'))

---------------------------------

Also ich will keine fertigen Lösungen haben oder so, aber nur damit ihr wisst worum es geht habe ich das mal kopiert. Problem ist, dass bisher alles voll simple und verständlich für mich war und auf einmal kommt sowas und ich weiß garnicht was ich damit machen soll. Wie soll ich dem denn sagen, dass er aus der Anfrage einen Suchbaum machen soll. Verstege das nicht. Kann mir bitte jemand helfen... *verzweifelt*
 

Student

Top Contributor
ähem ... ich versteh das jetzt gerade gar nicht.
willst du mit SQL arbeiten oder wie?
 

Student

Top Contributor
also einen interpreter sozusagen?
ich verstehe nicht so ganz wo dann die daten herkommen sollen ..
 

Tobias

Top Contributor
Es geht - gleube ich - nicht darum auf wirklichen Daten zu arbeiten, sondern nur um die Visualisierung, in welcher Reihenfolge die Anfragebestandteile analysiert werden müssen.

Ich sehe folgendes:

Eine Anfrage besteht aus Anfragen, welche durch die Operatoren AND, OR und NOT verknüpft werden können. Die kleinste Menge einer Anfrage ist das WORT, welches wiederum aus Buchstaben besteht, welche aus der Menge des Alphabets kommen (diese Feststellung dient wohl nur der Klarheit).

Im Prinzip muss man eine gestellte Anfrage dahingehend zerlegen, dass man guckt, ob ein Anfragebestandteil weitere Klammern enthält. Ist das so, ist es eine weitere, zu interpretierende Anfrage, welche vor der umgebenden Anfrage ausgewertet werden muss.

Beispiel:

AND('Java', NOT('Kaffee')):

AND- Ausdruck auswerten: Menge aller Daten feststellen, die beide Teilmengen beinhalten. Teilmenge 'Java' ist ein Wort, keine weitere Analyse erforderlich, Teilmenge 'NOT('Kaffee') enthält Klammern, ist also ein zu interpretierender Operator - NOT-Ausdruck analysieren.

NOT-Ausdruck analysieren: Identifiziere alle Mengen, die nicht folgende Teilmenge haben: 'Kaffee'. 'Kaffee' enthält keine weiteren Klammern muss also nicht weiter ausgewertet werden - Rückgabe des Ergebnis an aufrufende Methode.

AND-Ausdruck: Finde alle Daten die Java enthalten und in der Teilmenge, die NOT zurückgeliefert hat, enthalten sind.

mpG
Tobias
 
J

Janina

Gast
Nein ich soll den selber schreiben. Überschrift ist "Parsen einer Anfrage". Ich frage mich wie ich den Anfragebaum machen soll. Im Beispiel sieht das so aus:

Ein QueryNode kann 0-2 andere QueryNodes als Kinder haben und vom Typ 'AND', 'OR', 'NOT' oder 'TERM' sein. Die Klasse soll sich selbst mit einer Methode toTree() rekursiv als Baum ausgeben können:

OR(AND(AND('Hot','Java'), NOT('Kaffee')), AND('Eclipse', 'Java'))

OR --- AND --- AND --- 'Java'
| | \-- 'Hot'
| \-- NOT --- 'Kaffee'
\-- AND --- 'Eclipse'
|
\-- 'Java'
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben