Voodoo Compiler jest implementacja języka programowania Voodoo. & Nbsp; język programowania Voodoo to język programowania niskiego poziomu, abstrahując nad instrukcją platformy ustawionej i konwencji wywołań, ale poza opuszczeniem programista bezpłatny zrobić cokolwiek.
Voodoo Compiler jest napisany w Ruby i generuje kod zgodny z i386, AMD64 i MIPS CPU. Wsparcie dla dodatkowych procesorów docelowej jest planowane na przyszłość.
Zastosowanie
Istnieją dwa główne sposoby korzystania z kompilatora Voodoo: uruchamiając program voodooc lub przy użyciu funkcji API Ruby.
Program voodooc kompiluje pliki źródłowe Voodoo. Jego użycie jest opisane w manpage voodooc.1, zawarte w dystrybucji. Oto przykład, jak voodooc może być używany do tworzenia plików wykonywalnych Witam w hello.voo pliku źródłowego:
$ Voodooc hello.voo
$ Cc hello.o -o witaj
$ ./hello
Witaj świecie!
Realizacja hello.voo można znaleźć w teście katalogów rozkładu.
Drugi sposób wykorzystania kompilator Voodoo jest używanie go z programu Ruby. Może to być wykorzystane na przykład do generowania kodu dla platformy docelowej, bez konieczności tworzenia pliku .voo. Oto przykład, który tworzy plik o nazwie fact.o obiektu, zawierający definicję funkcji, które oblicza na fakt silnię:
"voodoo" wymaga
Generator = Voodoo :: CodeGenerator.get_generator: Architektura =>: i386,
& Nbsp;: format =>: Elf
generator.export: fakt,
generator.add_function_label: fakt,
generator.add_function [: n],
& Nbsp; [: ifle, [: n, 1],
& Nbsp; # następnie
& Nbsp; [[: powrót, 1]],
& Nbsp; # indziej
& Nbsp; [[: pozwól,: x,: sub: n, 1],
& Nbsp; [: zestaw,: x, zadzwoń,: Fakt: x]
& Nbsp; [: powrót,: mul,: n: x]]]
File.Open ("fact.o ',' w ') {| plik_wy | generator.write plik_wy}
Voodoo kompilator API, które jest dostępne dla programów Ruby jest opisany w dokumentacji API
Co nowego w tym wydaniu:.
- < li> Zgodność z Ruby 1.9, oprócz Ruby 1.8; Test zgłasza się teraz liczbę nieudanych prób i przekazane.
- Test wielu-Vars został podzielony na wiele-args, wiele-args-ogon, i wiele-mieszkańcy.
Co nowego w wersji 1.0.1:
- W tej wersji dodano szereg usprawnień do parsera , które teraz donosi lokalizacje kodu źródłowego dla wszystkich błędów i może zgłosić wiele błędów wewnątrz bloków, funkcji i instrukcji warunkowych. Liczne testy dla parsera zostały dodane.
- To wydanie naprawia błąd składniowy na sprawozdanie następnie komentarze i problem, który spowodował awarię parser na pusty wejścia.
Co nowego w wersji 1.0.0:
- generator kodu ARM: Kompilator może teraz generować zespół i ELF kod obiektu dla architektury ARM.
- Ulepszone raportowanie błędów. Więcej błędów są wykrywane, a błędy są zgłaszane w łatwiejszy do zrozumienia komunikaty o błędach,
- Validator: ten nowy moduł może być używany do sprawdzania poprawności kodu wygenerowanego Voodoo. Jest on używany przez parser do sprawdzania poprawności kodu przeanalizowanych.
- Interfejs funkcji: funkcje realizacji może być sprawdzony zarówno programowo, a z linii poleceń .
Moduł
Co nowego w wersji 0.7.0:
- Bloki: zapewniają one zakresów, w których zmienne lokalne mogą być określona let. Takie zmienne występują od końca zestawienia let, aż do końca bloku. Bloki mogą występować w dowolnym miejscu, gdzie może wystąpić działanie. Są one rozpoczął i zakończył bloku bloku końcowego.
- Chained warunkowy: można teraz napisać & quot; else if & quot ;, a nie wymagające zagnieżdżone, jeśli w klauzuli else .
- Shift i obróć: przesunięcie działania (asr, BSR, SHL, SHR) i obracać działania (ROL, ROR) zostały dodane, .
- Powrót bez wartości: powrót może być teraz używane bez podania wyrażenie do oceny. Powoduje to, że wartość niezdefiniowana być zwracane z funkcji.
Co nowego w wersji 0.6.3:
- W tej wersji wprowadzono w-wyrażeń: poprzedzając etykieta, zmienna lokalna, lub całkowite z @, wartość jest traktowana jako adres, a słowo zapisane pod tym adresem jest zwracana.
- Dodatkowo, niektóre błędy zostały odkryte w sposób ciągi zostały zakodowane w wygenerowanego kodu montażu.
- Te błędy zostały poprawione, a teraz w wersji 0.6.3 obsługuje ciągi zawierające wszystkie 256 możliwych wartości bajtów poprawnie.
Co nowego w wersji 0.6.2:
- To wydanie naprawia błędy w implementacji usta- Słowo dla i386 i AMD64 i dodaje testów dla spraw, które wcześniej nie działały prawidłowo.
Komentarze nie znaleziono