mezi zidli a klavesnici
Milan B.
milan na bastl.sk
Pondělí Únor 27 00:38:42 CET 2012
On 26.2.2012 22:04, Ales Prochaska wrote:
> To je právě to, že chudák céčko to samo neví :-) Dostalo to do vínku
> s poněkud bohémskou definicí jazyka. U LL1 jazyků se chyby zjišťují a
> lokalizují daleko snáze :-)
Lenze konkretne tento problem nie je sposobeny tym, ze by kompilator
nevedel lokalizovat miesto vyskytu chyby a uz vobec nie tym, ci je
gramatika LL(n) alebo LR(n). (mimochodom, mam dojem ze LR parsery su
presnejsie v detekcii chyb ako LL)
Problem je sposobeny vylucne tym, ze zdrojak v C ja na zaciatku
spracovavany preprocesorom, ktory rozvinie vsetky makra. a nahradi ich
len na urovni textu, bez nejakeho hlbsieho syntaktickeho skumania Toto
nie je problem len C, ale kazdeho jazyka (resp. kompilatora alebo
vyvojoveho systemu), ktory implementuje textovy rozvoj makier ako sucast
kompilacneho procesu - ak je chyba v definicia makra, tak kompilator
detekuje chybu v mieste jeho rozvoja ...
To, ze #define nie je definicia konstatny ale vseobecna definicia
textoveho makra, ktore sa rozvinie pred samotnou kompilaciou asi unika
mnohym ludom.
Takze ako uz niekto napisal, riadok sa rozvinie do podoby:
if ( DateTime.counter == 100;/2 )
a kompilator vypise chybu presne tam, kde je - na mieste bodkociarky,
ktora tam nema co hladat.
Ak niekomu chovanie dane vyuzivanim makroprocesora vadi, tak si moze
konstatnty (pre ordinalne typy) definovat ako
enum {
konstanta1=5,
konstanta2=100
};
Tam ked strcite omylom bodkociarku, tak kompilator presne prstom ukaze
na riadok, kde ta chyba je.
Ale cele tieto diskuzie su uplne o nicom. To je ako keby nejaky murar
tvrdil, ze stenu postavil krivo lebo ma kelnu s cervenou ruckou a nie s
modrou. Ak nejaky "programator" ma problem napisat spravne program len
preto, ze nejaky jazyk ma take alebo onake vlastnosti, tak by mal -
podobne ako murar, ktory si kelnou vybije oko trikrat za den -
porozmyslat o inej kariere.
-m-
> Ales Prochaska
>
Další informace o konferenci Hw-list