Voodoo Compiler merupakan implementasi dari bahasa pemrograman Voodoo & nbsp;. Bahasa pemrograman Voodoo adalah bahasa pemrograman tingkat rendah, abstrak atas instruksi platform mengatur dan memanggil konvensi, tetapi sebaliknya meninggalkan programmer bebas untuk melakukan apa-apa.
Voodoo Compiler ditulis dalam Ruby dan menghasilkan kode untuk i386-kompatibel, AMD64, dan MIPS CPU. Dukungan untuk sasaran tambahan CPU direncanakan untuk masa depan.
Penggunaan
Ada dua cara utama untuk menggunakan compiler Voodoo: dengan menjalankan program voodooc, atau dengan menggunakan Ruby API.
Program voodooc mengkompilasi file sumber Voodoo. Penggunaannya dijelaskan dalam manualnya voodooc.1, termasuk dalam distribusi. Berikut ini adalah contoh bagaimana voodooc dapat digunakan untuk membuat halo eksekusi dari hello.voo file sumber:
$ Voodooc hello.voo
$ Cc hello.o -o halo
$ ./hello
Halo Dunia!
Implementasi hello.voo dapat ditemukan dalam tes direktori distribusi.
Cara kedua untuk menggunakan compiler Voodoo adalah dengan menggunakannya dari program Ruby. Ini dapat digunakan, misalnya, untuk menghasilkan kode untuk platform target tanpa harus membuat file .voo. Berikut ini adalah contoh yang menciptakan sebuah file objek yang disebut fact.o, yang berisi definisi dari fakta fungsi yang menghitung faktorial:
membutuhkan 'voodoo'
Generator = Voodoo :: CodeGenerator.get_generator: arsitektur =>: i386,
& Nbsp;: format =>: elf
generator.export: Fakta
generator.add_function_label: Fakta
generator.add_function [: n],
& Nbsp; [: Ifle, [: n, 1],
& Nbsp; # lalu
& Nbsp; [[: kembali, 1]],
& Nbsp; # lain
& Nbsp; [[: biarkan,: x,: sub,: n, 1],
& Nbsp; [: set,: x,: call,: fakta,: x],
& Nbsp; [: kembali,: mul,: n,: x]]]
File.open ('fact.o', 'w') {| outfile | outfile generator.write}
Voodoo compiler API yang merupakan tersedia untuk program Ruby dijelaskan dalam dokumentasi API
Apa yang baru dalam rilis ini:.
- < li> Kompatibilitas dengan Ruby 1.9, selain Ruby 1.8; membuat tes sekarang melaporkan jumlah tes lulus dan gagal.
- Tes banyak-vars telah terpecah menjadi banyak-args, banyak-args-ekor, dan banyak-penduduk setempat.
Apa yang baru di versi 1.0.1:
- Versi ini menambahkan sejumlah perbaikan ke parser , yang kini melaporkan lokasi source code untuk semua kesalahan dan dapat melaporkan beberapa kesalahan dalam blok, fungsi, dan conditional. Beberapa tes untuk parser telah ditambahkan.
- Rilis ini memperbaiki kesalahan parse laporan diikuti oleh komentar dan masalah yang menyebabkan parser untuk gagal pada input kosong.
Apa yang baru dalam versi 1.0.0:
- kode ARM Generator: Compiler sekarang bisa menghasilkan perakitan dan kode objek ELF untuk arsitektur ARM.
- Peningkatan kesalahan pelaporan. Lebih banyak kesalahan yang terdeteksi, dan kesalahan dilaporkan dalam lebih mudah untuk memahami pesan error
- Validator: modul baru ini dapat digunakan untuk memvalidasi kode Voodoo yang dihasilkan. Hal ini digunakan oleh parser untuk memvalidasi kode parsing.
- antarmuka Fitur: fitur pelaksanaan dapat dilihat baik pemrograman dan dari baris perintah .
Modul
Apa yang baru dalam versi 0.7.0:
- Blok: ini memberikan cakupan yang variabel lokal dapat didefinisikan dengan membiarkan. Variabel tersebut ada dari akhir pernyataan membiarkan sampai akhir blok. Blok dapat terjadi di setiap tempat di mana suatu tindakan dapat terjadi. Mereka mulai dengan blok dan berakhir dengan ujung blok.
- conditional Chained: sekarang mungkin untuk menulis & quot; lain jika & quot ;, bukannya membutuhkan bersarang jika di lain klausa .
- Shift dan memutar: pergeseran tindakan (asr, BSR, shl, shr) dan memutar tindakan (rol, RoR) telah ditambahkan .
- Kembali tanpa nilai: return sekarang dapat digunakan tanpa menentukan ekspresi untuk mengevaluasi. Hal ini menyebabkan nilai terdefinisi untuk kembali dari fungsi.
Apa yang baru dalam versi 0.6.3:
- Rilis ini memperkenalkan di-ekspresi: Dengan awalan a label, variabel lokal, atau integer dengan @, nilai diperlakukan sebagai alamat, dan kata yang disimpan di alamat yang dikembalikan.
- Selain itu, beberapa bug yang ditemukan di jalan string yang dikodekan dalam kode assembly yang dihasilkan.
- bug ini telah diperbaiki, dan versi 0.6.3 kini menangani string yang berisi semua 256 nilai byte mungkin benar.
Apa yang baru dalam versi 0.6.2:
- Rilis ini memperbaiki bug dalam implementasi set- kata untuk i386 dan AMD64 dan menambahkan tes untuk kasus-kasus yang sebelumnya tidak bekerja dengan benar.
Komentar tidak ditemukan