[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