Einen Parser von Hand schreiben (Recursive Descent)
Recursive Descent ist die zugänglichste Art, einen Parser zu bauen: eine Funktion pro Grammatikregel, Präzedenz fällt aus der Verschachtelung. Gezeigt an einem kleinen Taschenrechner.
ls -lt posts/ | grep #python
Recursive Descent ist die zugänglichste Art, einen Parser zu bauen: eine Funktion pro Grammatikregel, Präzedenz fällt aus der Verschachtelung. Gezeigt an einem kleinen Taschenrechner.
Der naive String-Zerteiler stößt bei 4d6kh3 an seine Grenzen. Wir trennen Tokenizer, Parser und Evaluator – unter Testschutz, der Regressionen sichtbar macht, aber nicht jede ungetestete Änderung erkennen kann.
Bevor die erste Zeile portiert wird, braucht der Port einen Richter: ein Harness, das die C++-Referenz auf festen Szenarien spielt und Verhalten statt Formatierung vergleicht. Teil 3 zeigt, wie es entsteht und warum es sich erst gegen die Referenz selbst beweisen muss.
Modifikatoren und mehrere Würfelgruppen. Die eigentliche Arbeit ist nicht der Code – den schreibt der Agent –, sondern die Edge Cases zu enumerieren und als parametrisierte Tests festzuhalten.
Bevor eine Zeile portiert wird, braucht es eine Karte: Welche der 71 C++-Dateien tun was, wovon hängen sie ab, und was davon wird portiert, ersetzt oder weggelassen? Teil 2 zeigt, wie der Agent diese Karte baut – und wo er beim ersten Versuch nach Dateinamen ging statt nach Inhalt.
Zufall, Zeit und I/O machen Tests schnell unzuverlässig. Wie Du externe Einflüsse per Dependency Injection, monkeypatch und tmp_path kontrollierst und Deine Logik deterministisch prüfst.
Aus dem Akzeptanzkriterium wird ein Prompt: Wir verallgemeinern auf NdM, schreiben mit einer kontrollierten Zufallsquelle den ersten exakten Test und lassen den Agenten die Schleife selbst drehen.
Legacy-Code ist nicht alter Code, sondern Code, den niemand mehr gern anfasst. Teil 1 erklärt, warum die Engine von Atlantis PbeM mit Claude Code nach Python wandert, warum „treu portieren" vor „neu erfinden" kommt – und wie das Projekt aufgesetzt ist, bevor die erste Zeile Spiellogik entsteht.
Ein KI-Agent ist nur so gut wie seine Feedback-Schleife. Teil 1 richtet das Projekt ein, schreibt den ersten roten Test für eine Würfel-Engine – und klärt gleich, wie man überhaupt Zufall testet.
Was hinter dem @ steckt: Funktionen sind Objekte, Closures verpacken Verhalten, functools.wraps erhält Metadaten – und Decorators werden damit alltagstauglich.