=?us-ascii:iso-8859-2:utf-8?Q?=5Bnem-p?= =?us-ascii:iso-8859-2:utf-8?Q?l=5D_Rozszerzenia_-_my=C2=B6li_=3D=3Futf-8?= =?us-ascii:iso-8859-2:utf-8?B?P3E/PTIwbw==?= kompilacji?=

Lukasz Kaiser kaiser at tenet.pl
Wed Oct 29 00:03:10 CET 2003


Hej.
 
> No i właśnie mi też to wszystko sie wydaje trochę chore i raczej jest tylko 
> kwestiÄ… implementacji tego w kompilatorze. Bo w zasadzie "normalny" przypadek 
> jest taki, że powstaje taki graf wywolań wzajemnych rozszerzeń przez 
> rozszerzenia (byc moze z cyklami, bo jak pamietamy na poziomie rozszerzen sa 
> one zwyklymi funkcjami), ktory ma tez sciezki do wywolan zwyklych funkcji, 
> ktore jednak nie moga wywolac tamtych rozszerzen (bo jeszcze ich nie 
> skompilowalismy). Wszystko sprowadza sie do skompilowania tego calego grafu i 
> zaladowania do runtimeu, ew. wykrzaczenia sie, jesli sa zle cykle.

Nie ma cykli w wywolaniach rekurencyjnych rozszerzen bo one tam wystepuja
jako funkcje a nie rozszerzenia i nie ma problemu. Jesli zalozysz ze
nie uzywasz rozszerzen przed ich kompilacja i dolaczeniem jako plik to w
ogole te problemy powinny zniknac (chyba).

> W zasadzie z postaci tego co w srodku powinno wszystko wynikać (przecież 
> czytając zwykłe wyrażenia wszystko wiadomo

Eee, cos ty. Wiadomo, bo jest gramatyka jakas i parser wie co po czym
nastapi i jaki typ w gramatyce ma wyrazenie top-level. No a ty chcesz moc
w to rozszerzenie wlozyc zarowno [< x <- 3 >] jak i [< type foo = Bar >].
Moze rozszerzenie powinno moc miec rozne typy zaleznie od czesci kodu na
ktorej operuje ? To by moglo troche ulatwic.

> , a tu będzie po prostu wyrażenie 
> obudowane przez [< >]), ale z typowaniem zmiennych to będzie pewnie kosmos.

Hmm, jesli dodasz nowy znaczek to moze nie koniecznie. W koncu to cos
[< tutaj zwykly kod >] jesli tylko sie ten zwykly kod sparsuje, to sie
przelozy na drzewo skladniowe i mozesz tego uzyc jako stalego wzorca w
funkcji operujacej na drzewie skladniowym. Jesli dodasz nowy znaczek do
opisu zmiennych , np. $x lub ?x _i_ dopiszesz ich typ, tzn np. ?x : E_if
(lub jakas ladniejsza nazwa bazujac na gramatyce) to nie powinno byc az
takich problemow. Wtedy tez powinno dzialac [< x : ?t : type >] (hmm,
tylko sie dwukropki mieszaja miedzy jezykie a meta, trzeba jakis znaczek
na meta, moze [< x : $( t : type ) >] albo cos takiego ?). Jest jeszcze
chyba tak, ze w pewnych miejscach nie musisz podawac typu ale kompilator 
go zna i mozesz chiec go wydobyc (hmm, a moze tak nie jest, w sumie nie
wiem), ale to nie powinien byc problem jesli tylko mozesz podac ten typ i
umiescic tam meta-zmienna.

- lk




More information about the devel-pl mailing list