[nem-pl] Mój plan
"Paweł W. Olszta"
Pawel.Olszta at adv.pl
Tue Nov 18 11:24:18 CET 2003
Witam,
w najbliższym czasie planuję przenieść to co napisałem do SVN'a. Będzie
trochę roboty z integracją.
Chciałbym to zrobić porządnie, więc zacznę od planu:
1. dodać typ 'char' i CHAR_LITERAL do leksera i parsera -- trzeba się
zastanowić, jak ma taki
literał wyglądać; zastanowić się jak ma wyglądać konwersja z int w char
i odwrotnie [w tej chwili
w mojej wersji prywatnej pisze się 'A' i lekser zamienia to na
NUMBER_LITERAL 65),
2. dodać do parsera ideę wyrażeń stałych -- niech upraszczanie dzieje
się w czasie parsowania,
to pozwoli na napisanie -1 w inicjalizatorze statycznej tablicy na ten
przykład [musiałem dodać do
leksera odpowiednią regułę żeby to zadziałało bo potrzebowałem do Jay'a,
a to błędne rozwiązanie].
Proponuję obsługiwać odpowiednie działania na typach prymitywnych: bool,
char, int, float i string.
3. dodać tablice jako native type, odpowiednie typowanie i indeksery na
tablicach. Pomyśleć
o tablicach wielowymiarowych i o tym w jaki sposób z array (int) związać
System.Array, tak żeby
dało się napisać:
class X {
public static _my_array : array (int) = <| 10; -1; 23+(5*7) |>;
public static Main () : void {
Console.WriteLine ("{0}", _my_array.Length);
}
}
gdzie _my_array.Length oznacza tutaj (_my_array : System.Array).Length.
4. dodać inicjalizację zmiennych statycznych, czyli:
class X {
public static _header : string = "Nemerle v0.1";
public static _my_array : array (int) = <| 10; -1; 23+(5*7) |>;
}
To działa, modulo punkt 2 (czyli wyrażenia stałe). Przy generatorze kodu
w C# to się robi łatwo dla
typów prymitywnych i tablic, dla skomplikowanych typów (np. list) i przy
generatorze do IL'a trzeba
będzie chyba te inicjalizacje wrzucać do konstruktora statycznego, ale
to nie będzie raczej trudne.
5. dodać properties do języka, słowa kluczowe get oraz set, to będzie
dosyć karkołomne, ale potrzebne
bo przy istniejącym generatorze raczej nie odwołamy się do żadnych
properties z Frameworka, a to boli.
6. dodać integrację z Frameworkiem i bibliotekami statycznymi. Przed
wczytywaniem DLL'i i analizowaniem
ich przez System.Reflection raczej nie uciekniemy, ale trzeba się
zastanowić czy do samego Frameworka
nie byłoby dobrze zrobić nagłówków -- pomijać w ten sposób mielenie tych
megabajtów bajtkodu za każdym
razem.
7. jak już będzie działać 1-6 oraz jak Michał doda matching po stałych
(czyli switch), to przerobić lexer.cs
i parser.jay do Nemerle [Jay'a już przerobiłem (skeleton, reader.c i
output.c), parser sie parsuje, w lekserze
jedna funkcja mi została, wczoraj wieczorem już nie miałem siły jej
dokończyć, ale poradziłem sobie bez
switch'a, co trochę bolało heh].
8. porządny system mejkfajlów, tak żeby się komplikowało wszystko pod
Cygwinem/.NET Framework SDK
Na pewno o wielu rzeczach tutaj zapomniałem, ale to tak na dobry początek.
--
Pawel W. Olszta
<olszta at adv.pl>
"No," said the elevator miserably, "of the future..."
More information about the devel-pl
mailing list