Heute mal wieder etwas übers Programmieren, und wie seltsam manche APIs sein können ;-)
Wir (Wir heißt ich und der Rest meiner Gruppe) machen gerade die Übung für Compilerbau.
Wir müssen für das Erstellen von Lexer und Parser ANTLR als Generatortool benutzen. Das Tool selber ist recht nett, und mit antlr-works als GUI Frontend auch recht komfortabel zu benutzen.
So wir sind mittlerweile beim Generieren von intermediate code angelangt.
Unser Gedanke war, dass wir den abstract syntax tree [Link zu Wikipedia] in einen neunen Baum umwandeln, der den Baum des intermediate code repräsentiert.
So weit das Design.
Um einen Baum basteln zu können muss man einen TreeAdaptor [Link zur API Dokumentation] benutzen, der folgende Methode zum Anhängen eines neuen Baumes zum bestehenden bereitstellt:
void
addChild (Object t, Object child)
Jeder der so eine Signatur liest, und Java gewohnt ist (und es trotzdem nicht mag, aber das ist eine andere Geschichte ;-) )
Dent sich, dass der Parameter t wohl zwangsläufig in einen Tree gekap[selt sein muss und gecastet wird, und dass mit dem Parameter child ein neuer Tree gebastelt wird, denkste.
Beide Parameter (auch child!) werden in der betreffenden Implementation in einen Tree gecastet!
Und nein die Dokumentation (zu finden unter
steht auch nichts dazu, dazu muss man erst den Source lesen.
Wenn schon beide Parameter sowieso in Trees gecastet werden, warum, erwartet die Methode nicht gleich zwei Parameter vom Typ Tree ;-)
Nicht nur Software muss intuitiv zu benutzen sein, auch APIs, sollten diesem Grundsatz genügen ;-)
Keine Kommentare:
Kommentar veröffentlichen