Got you!

So gehts also. Hätte ich auch mal eher drauf kommen können!

bei input “X+X+X” als Rekursiv Descent Parser:

(1) Probiere alle nicht-linksrekursiven Produktionen aus (e : ‘Y’, e : ‘X’)
(2) Parse tree merken (“X”)
(3) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für e vorherigen ParseTree ein (“X+X”)
(4) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für vorherigen ParseTree ein (“X+X+X”)
(5) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für vorherigen ParseTree ein (“X+X+X”), keine weitere Eingabe vorhanden
(6) Ergebnis: “X+X+X”

Es kann ja so einfach sein. Wieso denke ich so dümmlich kompliziert? Der Martin hat’s jedenfalls genauso gelöst.

Got’ya! Jetzt nur in eigenen Code gießen… 🙂

Das erklärt im übrigen auch normalizeleftrecursion()