Bahasa yang disukai : C / C ++, Java, dan Ruby.
Saya mencari beberapa buku / tutorial bermanfaat tentang cara menulis kompiler Anda sendiri hanya untuk tujuan pendidikan. Saya paling akrab dengan C / C ++, Java, dan Ruby, jadi saya lebih suka sumber daya yang melibatkan salah satu dari ketiganya, tetapi sumber daya yang bagus bisa diterima.
Jawaban:
Daftar Sumber Daya Besar:
Legenda:
sumber
Let's Build a Compiler
[ compilers.iecc.com/crenshaw/] , ini merupakan luncuran yang sangat bagus dan merupakan titik awal yang baik.Saya kira ini pertanyaan yang agak kabur; hanya karena kedalaman topik yang terlibat. Kompiler dapat didekomposisi menjadi dua bagian yang terpisah, namun; setengah atas dan bawah satu. Bagian atas umumnya mengambil bahasa sumber dan mengubahnya menjadi representasi perantara, dan bagian bawah menangani pembuatan kode platform spesifik.
Meskipun demikian, satu ide untuk cara mudah untuk mendekati topik ini (yang kami gunakan di kelas kompiler saya, setidaknya) adalah membangun kompiler dalam dua bagian yang dijelaskan di atas. Secara khusus, Anda akan mendapatkan ide bagus dari seluruh proses dengan hanya membangun setengah bagian atas.
Hanya dengan melakukan bagian atas, Anda bisa mendapatkan pengalaman menulis penganalisa leksikal dan pengurai dan membuat beberapa "kode" (representasi perantara yang saya sebutkan). Jadi itu akan mengambil program sumber Anda dan mengubahnya ke representasi lain dan melakukan beberapa optimasi (jika Anda mau), yang merupakan jantung dari sebuah kompiler. Setengah bagian bawah kemudian akan mengambil representasi perantara dan menghasilkan byte yang diperlukan untuk menjalankan program pada arsitektur tertentu. Misalnya, bagian bawah akan mengambil representasi perantara Anda dan menghasilkan PE yang dapat dieksekusi.
Beberapa buku tentang topik ini yang saya temukan sangat membantu adalah Prinsip dan Teknik Penyusun (atau Buku Naga, karena naga imut di sampul). Itu punya beberapa teori hebat dan pasti mencakup Tata Bahasa Bebas Konteks dengan cara yang benar-benar dapat diakses. Juga, untuk membangun penganalisis leksikal dan pengurai, Anda mungkin akan menggunakan * nix tools lex dan yacc. Dan tidak cukup menarik, buku berjudul " lex and yacc " mengambil di mana Dragon Book tinggalkan untuk bagian ini.
sumber
Saya pikir Implementasi Kompiler Modern dalam ML adalah teks penulisan kompiler pengantar terbaik. Ada versi Java dan versi C. juga, yang mana mungkin lebih mudah diakses mengingat latar belakang bahasa Anda. Buku ini mengemas banyak bahan dasar yang berguna (pemindaian dan penguraian, analisis semantik, catatan aktivasi, pemilihan instruksi, RISC dan pembuatan kode asli x86) dan berbagai topik "lanjutan" (kompilasi OO dan bahasa fungsional, polimorfisme, pengumpulan sampah, optimasi dan bentuk penugasan statis tunggal) ke dalam ruang yang relatif sedikit (~ 500 halaman).
Saya lebih suka Implementasi Kompiler Modern daripada buku Naga karena implementasi Kompiler Modern mensurvei lebih sedikit bidang - alih-alih memiliki cakupan yang sangat solid dari semua topik yang Anda perlukan untuk menulis kompiler yang serius dan layak. Setelah Anda mengerjakan buku ini, Anda akan siap untuk menangani makalah penelitian secara langsung untuk lebih mendalam jika Anda membutuhkannya.
Saya harus mengakui bahwa saya memiliki titik lemah yang serius untuk Konstruksi Kompilator Niklaus Wirth . Ini tersedia online dalam bentuk PDF. Saya menemukan estetika pemrograman Wirth cukup indah, namun beberapa orang menemukan gayanya terlalu minim (misalnya Wirth lebih menyukai parser keturunan rekursif, tetapi sebagian besar kursus CS fokus pada alat generator parser; desain bahasa Wirth cukup konservatif.) Konstruksi Kompiler adalah distilasi yang sangat ringkas. ide dasar Wirth, jadi apakah Anda suka gayanya atau tidak atau tidak, saya sangat merekomendasikan membaca buku ini.
sumber
Saya setuju dengan referensi Buku Naga; IMO, itu adalah panduan definitif untuk konstruksi penyusun. Bersiaplah untuk beberapa teori hardcore.
Jika Anda menginginkan buku yang lebih ringan dalam teori, Game Scripting Mastery mungkin buku yang lebih baik untuk Anda. Jika Anda seorang pemula total pada teori kompiler, itu memberikan pengantar yang lebih lembut. Itu tidak mencakup metode parsing yang lebih praktis (memilih untuk keturunan rekursif non-prediktif tanpa membahas parsing LL atau LR), dan seingat saya, itu bahkan tidak membahas teori optimisasi apa pun. Plus, daripada mengkompilasi ke kode mesin, itu mengkompilasi ke bytecode yang seharusnya dijalankan pada VM yang juga Anda tulis.
Ini masih layak dibaca, terutama jika Anda bisa mengambilnya dengan harga murah di Amazon. Jika Anda hanya ingin pengenalan yang mudah ke kompiler, Game Scripting Mastery bukanlah cara yang buruk untuk melakukannya. Jika Anda ingin menjadi hardcore di depan, maka Anda harus puas dengan tidak kurang dari Buku Naga.
sumber
"Ayo Bangun Kompiler" memang luar biasa, tapi agak ketinggalan jaman. (Saya tidak mengatakan itu membuatnya sedikit kurang valid.)
Atau periksa SLANG . Ini mirip dengan "Let's Build a Compiler" tetapi merupakan sumber yang jauh lebih baik terutama untuk pemula. Ini dilengkapi dengan tutorial pdf yang mengambil pendekatan 7 langkah untuk mengajar Anda seorang kompiler. Menambahkan tautan quora karena memiliki tautan ke semua berbagai port SLANG, di C ++, Java dan JS, juga interpreter dalam python dan java, yang aslinya ditulis menggunakan C # dan platform .NET.
sumber
Jika Anda mencari untuk menggunakan alat yang kuat, tingkat yang lebih tinggi daripada membangun semuanya sendiri, melalui proyek dan bacaan untuk kursus ini adalah pilihan yang cukup bagus. Ini kursus bahasa oleh penulis mesin Java parser ANTLR. Anda bisa mendapatkan buku untuk kursus sebagai PDF dari Programmer Pragmatis .
Kursus ini membahas hal-hal kompiler kompiler standar yang akan Anda lihat di tempat lain: parsing, pengecekan tipe dan tipe, polimorfisme, tabel simbol, dan pembuatan kode. Cukup banyak satu-satunya hal yang tidak tercakup adalah optimisasi. Tugas akhir adalah program yang menyusun subset dari C . Karena Anda menggunakan alat-alat seperti ANTLR dan LLVM, layak untuk menulis seluruh kompiler dalam satu hari (saya punya bukti keberadaan ini, meskipun maksud saya ~ 24 jam). Ini berat pada rekayasa praktis menggunakan alat modern, sedikit lebih ringan pada teori.
Ngomong-ngomong, LLVM benar-benar fantastis. Banyak situasi di mana Anda biasanya mengkompilasi ke perakitan, Anda akan jauh lebih baik mengkompilasi ke Representasi Menengah LLVM sebagai gantinya. Levelnya lebih tinggi, lintas platform, dan LLVM cukup bagus untuk menghasilkan perakitan yang dioptimalkan darinya.
sumber
Jika Anda punya sedikit waktu, saya sarankan "Compiler Construction" Niklaus Wirth (Addison-Wesley. 1996) , sebuah buku kecil kecil yang dapat Anda baca dalam sehari, tetapi ini menjelaskan dasar-dasarnya (termasuk bagaimana mengimplementasikan lexer, parser keturunan rekursif, dan mesin virtual berbasis tumpukan Anda sendiri). Setelah itu, jika Anda ingin menyelam dalam-dalam, tidak ada jalan lain di sekitar buku Naga seperti yang disarankan komentator lain.
sumber
Anda mungkin ingin melihat Lex / Yacc (atau Flex / Bison, apa pun yang Anda ingin menyebutnya). Flex adalah penganalisa leksikal, yang akan mengurai dan mengidentifikasi komponen semantik ("token") bahasa Anda, dan Bison akan digunakan untuk menentukan apa yang terjadi ketika setiap token diuraikan. Ini bisa, tetapi jelas tidak terbatas pada, mencetak kode C, untuk kompiler yang akan dikompilasi ke C, atau secara dinamis menjalankan instruksi.
FAQ ini seharusnya membantu Anda, dan tutorial ini terlihat cukup bermanfaat.
sumber
Secara umum, tidak ada tutorial lima menit untuk kompiler, karena ini adalah topik yang rumit dan menulis kompiler dapat memakan waktu berbulan-bulan. Anda harus melakukan pencarian sendiri.
Python dan Ruby biasanya ditafsirkan. Mungkin Anda ingin memulai dengan seorang juru bahasa juga. Secara umum lebih mudah.
Langkah pertama adalah menulis deskripsi bahasa formal, tata bahasa bahasa pemrograman Anda. Kemudian Anda harus mengubah kode sumber yang ingin Anda kompilasi atau tafsirkan sesuai dengan tata bahasa menjadi pohon sintaksis abstrak, bentuk internal dari kode sumber yang dipahami dan dapat dioperasikan oleh komputer. Langkah ini biasanya disebut parsing dan perangkat lunak yang mem-parsing kode sumber disebut parser. Seringkali parser dihasilkan oleh generator parser yang mengubah tata bahasa formal menjadi kode mesin sumber oder. Untuk penjelasan parsing yang baik dan non-matematis saya merekomendasikan Teknik Parsing - Panduan Praktis. Wikipedia memiliki perbandingan generator parser tempat Anda dapat memilih generator yang cocok untuk Anda. Bergantung pada generator parser yang Anda pilih,
Menulis parser untuk bahasa Anda bisa sangat sulit, tetapi ini tergantung pada tata bahasa Anda. Jadi saya sarankan untuk menjaga tata bahasa Anda tetap sederhana (tidak seperti C ++); contoh yang bagus untuk ini adalah LISP.
Pada langkah kedua pohon sintaksis abstrak ditransformasikan dari struktur pohon menjadi representasi perantara linier. Sebagai contoh yang baik untuk bytecode Lua ini sering dikutip. Tetapi representasi perantara benar-benar tergantung pada bahasa Anda.
Jika Anda membangun juru bahasa, Anda hanya perlu menafsirkan representasi perantara. Anda juga bisa melakukan kompilasi tepat waktu. Saya merekomendasikan LLVM dan libjit untuk kompilasi tepat waktu. Untuk membuat bahasa dapat digunakan, Anda juga harus memasukkan beberapa fungsi input dan output dan mungkin perpustakaan standar kecil.
Jika Anda akan mengkompilasi bahasa, itu akan lebih rumit. Anda harus menulis backend untuk arsitektur komputer yang berbeda dan menghasilkan kode mesin dari representasi perantara di backend tersebut. Saya merekomendasikan LLVM untuk tugas ini.
Ada beberapa buku tentang topik ini, tetapi saya tidak bisa merekomendasikan mereka untuk penggunaan umum. Kebanyakan dari mereka terlalu akademis atau terlalu praktis. Tidak ada "Ajari diri Anda menulis compiler dalam 21 hari" dan dengan demikian, Anda harus membeli beberapa buku untuk mendapatkan pemahaman yang baik tentang seluruh topik ini. Jika Anda mencari di internet, Anda akan menemukan beberapa buku online dan catatan kuliah. Mungkin ada perpustakaan universitas di dekat Anda tempat Anda dapat meminjam buku tentang kompiler.
Saya juga merekomendasikan latar belakang pengetahuan yang baik dalam ilmu komputer teoritis dan teori grafik, jika Anda ingin membuat proyek Anda serius. Gelar dalam ilmu komputer juga akan sangat membantu.
sumber
Lihatlah buku di bawah ini. Penulis adalah pencipta ANTLR .
Pola Implementasi Bahasa: Buat Bahasa Pemrograman Domain Anda Sendiri dan Khusus .
sumber
Satu buku yang belum disarankan tetapi sangat penting adalah "Linkers and Loaders" karya John Levine. Jika Anda tidak menggunakan assembler eksternal, Anda akan memerlukan cara untuk mengeluarkan file objek yang dapat ditautkan ke program akhir Anda. Bahkan jika Anda menggunakan assembler eksternal, Anda mungkin perlu memahami relokasi dan bagaimana seluruh proses pemuatan program bekerja untuk membuat alat yang berfungsi. Buku ini mengumpulkan banyak pengetahuan acak seputar proses ini untuk berbagai sistem, termasuk Win32 dan Linux.
sumber
Buku Naga jelas merupakan buku "kompiler bangunan", tetapi jika bahasa Anda tidak serumit generasi bahasa saat ini, Anda mungkin ingin melihat pola Interpreter dari Pola Desain .
Contoh dalam buku ini mendesain bahasa seperti ekspresi reguler dan dipikirkan dengan baik, tetapi seperti yang mereka katakan dalam buku, itu baik untuk memikirkan proses tetapi hanya benar-benar efektif pada bahasa kecil. Namun, jauh lebih cepat untuk menulis Penerjemah untuk bahasa kecil dengan pola ini daripada harus mempelajari semua jenis parser, yacc dan lex, dan sebagainya ...
sumber
Jika Anda ingin menggunakan LLVM, lihat ini: http://llvm.org/docs/tutorial/ . Ini mengajarkan Anda cara menulis kompiler dari awal menggunakan kerangka kerja LLVM, dan tidak menganggap Anda memiliki pengetahuan tentang subjek.
Tutorial menyarankan Anda menulis parser dan lexer Anda sendiri dll, tetapi saya menyarankan Anda untuk melihat ke dalam bison dan melenturkan setelah Anda mendapatkan ide. Mereka membuat hidup jadi lebih mudah.
sumber
Saya menemukan buku Dragon terlalu sulit untuk dibaca dengan terlalu banyak fokus pada teori bahasa yang tidak benar-benar diperlukan untuk menulis kompiler dalam praktek.
Saya akan menambahkan buku Oberon yang berisi sumber lengkap dari kompiler Oberon Project Oberon yang luar biasa cepat dan sederhana .
sumber
Saya ingat menanyakan pertanyaan ini sekitar tujuh tahun yang lalu ketika saya masih baru dalam pemrograman.
Saya sangat berhati-hati ketika saya bertanya dan mengejutkan saya tidak mendapatkan banyak kritik seperti yang Anda dapatkan di sini. Namun mereka mengarahkan saya ke arah " Buku Naga " yang menurut saya, buku yang sangat bagus yang menjelaskan semua yang perlu Anda ketahui untuk menulis kompiler (Anda tentu harus menguasai satu atau dua bahasa. bahasa yang Anda tahu, meriah.).
Dan ya, banyak orang mengatakan membaca buku itu gila dan Anda tidak akan belajar apa-apa darinya, tetapi saya sepenuhnya tidak setuju dengan itu.
Banyak orang juga mengatakan bahwa menulis kompiler itu bodoh dan tidak ada gunanya. Nah, ada sejumlah alasan mengapa pengembangan kompiler berguna:
Saya tidak langsung menulis kompiler sendiri, tetapi setelah bertanya saya tahu harus mulai dari mana. Dan sekarang, setelah mempelajari banyak bahasa yang berbeda dan membaca Buku Naga, menulis tidak terlalu menjadi masalah. (Saya juga belajar atm teknik komputer, tetapi sebagian besar yang saya tahu tentang pemrograman adalah otodidak.)
Sebagai kesimpulan, The Dragon Book adalah "tutorial" yang bagus. Tetapi luangkan waktu untuk menguasai satu atau dua bahasa sebelum mencoba menulis kompiler. Jangan berharap menjadi guru kompiler dalam dekade berikutnya atau lebih.
Buku ini juga bagus jika Anda ingin belajar cara menulis parser / juru bahasa.
sumber
Saya akan kedua http://compilers.iecc.com/crenshaw/ oleh @sasb . Lupakan membeli lebih banyak buku untuk saat ini.
Mengapa? Alat & bahasa.
Bahasa yang dibutuhkan adalah Pascal dan jika saya ingat dengan benar didasarkan pada Turbo-Pascal. Kebetulan jika Anda pergi ke http://www.freepascal.org/ dan mengunduh kompilator Pascal semua contoh bekerja langsung dari halaman ~ http://www.freepascal.org/download.var Hal indah tentang Gratis Pascal adalah Anda dapat menggunakannya hampir apa pun prosesor atau OS yang dapat Anda rawat.
Setelah Anda menguasai pelajaran kemudian mencoba lebih maju " Naga Buku " ~ http://en.wikipedia.org/wiki/Dragon_book
sumber
Saya mencari konsep yang sama, dan menemukan artikel yang menjanjikan ini oleh Joel Pobar,
Buat Kompiler Bahasa untuk .NET Framework - tidak yakin ke mana perginya ini
Buat Kompiler Bahasa untuk .NET Framework - salinan pdf dari dokumen asli
ia membahas konsep kompiler tingkat tinggi dan mulai menciptakan bahasa sendiri untuk kerangka kerja .Net. Meskipun ditujukan untuk Kerangka Bersih., Banyak konsep harus dapat direproduksi. Artikel tersebut mencakup:
ada topik lain, tetapi Anda mendapatkan keadilan.
Ini ditujukan untuk orang-orang yang memulai, ditulis dalam C # (tidak cukup Java)
HTH
tulang
sumber
Cara mudah untuk membuat kompiler adalah dengan menggunakan bison dan flex (atau serupa), membangun pohon (AST) dan menghasilkan kode dalam C. Dengan menghasilkan kode C menjadi langkah paling penting. Dengan menghasilkan kode C, bahasa Anda akan bekerja secara otomatis di semua platform yang memiliki kompiler C.
Membuat kode C semudah membuat HTML (cukup gunakan cetak, atau yang setara), yang pada gilirannya jauh lebih mudah daripada menulis parser C atau parser HTML.
sumber
Dari FAQ comp.compiler :
"Programming a Personal Computer" oleh Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5
Buku berjudul sayangnya ini menjelaskan desain dan penciptaan lingkungan pemrograman pengguna tunggal untuk micros, menggunakan bahasa seperti Pascal yang disebut Edison. Penulis menyajikan semua kode sumber dan penjelasan untuk implementasi langkah demi langkah dari kompiler Edison dan sistem operasi pendukung yang sederhana, semua ditulis dalam Edison sendiri (kecuali untuk kernel pendukung kecil yang ditulis dalam assembler simbolik untuk PDP 11/23; sumber lengkap juga dapat dipesan untuk PC IBM).
Hal-hal yang paling menarik tentang buku ini adalah: 1) kemampuannya untuk menunjukkan cara membuat kompiler dan sistem operasi yang lengkap, mandiri, bermanfaat, dan 2) diskusi menarik tentang desain bahasa dan masalah spesifikasi serta perdagangan off dalam Bab 2.
"Brinch Hansen on Compiler Pascal" oleh Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4
Satu lagi teori berat tentang pragmatik di sini adalah buku how to to code-it. Penulis menyajikan desain, implementasi, dan kode sumber lengkap untuk kompiler dan p-code interpreter untuk Pascal- (Pascal "minus"), subset Pascal dengan tipe boolean dan integer (tetapi tidak ada karakter, real, subranged atau enumerated type) , definisi konstan dan variabel serta tipe array dan record (tetapi tidak ada tipe pack, varian, set, pointer, tanpa nama, nama, atau file), ekspresi, pernyataan penugasan, definisi prosedur bersarang dengan nilai dan parameter variabel, jika pernyataan, sementara pernyataan, dan blok awal-akhir (tetapi tidak ada definisi fungsi, parameter prosedural, pernyataan dan label kebagian, pernyataan kasus, pernyataan berulang, untuk pernyataan, dan dengan pernyataan).
Compiler dan interpreter ditulis dalam Pascal * (Pascal "star"), subset Pascal yang diperluas dengan beberapa fitur gaya Edison untuk membuat sistem pengembangan perangkat lunak. Kompiler Pascal * untuk PC IBM dijual oleh pembuatnya, tetapi mudah untuk port-compiler Pascal buku ke platform Pascal yang nyaman.
Buku ini membuat desain dan implementasi kompiler terlihat mudah. Saya terutama menyukai cara penulis berkaitan dengan kualitas, keandalan, dan pengujian. Kompiler dan interpreter dapat dengan mudah digunakan sebagai dasar untuk bahasa yang lebih terlibat atau proyek kompiler, terutama jika Anda ditekan untuk dengan cepat mendapatkan sesuatu dan berjalan.
sumber
Anda harus memeriksa " ichbins " Darius Bacon , yang merupakan kompiler untuk dialek Lisp kecil, yang menargetkan C, hanya dalam lebih dari 6 halaman kode. Keuntungan yang dimilikinya dibandingkan kebanyakan kompiler mainan adalah bahasanya cukup lengkap sehingga kompiler dituliskan di dalamnya. (Tarbal juga menyertakan juru bahasa untuk mem-bootstrap hal itu.)
Ada lebih banyak hal tentang apa yang saya temukan berguna dalam belajar menulis kompiler di halaman web Ur-Scheme saya .
sumber
sumber
Kompiler LCC ( wikipedia ) ( beranda proyek ) ( github.com/drh/lcc ) dari Fraser dan Hanson dijelaskan dalam buku mereka "Kompiler C Retargetable: Desain dan Implementasi". Ini cukup mudah dibaca dan menjelaskan seluruh kompiler, hingga pembuatan kode.
sumber
Python dibundel dengan kompiler python yang ditulis dengan Python. Anda dapat melihat kode sumber, dan itu mencakup semua fase, dari parsing, pohon sintaksis abstrak, kode pemancar, dll. Retas.
sumber
Maaf, ini dalam bahasa Spanyol, tetapi ini adalah daftar pustaka dari kursus yang disebut "Compiladores e Intérpretes" (Penyusun dan Penerjemah) di Argentina.
Kursus ini dari teori bahasa formal ke konstruksi kompiler, dan ini adalah topik yang Anda butuhkan untuk membangun, setidaknya, kompiler sederhana:
sumber
Bukan buku, tetapi makalah teknis dan pengalaman belajar yang sangat menyenangkan jika Anda ingin tahu lebih banyak tentang kompiler (dan metacompiler) ... Situs web ini memandu Anda membangun sistem kompiler mandiri yang dapat mengkompilasi dirinya sendiri dan bahasa lain:
Tutorial: Metacompiler Bagian 1
Ini semua didasarkan pada makalah teknis 10 halaman kecil yang menakjubkan:
Val Schorre META II: Bahasa Penulisan Kompiler Berorientasi Sintaks
dari honest-to-god 1964. Saya belajar bagaimana membangun kompiler dari ini pada tahun 1970. Ada saat yang mengejutkan ketika Anda akhirnya memahami bagaimana kompiler dapat meregenerasi sendiri ....
Saya tahu penulis situs web dari masa kuliah saya, tetapi saya tidak ada hubungannya dengan situs web.
sumber
Saya juga menyukai tutorial Crenshaw , karena membuatnya sangat jelas bahwa kompiler hanyalah program lain yang membaca beberapa input dan menulis beberapa put out.
Membacanya.
Kerjakan jika Anda mau, tetapi kemudian lihat referensi lain tentang bagaimana kompiler yang lebih besar dan lebih lengkap benar-benar ditulis.
Dan baca On Trusting Trust , untuk mendapatkan petunjuk tentang hal-hal tidak jelas yang dapat dilakukan dalam domain ini.
sumber
Jika Anda tertarik untuk menulis kompiler untuk bahasa fungsional (bukan yang prosedural) Simon Peyton-Jones dan David Lester " Menerapkan bahasa fungsional: tutorial " adalah panduan yang bagus.
Dasar-dasar konseptual tentang bagaimana evaluasi fungsional bekerja dipandu oleh contoh-contoh dalam bahasa fungsional yang sederhana namun kuat yang disebut "Core". Selain itu, setiap bagian dari kompiler bahasa Core dijelaskan dengan contoh kode di Miranda (bahasa fungsional murni sangat mirip dengan Haskell).
Beberapa jenis kompiler dijelaskan tetapi bahkan jika Anda hanya mengikuti apa yang disebut kompiler template untuk Core, Anda akan memiliki pemahaman yang sangat baik tentang apa yang membuat pemrograman fungsional dicentang.
sumber
Anda bisa menggunakan BCEL oleh Yayasan Perangkat Lunak Apache. Dengan alat ini Anda dapat membuat kode assembler-like, tetapi Java dengan BCEL API. Anda dapat mempelajari cara menghasilkan kode bahasa perantara (dalam hal ini kode byte).
Contoh sederhana
Buat kelas Java dengan fungsi ini:
Sekarang jalankan BCELifier dengan kelas ini
Anda dapat melihat hasilnya di konsol untuk seluruh kelas (cara membuat kode byte MyClass.java). Kode untuk fungsinya adalah ini:
sumber
Ada banyak jawaban bagus di sini, jadi saya pikir saya hanya akan menambahkan satu lagi ke daftar:
Saya mendapat buku berjudul Project Oberon lebih dari satu dekade yang lalu, yang memiliki beberapa teks yang ditulis dengan sangat baik di kompiler. Buku ini sangat menonjol dalam arti bahwa sumber dan penjelasannya sangat mudah dibaca. Teks lengkap (edisi 2005) telah tersedia dalam pdf, sehingga Anda dapat mengunduh sekarang. Kompilator dibahas dalam bab 12:
http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf
Niklaus Wirth, Jürg Gutknecht
(Perawatannya tidak seluas buku tentang kompiler)
Saya sudah membaca beberapa buku tentang kompiler, dan saya bisa kedua buku naga, waktu yang dihabiskan untuk buku ini sangat berharga.
sumber
Sejauh ini tidak termasuk dalam daftar buku ini:
Dasar-dasar Desain Kompiler (Torben Mogensen) (dari departemen Ilmu Komputer, Universitas Kopenhagen)
Saya juga tertarik untuk belajar tentang kompiler dan berencana untuk memasuki industri itu dalam beberapa tahun mendatang. Buku ini adalah buku teori yang ideal untuk mulai belajar kompiler sejauh yang saya bisa lihat. Ini GRATIS untuk menyalin dan mereproduksi, ditulis dengan bersih dan hati-hati dan memberikannya kepada Anda dalam bahasa Inggris tanpa kode apa pun tetapi masih menyajikan mekanik melalui instruksi dan diagram dll. Layak untuk dilihat.
sumber