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