G
Glassghost
Gast
Schönen guten Tag
vielleicht hab ich ja nur Tomaten auf den Augen oder aber das was ich will, geht prinzipiell nicht, mal sehen.
Ich versuch mich grad an nem eigenen Compiler. Habe (in etwa) für jedes Nonterminal meiner EBNF eine "accept-" Methode geschrieben, die dann für die Nonterminals auf ihrer rechten Regelseite wiederum die entsprechenden "accept-" Methode(n) aufruft, je nach Regel eben.
Um den Syntaxbaum aufzubauen, liefert jeder "accept-" Methode einen Knoten an den Aufrufer zurück, so dass sozusagen der Parent- Node die Verantwortung hat seine Kinderchen einzusammeln, in etwa so:
acceptCompileUnit
--> acceptComponent : ComponentNode
-------> acceptInterfaceList : InterfaceListNode
-------> acceptMember : MemberNode
------------> acceptType : TypeNode
...
Für jedes Nonterminal gibts ne eigene Node-class, die alle dasselbe IF (NodeIF) implementieren.
Okay, zunächst bin ich mir eben designtechnisch unschlüssig, ob es so gut ist, die Knoten über den Rückgabewert einzusammeln. Prinzipiell würd ich die Verantwortung schon gern in der Methode lassen, die zum Parent gehört, aber den Rückgabewert würd ich gern sinnvoller nutzen. Alternativ wärs eben auch denkbar, den Vater als Parameter mitzugeben und somit die Verantwortung an die "accept-" Methode des Kindknotens weiter zu geben.
Mein eigentliches Anliegen:
Im Moment hat jede konkrete Node - Klasse auch ihre getter / setter Methode(n) für die einzelnen Kindknoten. Was ich jetzt in erster Linie gern wissen würde: Gibt's ne Möglickeit in einem Interface etwa folgende Methode zu definieren:
und diese dann - bei Bedarf eben auch mehrfach - so zu implementieren (z.B. für meine Klasse ComponentNode):
Das es SO nicht geht, ist mir schon klar, aber ich wollt eben zum Ausdruck bringen, was ich gern hätte... hoffe das ist mir einigermaßen geglückt.
Vielen Dank für die Hilfe,
Bob
vielleicht hab ich ja nur Tomaten auf den Augen oder aber das was ich will, geht prinzipiell nicht, mal sehen.
Ich versuch mich grad an nem eigenen Compiler. Habe (in etwa) für jedes Nonterminal meiner EBNF eine "accept-" Methode geschrieben, die dann für die Nonterminals auf ihrer rechten Regelseite wiederum die entsprechenden "accept-" Methode(n) aufruft, je nach Regel eben.
Um den Syntaxbaum aufzubauen, liefert jeder "accept-" Methode einen Knoten an den Aufrufer zurück, so dass sozusagen der Parent- Node die Verantwortung hat seine Kinderchen einzusammeln, in etwa so:
acceptCompileUnit
--> acceptComponent : ComponentNode
-------> acceptInterfaceList : InterfaceListNode
-------> acceptMember : MemberNode
------------> acceptType : TypeNode
...
Für jedes Nonterminal gibts ne eigene Node-class, die alle dasselbe IF (NodeIF) implementieren.
Okay, zunächst bin ich mir eben designtechnisch unschlüssig, ob es so gut ist, die Knoten über den Rückgabewert einzusammeln. Prinzipiell würd ich die Verantwortung schon gern in der Methode lassen, die zum Parent gehört, aber den Rückgabewert würd ich gern sinnvoller nutzen. Alternativ wärs eben auch denkbar, den Vater als Parameter mitzugeben und somit die Verantwortung an die "accept-" Methode des Kindknotens weiter zu geben.
Mein eigentliches Anliegen:
Im Moment hat jede konkrete Node - Klasse auch ihre getter / setter Methode(n) für die einzelnen Kindknoten. Was ich jetzt in erster Linie gern wissen würde: Gibt's ne Möglickeit in einem Interface etwa folgende Methode zu definieren:
Code:
interface NodeIF {
void setChild(JoiNodeIF child);
}
und diese dann - bei Bedarf eben auch mehrfach - so zu implementieren (z.B. für meine Klasse ComponentNode):
Code:
public class ComponentNode implements NodeIF {
void setChild(JoiNodeInterfaceList child) {
this.ifList = child;
}
void setChild(JoiNodeMember child) {
this.member = child;
}
}
Das es SO nicht geht, ist mir schon klar, aber ich wollt eben zum Ausdruck bringen, was ich gern hätte... hoffe das ist mir einigermaßen geglückt.
Vielen Dank für die Hilfe,
Bob