Vlákno názorů k článku Programovací jazyk TCL (2) od goox - " ... Ve skutečnosti k tomuto zpracování poznámek...

  • Článek je starý, nové názory již nelze přidávat.
  • 26. 7. 2005 15:37

    goox (neregistrovaný)
    " ... Ve skutečnosti k tomuto zpracování poznámek dochází už při načítaní programu lexikálním analyzátorem, to je však pouze užitečná pomůcka pro rychlejší běh programu. ..." Zpracovani poznamek jiz lexikalnim analyzatorem neni optimalizace pro rychlost, ale vicemene nutnost. Uvazujme, ze by napr. poznamka vypadala (ne nutne v TCL, obecne napr. v C) takto: prikazy ... // (sin(x) prikazy ... Po zpracovani tohoto radku by lex. an. roztrhal radek poznamky na: znak /, znak /, znak (, identifikator sin, znak (, ident. x, znak x, konec radku. Syntakticky analyzator je obvykle realizovan jako rekurzivni vnorovani do gramatiky jazyka, a tak by se textem poznamky automat zvytecne zanoril a pri tom by se prestavily ruzne ridici promenne. Nasledny rollback by byl velmi nepriemny, tak jako prekakovani lexikalnich jednotek by komplikovalo parser. Proto se poznamky odstranuji lex. analyzatorem vzdy. Dalsi duvod je ten, ze u mnoha jazyku existuji makra a ty nahrazuje lex. an. Kdyby nevedel, co je poznamka, nahrazoval by je i uvnitr poznamek.
  • 26. 7. 2005 15:49

    Pavel Tišnovský
    Zlatý podporovatel
    Ano, z pohledu vývojáře se opravdu poznámky zpracovávají už při lexikální analýze, v tom máte naprostou pravdu. Z pohledu programovacího jazyka Tcl jsem však chtěl říci, že poznámky není zapotřebí chápat jako speciální jazykovou konstrukci.

    Opět z pohledu Tcl (a dejme tomu ještě LISPu) je lexikální analyzátor velmi jednoduchý, zejména v porovnání s jazyky, které používají spoustu speciálních symbolů (C, Perl, atd.). Obecně je zapotřebí pouze rozlišit složené závorky, slova, řetězce (kvůli zpracování mezer) a speciální znaky uvozené zpětným lomítkem.

    Rollback je stejně jednoduchý, protože Tcl je řádkově orientovaný, tj. zpracovává se vždy celý řádek (trošku to komplikují konstrukce zapsané v { }, tam už to Lex samozřejmě nezvládne, ale to platí u všech jazyků používajících "rekurzivní" jazykové struktury).

    Jenom mě zaráží ty makra: vy je zpracováváte současně s lexikální analýzou? (neříkám že to nejde, spíš jsem nevěděl, že něco podobného - tj. kontextově závislého - například Lex zvládne).
  • 26. 7. 2005 17:31

    earl365 (neregistrovaný)
    Hmm.. s lexom som pracoval naposledy asi pred 4 rokmi, ale ak si dobre pamatam, nieco ako kontextovo senzitivne makra by sa tam robili dost obtiazne. Na druhej strane, nie je problem spravit vlastny lexer. Bisonu vela netreba, akurat vratit dalsi token.