Datentypen Rekursiver Datentyp

DonMarcoHH

Aktives Mitglied
Moin,

ich hab wahrscheinlich eine ganze einfache Frage, aber ich hocke hier seit ner Stunde über dieser Frage und blockiere mich selber:
Ich will einen rekursiven Datentyp in dieser Form erstellen (zur Schachtelung von Quelltexten):
SourceCode = [Block]
Block = Block | Comment | Code
Code = [String]
Comment = [String]

Wie implementier ich so einen Datentyp in Java?
Bisher kam ich auf:
Java:
class SourceCode
class Block extends SourceCode
class Comment extends Block
class Code extends Block
Aber da fehlt mir ja noch die Rekursion, so dass ein Block aus 2 Blöcken der 2. Ebene bestehen kann, die wiederum Blöcke UND Kommentare haben.

Ich komm einfach nicht drauf...:bahnhof:
 

Haave

Top Contributor
Im Java 6 Übungsbuch hab ich dazu mal was gesehen, das sah ungefähr so aus:

Java:
public class Buch {
    Seite seite;
    private class Seite {
        Seite naechsteSeite;
    }
}

Ein Objekt der Klasse Seite hält also immer einen Verweis auf ein anderes Objekt der Klasse Seite (in diesem Fall die nächste Seite). Die so gefundene Seite hat wieder einen Verweis auf die nächste Seite und so weiter. Meinst du so?
 

DonMarcoHH

Aktives Mitglied
Ich habs jetzt erstmal so gelöst (obs funktioniert wird sich in den nächsten 3-4 Tagen herausstellen):
Java:
public class SourceCode {
Block root;
}
public class Block {
List<Block> block = new LinkedList<Block>();
}
public class Comment extends Block{
List<String> line = new LinkedList<String>();
}
public class Code extends Block{
List<String> line = new LinkedList<String>();
}

Somit ist SourceCode die RootDatei (das weisse Blatt), Block ist jeweils ein Block von Blöcken, Codelines oder Commentlines, die auch nebeneinander stehen können...
 

Michael...

Top Contributor
Statt direkte Vererbung würde ich hier eher ein Interface verwenden.
Comment und Code sind ja eigentlich nur Bestandteil eines Blocks und sollten selbst keine Subelemente vom Typ Block, Code oder Comment besitzen können.

Java:
interface BlockElement {...}

class Block implements BlockElement {
    List<BlockElement> elementList = new ArrayList<BlockElement>();
}

class Code implements BlockElement {
}

class Comment implements BlockElement {
}
 

DonMarcoHH

Aktives Mitglied
Statt direkte Vererbung würde ich hier eher ein Interface verwenden.
Comment und Code sind ja eigentlich nur Bestandteil eines Blocks und sollten selbst keine Subelemente vom Typ Block, Code oder Comment besitzen können.

Java:
interface BlockElement {...}

class Block implements BlockElement {
    List<BlockElement> elementList = new ArrayList<BlockElement>();
}

class Code implements BlockElement {
}

class Comment implements BlockElement {
}

Das gefällt mir... darauf hät ich auch kommen können. Mit etwas Abstraktion...
Man könnte auch aus BlockElement ne abstrakte Klasse machen, dort die List einbauen und den Rest stehen lassen!
 

Wildcard

Top Contributor
Würde ich mit EMF machen, da ist dann auch Mehrfachvererbung kein Problem.
Da du das ganze in einer Pseudogrammatik geschrieben hast:
Wenn es tatsächlich um eine Grammatik bzgw. einen Parser geht, dann nimm Xtext.
Xtext generiert dir aus einer solchen Grammatik direkt das EMF Modell, den Lexer, Parser, Linker und wenn du magst einen Eclipse Editor.
 

DonMarcoHH

Aktives Mitglied
Würde ich mit EMF machen, da ist dann auch Mehrfachvererbung kein Problem.
Da du das ganze in einer Pseudogrammatik geschrieben hast:
Wenn es tatsächlich um eine Grammatik bzgw. einen Parser geht, dann nimm Xtext.
Xtext generiert dir aus einer solchen Grammatik direkt das EMF Modell, den Lexer, Parser, Linker und wenn du magst einen Eclipse Editor.

Das ist keine Pseudogrammatik, sondern Haskell. :oops:
Eine Hinterlassenschaft meines Professors, der uns für die Programmierung von Datentypen mit Haskell getriezt hat, es uns aber nie beigebracht hat.

Und diese Grammatik ist bloss ein einfaches Datenmodell, für das was dahinter noch alles kommt. Nur ich kam auf diese einfache Komposition nicht so, wie ich sie haben wollte, aber der Vorschlag von Michael... kommt dem wohl sehr nah!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
H Rekursiver Aufruf Java Basics - Anfänger-Themen 8
S Rekursiver InsertionSort ohne Schleife Java Basics - Anfänger-Themen 7
K Methoden Fibonacci in Array mit rekursiver Methoden Java Basics - Anfänger-Themen 19
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
B Quadratwurzel nach Heron in rekursiver Darstellung Java Basics - Anfänger-Themen 1
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
W sysout in rekursiver methode Java Basics - Anfänger-Themen 4
A Rekursiver Pseudocode Java Basics - Anfänger-Themen 4
E Problem bei rekursiver Berechnung des Binomialkoeffizienten Java Basics - Anfänger-Themen 5
S Probleme bei Ausgabe von rekursiver Methode (List) Java Basics - Anfänger-Themen 16
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
O Faktorielle mit rekursiver Methode berechnen Java Basics - Anfänger-Themen 6
S Laufzeit bei rekursiver Methode messen Java Basics - Anfänger-Themen 6
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
S Werte von rekursiver Methode Java Basics - Anfänger-Themen 5
Q rekursiver algo. Java Basics - Anfänger-Themen 16
M Potenz mithilfe rekursiver Funktion Java Basics - Anfänger-Themen 13
F Rekursiver Algorithmus Java Basics - Anfänger-Themen 5
C Frage zu negativen und positiven Exponenten in rekursiver Methode Java Basics - Anfänger-Themen 11
G Rekursiver Aufruf einer JSP über eine JavaScript-Funktion Java Basics - Anfänger-Themen 5
G PRoblem mit rekursiver float additions methode Java Basics - Anfänger-Themen 9
B rekursiver Funktionsaufruf Java Basics - Anfänger-Themen 2
E fehlermeldung bei rekursiver grafik Java Basics - Anfänger-Themen 11
F Problem bei rekursiver Binärsuche Java Basics - Anfänger-Themen 2
T Rekursiver Algorithmus: Türme von Hanoi Java Basics - Anfänger-Themen 8
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
M Array mit komplexem Datentyp Java Basics - Anfänger-Themen 9
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
J Datentypen Datentyp für Datum Java Basics - Anfänger-Themen 23
B Java Bean, JSP, Komplexer Datentyp Java Basics - Anfänger-Themen 3
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
E Datentyp Array Java Basics - Anfänger-Themen 10
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
A Datentyp Char wird in BlueJ nur als leerer weißer Kasten dargestellt Java Basics - Anfänger-Themen 1
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
F Datentyp Number???? Java Basics - Anfänger-Themen 2
A einlesen, schreiben, umwandlung datentyp Java Basics - Anfänger-Themen 10
A Datentyp mit String festlegen? Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben