Mate zrejme na mysli, jaka je gramatika pro Python. Gramatika byvala LL(1), aktualne (od 3.9) je to neco, cemu se rika PEG, aby se zachovala citelnost gramatiky a zaroven obesla nektera omezeni LL(1) -- leva rekurze, nejednoznacnost pravidel.
Viz: https://peps.python.org/pep-0617/
BTW, v clanku o syntakticke analyze bych cekal alespon zminku o bezkontextovych gramatikach.
hmm potom se priznam ze nechapu, jak je mozny zpracovat list comprehension v LL(1), tam prece jeste u zpracovani "[x,y,z" vubec netusim, jestli je to seznam s prvky x, y, a z nebo zacatek nejakyho toho foru. Ale naposledy jsme to brali na skole, tak mi mozna neco uniklo nebo jsem to pustil z hlavy, to je pravdepodobny :)
Mezi otevírající závorkou a “for” je jeden neterminál, pokud je jeho gramatika LL(1), tak by to celé mělo být LL(1). Jde to snadno ověřit, stačí si napsat “recursive descent” pro tento fragment gramatiky a kouknout na použité “výhledy”. Přinejmenším v Julii to takto je, pokud Python nemá nějaký extrabuřt, bude to stejné.
Python od verze 3.9 nema CFG ale PEG, viz odkazovany https://peps.python.org/pep-0617/
INDENT/DEDENT resi tokenizer, takze s porusenim LL(1) nijak nesouvisi, protoze pro CFG (starsich pythonu, napr https://docs.python.org/3.7/reference/grammar.html) se jedna o neterminal.
EDIT: V druhem odstavci ma samozrejme byt:
"INDENT/DEDENT ... se jedna o terminal."
(puvodne jsem tam mel "nejedna se o neterminal", ale zdalo se mi to tak kostrbate, az jsem to napsal naopak :-D ).
K 10 let staremu filozofickemu prispevku, jestli byl Python context-free. Za me to je jedno, naprosta vetsina prekladacu programovacich jazyku pouziva nejake triky tohoto typu, aby parser mohl byt efektivni a gramatika se dala lidsky cist. Autor tam spravne pise, "Given this lexer, the parser is a context-free, LL(2) parser". Jen ma pocit, ze tokenizer je prilis chytry a v tom se neshodnem.
Nicmene, evidentne i autorum gramatiky Pythonu zacalo vadit, ze nektere syntakticke veci nemohou poresit v gramatice a musi je resit az o uroven vyse, proto zrejme presli na PEG.
5. 8. 2022, 08:43 editováno autorem komentáře