[nem-pl] Kilkla temacików
Michal Moskal
malekith at pld-linux.org
Sun Jan 4 11:49:06 CET 2004
On Sun, Jan 04, 2004 at 11:25:49AM +0100, Kamil Skalski wrote:
> Mam kilka kwestii do M., ale może napiszę tutaj:
> 1. Co myślicie o zmiennej liczbie parametrów do funkcji innych niż makra? Czy
> to w ogóle ma sens - w ciele trzeba operować na LIŚCIE parametrów, co robią
> tylko makra. Chyba żeby na siłę upychać w zwykłe funkcje trochę więcej
> możliwości, bo w sumie powinny sobie poradzić.
A patrzyłeś jak to jest zrobione w C#? Bo jest i pewnie powinno być tak
samo.
> 2. Jaką składnię do tego?
> Zgodnie z wprowadzaną przeze mnie w tej chwili konwencją dla makr, byłoby coś
> w stylu:
> macro printf (format : string_lit, args : list(parm)) {...}
> ale jeszcze nie wiemy czy te moje pomysły się sprawdzą i może
> macro printf (format : string_lit, ..args) {..}
J.w.
> 3. Jak zrobić wtyczkę do składni, rozbudowującą parser.
> Chciałbym napisać
> macro whilemacro (cond : expr, body : expr)
> syntax ("while", "(", cond, ")", body) {
> }
> (tzn. ja parsowanie wyrażeń 'syntax...' sobie zrobię, ale jak potem użyć ich
> treści do rozszerzenia parsera)
W parser.n:1764:
add_macro ("for", [GE_operator ("(");
GE_expression (); GE_operator (";");
GE_expression (); GE_operator (";");
GE_expression (); GE_operator (")");
GE_expression ()]);
Pewnie coś podobnego, tylko trzeba by tę funkcję wyeksportować.
> 4. Czy nie będzie problemu z tym, żeby te rozszerzenia zaczęły działać zanim
> kompilator rozpocznie parsowanie wyrażeń, w których będą występować
> konstrukcje 'while, ..' (pomijając że te makra muszą już istnieć od
> poprzedniej kompilacji)
Będzie problem... Widzę dwa wyjścia:
1. zabronić pisania i używania makr w tym samym pliku -- po prostu kazać
użytkownikowi najpierw skompilować makra, a potem załadować je do
kompilatora i używać
2. zrobić jakiś hack w parserze, że jak widzi "macro ... syntax ..." to
wtedy już dodaje regułę. problem: makra muszą być sparsowane przed
funkcjami, które z nich korzystają, o co musi zatroszczyć się
użytkownik (kolejność plików i funkcji w nich).
--
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h
More information about the devel-pl
mailing list