Nem tudom, mit jelent a "CF nyelv".
Az LL-t azért szeretik, mert sokkal könnyebb a parser generator-t megcsinálni, és mert a balrekurzió (állítólag) túlértékelt. (Pontosan nem emlékszem, hol olvastam -- vagy a wikipedia-ban, vagy valahol az ANTLR dokumentációjában.)
(Én csináltam LR(1) parser generator-t, ahol magát a nyelvtant is C-ben, függvényhívásokkal állítod össze, aztán megcsináltatod belőle a parser példányokat, amelyekbe aztán (akár párhuzamosan) töltöd bele az adatot, és amelyek hívogatják a redukcióknak megfelelő callback-eket. Sajnos borzasztóan elméletire sikerült a projekt -- funkcionálisan rendben lévőnek tűnt, de iszonyatosan lassú lett. Ha véletlenül érdekelne a kód (ne érdekeljen! :)), az ún. "honlapomon" megtalálod "edp" néven.)
Vannak általánosabb algoritmusok, de azoknak a futásideje rosszabb (O(n^2), O(n^3)). Az LL / LR "lényegében" lineáris az input szöveg hosszával; nincs backtrack.
A részletek már kicsit (nagyon ;)) homályosak, úgyhogy elnézést, ha baromságot írnék, de:
- LL-nél egy adott ponton vagy egyértelműen tudsz új szabály illeszteni (top-down), vagy terminálist elfogyasztani, vagy error-t kapsz; nincs backtrack. A szabályillesztés lehet "téves" is (a hiba az inputnak csak egy későbbi pontján derül ki), de ettől még gyors.
- LR-nél egy adott ponton vagy hibát kapsz, vagy shiftelsz (amely után esetleg több redukció is tüzel sorozatban, ezért neveztem úgy, hogy "lényegében" lineáris).
("n * log n"-es baromság törölve)
Egy általánosabb algoritmus pl. az http://en.wikipedia.org/wiki/Early_parser , a cikkelyben találsz linkeket továbbiakra.
Lásd még a bevezető szöveget itt: http://en.wikipedia.org/wiki/LR_parser