[nem-pl] Rozszerzenia
Lukasz Kaiser
kaiser at tenet.pl
Wed Oct 29 20:32:31 CET 2003
Hej.
> Tak, pewnie jednak kilka typów rozwazanych syntax tree trzebaby wprowadziæ.
> Bo ogolnie ja myslalem o tym co dostaja rozszerzeniajako o top-level
> wyrazeniach. Jednak rozszerzenia moga, czy to przez rekurencyjny rozklad
> drzewa, czy przez zaaplikowanie ich w jakies dziwne miejsca w kodzie, brac
> jako parametry pewne specyficzne czesci drzewa skladniowego.
Tak, dlatego musi pewnie byc pare typow.
> Wydaje sie, ze wprowadzenie kilku typow drzew (mniej wiecej wg gramatyki) i
> zabronienie uzywania ich w roznych dziwnych miejscach powinno rozwiazac
> problem interpretacji roznych napisow w [< >]. Jednak niestety parser nie ma
> pojecia o typach (a moze moglby miec?).
Hmm, parser doskonale wie jaki typ jako drzewo skladniowe bedzie mialo to
co on wlsnie parsuje. Wie, bo zna rozne czesci gramatyki a typy sa do nich
mniej wiecej 1-1. Ciekawe czy mniej czy wiecej ;).
> No wiec najprostsza wersja polegalaby na operowaniu czystym drzewm skladniowym
> ze wszystkimi jego konstruktorami, ktore wystepuja w kompilatorze/gramatyce.
> Wtedy funkcja wygladlaby
> ext f tr =
> match tr with
> E_Assign( va, x) -> E_Assign( f va, f x)
> E_Var(name, type) -> E_Var( name + "Old", type )
> E_Plus(a, b) -> E_Minus( f a, f b)
> ....
>
> Moze by wtedy tyle typo ile konstruktorow, zadenego problemu z parsowaniem,
> nieczym...
> Jest tylko jedno ale...
> Programista zastanowi sie 10 razy czy zabierac sie za pisanie powyzszej
> funkcji (szczegolnie jesli wziac cala mozliwa gramatyke jezyka i potrzebe
> zapoznania sie z konstruktorami)
> niz czegos w stylu:
> ...
Nie, programista nie zapozna sie z kompilatorem i nie napisze rozszerzen
jesli to tak zostawisz. Wtedy te rozszerzenia to zabawka dla developerow
Nemerle, maly maja wtedy sens.
> Klopot polega na tym, ze [< >] wymaga niezlego pomieszania jezyka z
> metajezykiem, ktore w rezultacie moze by efektywnie nieczytelne.
Musisz chyba oddzielic jezyk od metajezyka, np. uznac ze miedzy nawiasami
[< i >] wszystko co piszesz jest kodem, poza rzeczami
poprzedzonymi $( i konczocymi sie ), ktore sa wyrazeniami Nemerle.
Ale klopoty pewnie beda.
- lk
More information about the devel-pl
mailing list