Materiały o budowie kompilatora, maszyny wirtualnej?

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Witajcie,
szukaliście kiedyś informacji o teorii, implementacjach kompilatorów, maszyn wirtualnych, parserów etc? Jeśli tak to jakie materiały (książki, strony, projekty) możecie polecić analizie? Na co zwrócilibyście tu uwagę? Ja z ciekawych rzeczy znalazłem póki co 'Compilers: principles, techniques, and tools' - Aho, Sethi, Ullman (czerwony smok).
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Nom, wiem, tylko właśnie szukam takiego w miarę prostego projektu, gcc to ok. 2.6mln linijek kodu (trunk), NASM ma 3.6tyś więc już lepiej, pewnie przeglądnę. Wcześniej myślałem nad Whitespace, to tylko ~300linijek.. ale napisane w Haskellu
<
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Co myślicie o tym jak zaimplementowałem maszynę wirtualną, do jej asemblera będzie kompilowany kod języka, który tworzę. Brak jeszcze kilku rzeczy (np. obsługa stringów) ale do obliczeń numerycznych jest jak najbardziej OK. Na końcu są przykładowe kody programów w jej asmie, które może wykonać.

Link: http://rgawron.megiteam.pl/2009/04/23/vm/
 

HKN

Użytkownik
Dołączył
Listopad 13, 2008
Posty
46
linie krzywe na 1 zdjeciu hehe.. ;D
co do reszty to super przejrzysty kod.
<
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Własny VM? Polecam przejrzeć źródła VirtualBox i QEMU..
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
http://code.google.com/p/l33tlang/

Wrzuciłem na google.code działający kod języka programowania o którym wspominałem (-> czasem działa, a czasem nie), jakbyście chcieli to możecie ściągnąć/przeglądnąć, podzielić się uwagami. Niedługo dopiszę dokumentację i jakiś kurs, no i kod dokończę.

Przykładowy (nie działający jeszcze) program do liczenia n liczb Fibonacciego:

Kod:
#  example program written in xxx
#  [url="http://rgawron.megiteam.pl/"]http://rgawron.megiteam.pl/[/url]
def fib (n x0 x1) {
    ass(tmp add(x0 x1))
    ass(x0 x1)
    ass(x1 tmp)
    # display new element on the screen
    say(tmp)
    # n--
    ass(n sub(n 1))
    # if n>0 count next element
    if(gtz(n) fib(n x0 x1))
}

def main () {
    ask(n)
    fibb(n 0 1)
}
 

superduper

Użytkownik
Dołączył
Maj 12, 2009
Posty
4
<div class='quotetop'>CYTAT(RobertG @ 8.05.2009, 13:17) <{POST_SNAPBACK}></div>
http://code.google.com/p/l33tlang/

Wrzuciłem na google.code działający kod języka programowania o którym wspominałem (-> czasem działa, a czasem nie), jakbyście chcieli to możecie ściągnąć/przeglądnąć, podzielić się uwagami. Niedługo dopiszę dokumentację i jakiś kurs, no i kod dokończę.

Przykładowy (nie działający jeszcze) program do liczenia n liczb Fibonacciego:

Kod:
#  example program written in xxx
#  [url="http://rgawron.megiteam.pl/"]http://rgawron.megiteam.pl/[/url]
def fib (n x0 x1) {
    ass(tmp add(x0 x1))
    ass(x0 x1)
    ass(x1 tmp)
    # display new element on the screen
    say(tmp)
    # n--
    ass(n sub(n 1))
    # if n>0 count next element
    if(gtz(n) fib(n x0 x1))
}

def main () {
    ask(n)
    fibb(n 0 1)
}
[/b]


A wiesz, ze "ass" znaczy "dupa"?

Kod:
    dupa(tmp add(x0 x1))
    dupa(x0 x1)
    dupa(x1 tmp)
 

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Wiem, w tym języku, ass to skrót od 'assign'. Nie widzę problemu.
 
Do góry Bottom