bir derleyici yazmak için öğrenme

oy
699

Tercih edilen diller : C / C ++, Java ve Ruby.

Eğitim amacıyla sadece kendi derleyici yazma konusunda bazı yararlı kitaplar / öğreticiler arıyorum. C / C ++, Java ve Ruby ile en tanıdık, bu yüzden o üç biri içeren kaynaklar tercih eder, ancak herhangi bir iyi bir kaynak kabul edilebilir.

Oluştur 04/08/2008 saat 23:46
kaynak kullanıcı
Diğer dillerde...                            


40 cevaplar

oy
1k

Kaynakların Büyük listesi:

Açıklama:

  • ¶ bir PDF dosyasına bağlantı
  • basılı bir kitaba $ Bağlantı
Cevap 04/08/2008 saat 23:52
kaynak kullanıcı

oy
69

Bu oldukça muğlak bir soru, ben düşünüyorum; sırf katılan konunun derinliğinin. Derleyici Fakat iki ayrı parça, ayrılacak olabilir; bir üst yarım ve bir alt-on. üst yarısı, genellikle kaynak dili alır ve bir ara temsil dönüştürür, ve alt yarısı platforma özel kod oluşturma ilgilenir.

Bununla birlikte, bu konuyu yaklaşmak için kolay bir yol için bir fikri (benim derleyiciler sınıfta kullanılan biri en az) Yukarıda açıklanan iki parçaya derleyici oluşturmaktır. Özellikle, sadece üst yarısını inşa ederek tüm süreç hakkında iyi bir fikir alırsınız.

Sadece üst yarısını yapıyor sen kelime analizörü ve ayrıştırıcı yazma ve bazı "kod" (Bahsettiğim ara temsil) üreten gitmek deneyimini elde etmenizi sağlar. Bu yüzden kaynak programı alıp başka temsil dönüştürmek ve bir derleyici kalbidir bazı optimizasyon (isterseniz), yapacağız. alt yarısı o ara temsilini almak ve belirli bir mimariye programı çalıştırmak için gerekli bayt üretecektir. Örneğin, alt yarısı ara temsil almak ve bir PE yürütülebilir oluşturacaktır.

Özellikle yararlı buldu Bu konuyla ilgili bazı kitaplar oldu Derleyiciler Prensipler ve teknikler (veya kapağında sevimli ejderha nedeniyle Ejderha Kitabı). Bazı büyük teori var ve kesinlikle gerçekten erişilebilir şekilde Bağlam-bağımsız gramerler kapsar ediyor. Ayrıca, kelime analizörü ve ayrıştırıcı oluşturmak için, muhtemelen * nix araçları lex ve yacc kullanacağız. Ve uninterestingly yeterli "adı verilen kitap lex ve yacc Ejderha Kitap bu bölümü için bıraktığı yerden" aldı.

Cevap 21/07/2009 saat 00:01
kaynak kullanıcı

oy
54

Bence ML Modern Derleyici Uygulama iyi tanıtım derleyici yazma metindir. Bir var Java sürümü ve C versiyonu da diller arka plan verilen daha erişilebilir olabilir, bunlardan herhangi biri de. Kitap kullanışlı temel malzemesi (tarama ve ayrıştırma, anlamsal çözümleme, aktivasyon kayıtları, talimat seçimi, RISC ve x86 yerel kod nesil) ve çeşitli "ileri" konulardaki (OO ve fonksiyonel dilleri, polimorfizm, çöp toplama, optimizasyon ve derleme bir sürü paketleri nispeten küçük bir alan (~ 500 sayfa) içine tek statik atama formu).

bunun yerine ciddi bir, iyi derleyici yazmak için ihtiyaç duyduğu tüm konuların gerçekten sağlam bir kapsama sahiptir - Modern Derleyici uygulama araştırmaları alanının daha az çünkü Ejderha kitaba Modern Derleyici Uygulama tercih ederim. Bu kitap aracılığıyla işe sonra bunu gerekirse daha derinlemesine için doğrudan araştırma kağıtları mücadele için hazır olacaksınız.

Ben Niklaus Wirth'in için ciddi bir zaafı var itiraf etmeliyim Derleyici İnşaat. Öyle çevrimiçi kullanılabilir PDF olarak. Derleyici İnşaat çok az ve öz damıtma olduğu; ben ancak bazı insanlar (Wirth'in dil tasarımları oldukça tutucu. Örneğin Wirth özyinelemeli kökenli ayrıştırıcıları kabul eder, ama çoğu CS kursları ayrıştırıcı jeneratör araçları odaklanmak) çok az onun stili bulmak, Wirth'in programlama estetik sadece güzel bulmak yüzden ister Wirth'in temel fikirlerin, sen çok bu kitap okuma tavsiye tarzını ya da değil ya da değil gibi.

Cevap 10/08/2008 saat 08:54
kaynak kullanıcı

oy
45

Ben Ejderha Kitap atfen hemfikir; IMO, inşaat derleyici için kesin bir kılavuzdur. olsa da, bazı hardcore teorisi için hazır olun.

Eğer teori üzerine hafif bir kitap istiyorsanız, Oyun komut dosyası ustalık sizin için daha iyi bir kitap olabilir. Eğer derleyici teoriye toplam acemi iseniz, bu nazik bir giriş sağlar. O (LL veya LR ayrıştırma konuşmadan olmayan öngörü özyinelemeli iniş için tercih) daha pratik ayrıştırma yöntemleri kapsamaz ve hatırladığım kadarıyla, hatta optimizasyon teorisinin herhangi bir tür tartışmak değil. Artı, bunun yerine makine koduna derleme, bu da yazma bir VM üzerinde çalışması beklenen bir bayt kodu derler.

Bu Amazon üzerinde ucuz alabilirsin, özellikle hala iyi bir okuma. Yalnızca derleyicilerine kolay giriş istiyorsanız, Oyun komut dosyası Ustalık gitmek için kötü bir yol değildir. Eğer sert ön gitmek isterseniz, o zaman Ejderha Kitabı daha azına razı olmalıdır.

Cevap 05/08/2008 saat 00:08
kaynak kullanıcı

oy
28

"Biraz Compiler Kuralım" harika, ama biraz modası geçmiş bulunuyor. (Ben bile biraz daha az geçerli kılan demiyorum.)

Ya kontrol argo . Bu "en bir Compiler Kuralım" benzer ancak çok daha iyi bir kaynak başlayanlar için özellikle olduğunu. Bu size bir derleyici öğretim bir 7 adım yaklaşım pdf öğretici ile birlikte geliyor. Nisapları bağlantısı eklemek başlangıçta C # ve .NET platformu kullanılarak yazılmıştır C ++, Java ve JS argo tüm çeşitli portlar, piton ve java da tercüman, bağlantılar var olarak.

Cevap 04/08/2008 saat 23:56
kaynak kullanıcı

oy
24

Bunun yerine bina daha güçlü, daha yüksek düzey araçları kullanmak arıyorsanız şeyi kendiniz için proje ve okumalar geçiyor bu kurs oldukça iyi bir seçenektir. Bu Java ayrıştırıcı motoru antlr yazarı tarafından bir dil kursu var. Sen PDF olarak kursa kitap alabilirsiniz Pragmatik Programcılar .

Ayrıştırma, türleri ve tür denetimi, polimorfizm, sembol tabloları ve kod oluşturma: Tabii standart başka bir yerde görmek istiyorum derleyici derleyici şeyler üzerinde gider. Hemen hemen kapsamında değildir tek şey optimizasyonlar olduğunu. Bitirme projesi bir programdır C bir alt kümesini derler . Eğer antlr ve LLVM gibi araçları kullanmak için, tek bir gün (ı ~ 24 saat ne anlama olsa, bunun bir varlığı kanıtı var) içinde bütün derleyici yazmak için mümkün bu. Bu teoriye biraz daha hafif ve modern araçları kullanarak pratik mühendislik üzerine ağır.

LLVM, bu arada, sadece harika. Normalde montaj aşağı derlemek olabilecek birçok durum, size derleme çok daha iyi olurdu LLVM en Intermediate Temsil yerine. Bu üst düzey, çapraz platform, ve LLVM ondan optimize takımını oluşturmada oldukça iyi.

Cevap 05/08/2008 saat 00:13
kaynak kullanıcı

oy
20

Eğer biraz zaman varsa, ben tavsiye Niklaus Wirth'in "Derleyici İnşaat" (Addison-Wesley. 1996) , bir gün içinde okuyabilir minik bir kitapçık, ancak lexers, özyinelemeli kökenli ayrıştırıcıları nasıl uygulanacağını dahil olmak üzere temel (açıklıyor ve kendi yığın tabanlı sanal makineler). Eğer daha derin bilgilere istiyorsanız diğer yorum yapanlar önerdiği gibi Bundan sonra Dragon kitabın etrafında yolu yoktur.

Cevap 29/08/2010 saat 00:14
kaynak kullanıcı

oy
17

Sen (onları aramak istediğini veya Flex / Bison) Lex / Yacc içine bakmak isteyebilirsiniz. Flex ayrıştırmak ve dilin ( "belirteçleri") semantik bileşenlerini tanımlayacaktır bir sözel çözümleyici, ve Bison her belirteç ayrıştırılır ne olacağını tanımlamak için kullanılacaktır. Bu olabilir, ama kesinlikle C derlemek, veya dinamik talimatları çalıştıran olacak bir derleyici, C kodu çıktısını, bunlarla sınırlı değildir.

Bu SSS size yardımcı olmalı ve bu öğretici oldukça kullanışlı görünüyor.

Cevap 20/07/2009 saat 23:47
kaynak kullanıcı

oy
16

karmaşık bir konu olduğunu ve bir derleyici yazma aylar alabilir çünkü Genel olarak konuşmak gerekirse, derleyici için bir beş dakika öğretici var. Kendi arama yapmak zorunda kalacaktır.

Python ve Ruby genellikle yorumlanır. Belki de bir tercüman ile başlamak istiyorum. Genellikle daha kolay.

İlk adım bir resmi dil açıklama, programlama dilinin gramerini yazmaktır. O zaman derlemek veya soyut bir sözdizimi ağacının, bilgisayar anlar ve üzerinde çalışabilir kaynak kodunun bir iç forma gramer göre yorumlamak istediğiniz kaynak kodunu çevrilmesi gereklidir. Bu adım genellikle ayrıştırma ve kaynak kodu bir ayrıştırıcı denir ayrıştırır yazılım denir. Genellikle ayrıştırıcı kaynak oder makine koduna resmi dilbilgisi dönüşümü ayrıştırıcı jeneratörü tarafından oluşturulur. ayrıştırma iyi olmayan matematiksel bir açıklama için ben Ayrıştırma Teknikleri tavsiye - Pratik Bir Rehber. Vikipedi sizin için uygun olduğunu birini seçebileceği ayrıştırıcı jeneratörleri bir karşılaştırmasını vardır. Seçtiğin ayrıştırıcı jeneratör bağlı olarak,

Diliniz için ayrıştırıcı yazma çok zor olacak, ama bu gramer bağlıdır olabilir. Bu yüzden (C ++ aksine) basit dilbilgisi tutmak önermek; bunun için iyi bir örnektir LISP olduğunu.

İkinci aşamada soyut sözdizimi ağacı doğrusal ara temsili bir ağaç yapısı dönüştürülür. Bu Lua en baytkoduna için iyi bir örnek olarak sıklıkla gösterilen. Ama ara gösterimi gerçekten diline bağlıdır.

Eğer bir tercüman bina varsa, sadece ara temsil yorumlamak gerekecektir. Ayrıca bunu sadece zamanında-derlemek olabilir. Sadece-in-time-derleme için LLVM ve libjit öneriyoruz. dil kullanışlı hale getirmek için ayrıca bazı giriş ve çıkış fonksiyonlarını ve belki küçük bir standart kütüphane gerekecektir.

Eğer dil derlemek için gidiyoruz, bu daha karmaşık olacaktır. Farklı bilgisayar mimarileri için arka uçları yazmak ve bu backends içinde ara gösteriminden makine kodu oluşturmak zorunda kalacaktır. Bu görev için LLVM önerilir.

Orada bu konu hakkında birkaç kitap vardır, ama genel kullanım için bunların hiçbirine tavsiye edebilir. Bunların çoğu çok akademik veya çok pratiktir. Hiçbir dolayısıyla, bu bütün konunun iyi anlamak için birkaç kitap satın almak zorunda kalacak "Kendinizi 21 gün içinde yazılı derlemek öğret" var. İnternet'te arama yaparsanız, çevrimiçi kitap ve ders notları bazı bazı rastlamak olacaktır. Belki derleyicilerde kitap ödünç da yakınınızdaki bir üniversite kütüphanesi var.

Eğer proje ciddi yapacağız eğer ben de teorik bilgisayar bilimi ve grafik teoride iyi bir arka plan bilgisine önerilir. bilgisayar bilimi bir derece de yararlı olacaktır.

Cevap 21/07/2009 saat 11:37
kaynak kullanıcı

oy
14

Aşağıda kitaptan bir göz atın. Yazar yaratıcısı olan antlr .

Dil Uygulama Desenler: Kendi Alan Özgü ve Genel Programlama Dilleri oluşturun .

alt metni

Cevap 18/05/2010 saat 00:38
kaynak kullanıcı

oy
11

Bir kitap henüz önerdi ama çok önemli değil "Bağlayıcı ve Yükleyiciler" John Levine tarafından. Harici assembler kullanmıyorsanız, çıkışa son programa bağlantılı olabilir bir nesne dosyası bir yola gerek vardır. Harici bir assembler kullanıyorsanız bile, muhtemelen relocations anlamak gerekir ve tüm program yükleme işlemi bir çalışma aracını yapmak için nasıl çalıştığını. Bu kitap Win32 ve Linux dahil olmak üzere çeşitli sistemler için bu sürecin etrafında rasgele irfan de toplar.

Cevap 18/08/2008 saat 21:18
kaynak kullanıcı

oy
10

Gerçekten pratikte bir derleyici yazmak için gerekli değildir dil teorisi üzerine çok fazla odaklanarak okumak için çok çok zor Ejderha kitabı buldum.

Ben eklersiniz Oberon inanılmaz hızlı ve basit Oberon derleyici tam kaynağını içeren kitabı Projesi Oberon .

Alternatif metin

Cevap 09/08/2010 saat 19:33
kaynak kullanıcı

oy
10

Eğer LLVM kullanmaya istekli iseniz, bu check out: http://llvm.org/docs/tutorial/ . Bu nasıl LLVM çerçevesini kullanarak sıfırdan bir derleyici yazmak için öğretir ve konu ile ilgili herhangi bir bilgiye sahip üstlenmez.

öğretici vb kendi ayrıştırıcı ve lexer yazmak önermek, ama bizon içine bakmak ve anladınız kez esnemeye öneriyoruz. Onlar hayatı daha kolay hale getirmektedir.

Cevap 20/08/2008 saat 11:01
kaynak kullanıcı

oy
10

Ejderha Kitabı kesinlikle "yapı derleyiciler" kitabı, ancak dil dillerinin şimdiki nesil olarak oldukça karmaşık değilse, içinden Tercüman şekline bakmak isteyebilirsiniz Tasarım Kalıpları .

Kitapta örnek bir normal ifade benzeri bir dil tasarlayan ve iyi düşünülmüş, ancak bunlar kitapta söyledikleri gibi, bu süreç boyunca düşünme için iyidir ama sadece küçük dillerde gerçekten etkilidir. Ancak, ayrıştırıcılar, yacc ve lex, vesaire hakkında tüm farklı türde öğrenmek zorunda daha bu desenli küçük bir dil için bir Yorumcuyu yazmak için çok daha hızlıdır ...

Cevap 05/08/2008 saat 17:16
kaynak kullanıcı

oy
9

Ben programlama için oldukça yeni iken yaklaşık yedi yıl önce bu soruyu soran hatırlıyorum. Ben sordum ve burada alıyorsanız olarak şaşırtıcı eskisi kadar eleştiri almadım zaman çok dikkatli idi. Onlar ancak "yönünde beni işaret etti Ejderha Kitabı Bence, bir derleyici (tabii bir dil ya da iki master olacak yazmayı bilmeniz gereken her şeyi açıklıyor gerçekten büyük kitapta". Daha diller,, merrier biliyorum.).

Ve evet, birçok kişi o kitabı okurken deli olduğunu ve ondan ogrenemezsiniz, ama bununla tamamen katılmıyorum söylüyorlar.

Birçok kişi de derleyiciler yazma aptal ve anlamsız olduğunu söylüyorlar. derleyici geliştirme yararlı olmasının nedeni Eh, birkaç nedeni vardır: - bu zevkli. - derleyiciler yazmayı öğrenme zaman eğitici, bilgisayar bilimi ve diğer uygulamaları yazarken yararlıdır diğer teknikler hakkında çok şey öğreneceksiniz. - kimse derleyiciler yazdı mevcut diller iyisi olamazdı ederim.

Bunu hemen kendi derleyici yazmadım, fakat nereden başlayacağını soran sonra ben biliyordum. Ve şimdi, birçok farklı dil öğrenme ve Ejderha Kitabı okuduktan sonra, yazma bir sorun o kadar değil. (Ben de bilgisayar mühendisliği atm okuyorum ama programlama hakkında bildiklerimizi en öz öğretilir.)

Sonuç olarak: - Ejderha Kitabı büyük bir "öğretici" dir. Ama bir derleyici yazmaya başlamadan önce bir dil ya da iki mastering biraz zaman geçirin. önümüzdeki on yıl ya da öylesine olsa içinde bir derleyici gurusu olmak beklemeyin.

Eğer ayrıştırıcıları / tercümanlar yazma öğrenmek istiyorsanız kitabı da iyidir.

Cevap 06/08/2009 saat 23:37
kaynak kullanıcı

oy
9

Ben, aynı kavram içine bakarak ve Joel Pobar tarafından bu umut verici bir makale buldum am

.NET Framework için dil Compiler oluşturma

o bir derleyici yüksek düzeyde kavramını tartışır ve .Net framework için kendi langauge icat ilerler. onun .Net Framework hedefleyen rağmen, pek çok kavram çoğaltılabilir gerekir. Madde kapsamaktadır:

  1. langauge tanımı
  2. Tarayıcı
  3. Ayrıştırıcı (esas ilgi bit im)
  4. Net Çerçeve Hedefleme
  5. Kod üreteci

Orada diğer konular, ama sadece olsun.

Onun insanlar yola çıkıp amaçladık, C # (oldukça değil Java) ile yazılmış

HTH

kemikler

Cevap 31/12/2008 saat 00:01
kaynak kullanıcı

oy
9

"... en bir Compiler Kuralım ..."

Ben ikinci ediyorum http://compilers.iecc.com/crenshaw/ tarafından @sasb . An için daha fazla kitap satın unutun.

Niye ya? Araçlar ve dili.

Gerekli dil Pascal ve yanlış hatırlamıyorsam Turbo-Pascal dayanmaktadır. Eğer gidersen Sadece çok olur http://www.freepascal.org/ ve tüm örnekler sayfasından düz çalışmak Pascal derleyicisi ~ indirmek http://www.freepascal.org/download.var Ücretsiz hakkında beaut şey Pascal ne olursa olsun işlemci veya OS, bakabiliriz neredeyse kullanabilirsiniz olduğunu.

Eğer ders hakim olması ardından daha gelişmiş deneyin " Ejderha Kitabı " ~ http://en.wikipedia.org/wiki/Dragon_book

Cevap 20/08/2008 saat 12:28
kaynak kullanıcı

oy
8

Gönderen comp.compilers SSS :

Başına Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5 tarafından "kişisel bilgisayarlarını Programlama"

Bu maalesef başlıklı kitabı Edison adında Pascal benzeri bir dil kullanarak, mikro düzeyde için tek kullanıcılı programlama ortamının tasarımı ve oluşturulması açıklar. Yazar, tüm Edison PDP 11/23 için sembolik bir assembler ile yazılmış küçük bir destekleyici çekirdeğin dışında kendisi (yazılmış bir Edison derleyici adım adım uygulanması ve basit destekleyen işletim sistemi için tüm kaynak kodu ve açıklamalar sunar; komple kaynak da), IBM PC için sipariş edilebilir.

Bu kitap hakkında en ilginç şey vardır: 1) yeteneğidir tam, kendi kendine yeten, kendini korumak, kullanışlı derleyici ve işletim sistemi oluşturmak için nasıl göstermek için ve dil tasarım ve özellik sorunları ve öncelik tercihine 2) ilginç tartışma Bölüm 2'de off.

Başına Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4 tarafından "Pascal Derleyiciler üzerinde Brinch Hansen"

Başka açık-teori ağır-on-pragmatikle here's-how-to-kod buna kitabı. Yazar tasarımı, uygulama ve kaynak kodu Pascal- için bir derleyici ve p-kod tercüman (Pascal "eksi"), boolean ve tamsayı türleri ile bir Pascal alt kümesini sunar (ama başka karakter, Reals, subranged ya türleri listelenmektedir) sabit ve tanımlar ve dizi ve kayıt türleri değişken (ancak hiçbir paketlenmiş, varyant, set, işaretçi, isimsiz, yeniden adlandırılmış veya dosya türleri), işlemler, atama ifadeleri, değer ve değişken parametreleri ile iç içe prosedür tanımlar, tablolar halinde ifadeleri ise, ve başlamak uç blokları (ancak hiçbir fonksiyon tanımları, usul parametreleri, git tablo ve etiketler, durum açıklamaları, tekrar ifadeleri, tablolar için ve ifadelerle).

derleyici ve yorumlayıcı Pascal * (Pascal "yıldız"), yazılım geliştirme sistemleri oluşturmak için bazı Edison tarzı özelliklere sahip genişletilmiş bir Pascal alt kümesi yazılır. IBM PC için bir Pascal * derleyici yazar tarafından satılır, ancak herhangi bir uygun Pascal platforma port kitabın Pascal- derleyici kolaydır.

Bu kitap tasarımı ve derleyici uygulanması kolay görünmesini sağlar. Özellikle yazarın kalitesi, güvenilirlik ve test ile ilgilidir yolu gibi. derleyici ve yorumlayıcı kolayca hızlı bir şekilde çalışır bir şey almak için kısıtlı olanlar, özellikle bir daha karmaşık bir dil veya derleyici proje için temel olarak kullanılabilir.

Cevap 26/06/2010 saat 21:17
kaynak kullanıcı

oy
8

Sen Darius Bacon'ın "kontrol etmelidir ichbins kod biraz üzerinde 6 sayfalarında, C hedefleyen küçük Lisp lehçesi için bir derleyici",. Çoğu oyuncak derleyici üzerinde sahip avantajı dil derleyici bunun yazılmasını sağlayacak yeterli tamamlanmış olmasıdır. (Arşivini de şeyi bootstrap bir yorumlayıcısı vardır.)

Benim üzerinde bir derleyici yazmayı öğrenme yararlı bulduğumuz hakkında daha fazla şeyler var Ur-Şema web sayfası.

Cevap 05/10/2008 saat 17:00
kaynak kullanıcı

oy
8

bir derleyici oluşturmak için kolay bir yol çok önemli bir adım olan Cı kodu üretme ile C., bizon ve esnek (veya benzeri) kullanmak, bir ağaç (AST) inşa etmek ve kodu oluşturmak için. C kodu üreterek, dil otomatik bir C derleyicisi tüm platformları üzerinde çalışacak.

C kodu oluşturuluyor sırayla C ayrıştırıcı veya HTML ayrıştırıcı yazma çok daha kolay olduğu (sadece baskı kullanabilir veya eşdeğeri) HTML üreten kadar kolaydır.

Cevap 20/08/2008 saat 10:56
kaynak kullanıcı

oy
7

Maalesef, bu İspanyolca, ama bu Arjantin'de "Compiladores e Interprètes" (Derleyiciler ve Tercümanlar) adlı ders kaynakça olduğunu.

Tabii inşaat derleyici resmi dil teorisinden oldu ve bunlar en azından basit bir derleyici inşa etmek gerekir konular şunlardır:

  • C arasında Derleyiciler tasarım
    Allen I Holub

    , Prentice-Hall. 1990.

  • Compiladores. Teoria y Construcción.
    Sanchís Llorca, FJ Galán Pascual, C İçerik Paraninfo. 1988'de tarif edilmiştir.

  • Derleyici İnşaat.
    Niklaus Wirth

    Addison-Wesley. 1996 =.

  • Lenguajes, Gramáticas y otomataların. Un Enfoque práctico.
    Pedro Isasi Viñuela Paloma Martínez Fernandez Daniel Borrajo Millan. Addison-Wesley Iberoamericana (Spain). 1997.

  • Derleyici tasarımı sanatı. Teori ve pratik.
    Thomas Pittman James Peters.

    Prentice-Hall. 1992.

  • Nesne Tabanlı Derleyici İnşaat.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, 1995 NJ

  • Compiladores. Conceptos Fundamentales.
    B. Teufel, S. Schmidt, T. Teufel.

    Addison-Wesley Iberoamericana. 1995.

  • Otomata Teorisi, Diller ve Hesaplamaya giriş.

    John E. Hopcroft. Jeffref D. Ullman.
    Addison-Wesley. 1979.

  • Biçimsel dillere giriş.
    György E. Révész.

    Mc Graw Hill. 1983.

  • Teknikleri Ayrıştırma. Pratik Bir Rehber.
    Dick Grune, Ceriel Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: Yine bir başka Derleyici-Derleyici.
    Stephen C. Johnson
    Bilgisayar Bilimi Teknik Rapor Nº 32, 1975. Bell Laboratuarları. Murray Hill, New
    Jersey.

  • Lex: Bir Lexical Analiz Jeneratör.
    ME Lesk, E. Schmidt. Bilgisayar Bilimi Teknik Rapor Nº 39, 1975. Bell Laboratuarları. Murray Hill, New Jersey.

  • Lex & yacc.
    John R. Levine, Tony Mason, Doug Brown.
    O'Reilly & Associates. 1995.

  • Hesaplama teorisinin elemanları.
    Harry R. Lewis, Christos H. Papadimitriou. Segunda Edición. Prentice Hall. 1998.

  • Un ALGORITMO Eficiente para la Construcción del Grafo de dependencia de Kontrolü.
    Salvador V. Cavadini.
    Trabajo Final de Grado para obtener el Título de Ingeniero tr Computacion.
    Facultad de Matemática Aplicada. 2001 UCSE.

Cevap 25/04/2009 saat 18:23
kaynak kullanıcı

oy
7

LCC derleyici ( wikipedia ) ( proje anasayfa Fraser ve Hanson dikkate alınmaz) kitabında ": Tasarım ve Uygulama A Retargetable C derleyicisi" açıklanmıştır. Oldukça okunabilir ve kod kuşağa, bütün derleyici açıklıyor.

Cevap 16/09/2008 saat 17:21
kaynak kullanıcı

oy
7

Python Python ile yazılmış bir piton derleyici ile birlikte geliyor. Sen kaynak kodunu görebilir ve bunun gibi ayrıştırma, soyut sözdizimi ağacı yayan kod, bunu Hack kadar tüm aşamaları kapsar.

Cevap 12/08/2008 saat 12:25
kaynak kullanıcı

oy
6

Değil bir kitap, ama teknik bir kağıt ve derleyici (ve metacompilers) hakkında daha fazla bilgi edinmek istiyorsanız bir derece eğlenceli bir öğrenme deneyimi ... Bu web sitesi kendini ve diğer dilleri derlemek tamamen kendine yeten derleyici sistemi bina yönlendirir:

Öğretici: Metacompilers Bölüm 1

Bu, tüm bir şaşırtıcı küçük 10 sayfalık teknik kağıt dayanmaktadır:

Val Schorre META II: Bir sözdizimi Odaklı Derleyici Yazma Dili

den sade ve basit 1964'te Nihayet derleyici kendini yenilemesi nasıl grok aklını başından bir an vardır 1970 yılında bu arkasından derleyiciler üretmeyi öğrenmesiyle ....

Benim üniversite günlerinden web sitesi yazar biliyorum ama web sitesi ile hiçbir ilgisi yoktur.

Cevap 28/08/2009 saat 01:01
kaynak kullanıcı

oy
5
  1. Bu geniş konudur. Bu noktayı küçümseme. Ve bunu hafife benim açımdan yabana atmayın.
  2. Duyduğum Ejderha Kitabı arama ile birlikte başlamak için (?) Yerdir. :) nihayetinde hayatın olacak, arama daha iyi alın.
  3. Kendi programlama dili Bina kesinlikle iyi bir egzersizdir! Ama sonunda herhangi bir pratik amaç için asla kullanılmayacaktır biliyoruz. Bu istisnaları az ve vardır çok seyrek.
Cevap 20/07/2009 saat 23:44
kaynak kullanıcı

oy
5

Eğer işlevsel bir dil (ziyade usul biri) için bir derleyici yazma Simon Peyton-Jones ve David Lester ilgileniyorsanız " işlevsel dilleri Uygulanması: Bir öğretici " mükemmel bir kılavuzdur.

nasıl işlevsel değerlendirme eserlerin kavramsal temelleri "Çekirdek" adı verilen basit ama güçlü fonksiyonel dilde örneklerle yönlendirilir. Buna ek olarak, Çekirdek dil derleyici her parçası Miranda kod örnekleri (Haskell'e çok benzer saf bir işlevsel bir dil) açıklanmaktadır.

derleyici birkaç farklı türde tarif edilmiştir ama sadece Çekirdek sözde şablon derleyici izleyin bile sen fonksiyonel programlama işlemesini sağlayan mükemmel bir anlayışa sahip olacaktır.

Cevap 01/10/2008 saat 10:30
kaynak kullanıcı

oy
5

Orada iyi cevaplar burada bir sürü var, bu yüzden ben sadece listeye bir tane daha eklemek düşündüm:

Daha derleyici üzerinde bazı çok iyi yazılmış metne sahip on yıl önce, daha Projesi Oberon adında bir kitap var. Kitap aslında kaynak ve açıklamalar çok eller üstünde ve okunabilir anlamda öne çıkmaktadır. tam metin (2005 baskısı) pdf olarak kullanılabilir hale getirilmiştir, bu nedenle şu anda indirebilirsiniz. derleyici bölüm 12'de ele alınmıştır:

http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf

Niklaus Wirth, Jürg Gutknecht

(Tedavi derleyicilerde kitabında kadar geniş değildir)

Ben derleyicilerde birkaç kitap okudum ve ben, bu kitapta harcanan zaman çok değerli ikinci ejderha kitabı olabilir.

Cevap 19/09/2008 saat 00:31
kaynak kullanıcı

oy
4

Sen kullanabilirsiniz BCEL Apache Software Foundation tarafından. Bu araç sayesinde assembler benzeri kodu oluşturmak, ancak BCEL API ile Java var. Sen (bu durumda bayt kodu) ara dil kodu oluşturabilirsiniz öğrenebilirsiniz.

Basit bir örnek

  1. Bu işlevi ile bir Java sınıf oluşturun:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

Şimdi bu sınıfla BCELifier çalıştırmak

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

Sen (nasıl bayt kod MyClass.java inşa etmek) bütün sınıf için konsolda sonucu görebilirsiniz. fonksiyon için kod şudur:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}
Cevap 14/07/2011 saat 16:42
kaynak kullanıcı

oy
4

Ben sevdim Crenshaw öğretici bir derleyici bazı giriş okur ve put bazıları yazıyor sadece başka programdır kesinlikle açıklık getiriyor çünkü, çok.

Oku onu.

İstersen Çalış, ama sonra daha büyük ve daha kapsamlı derleyiciler gerçekten yazılır nasıl başka referans bak.

Ve okumak Güvenen Güven On bu alanda yapılabilir belirgin olmayan şeyleri bir ipucu elde etmek.

Cevap 22/08/2008 saat 16:57
kaynak kullanıcı

oy
3

listeye dahil edilmedi şimdiye kadar bu kitap:

Derleyici Tasarımı (Torben Mogensen) Temelleri (Kopenhag borç. Bilgisayar Bilimleri, Üniversitesi)

Ben de derleyiciler öğrenmeye ilgileniyorum ve önümüzdeki birkaç yıl içinde bu sanayi girmek planlıyoruz. Bu kitap bildiğim kadarıyla gördüğünüz gibi öğrenme derleyiciler başlamak için ideal bir teori kitabıdır. Bu temiz ve dikkatlice yazılmış, kopyalamak ve çoğaltmak BEDAVA ve herhangi bir kod olmadan düz İngilizce size verir ama hala talimatlar ve şemalar vb bir göz değer imo yoluyla mekaniği sunmaktadır.

Cevap 12/03/2014 saat 17:05
kaynak kullanıcı

oy
3

Listeden eksik: Çöp Toplama: Jones ve Lins tarafından otomatik Dinamik Bellek Yönetimi için Algoritmalar.

(Eğer derleyici yazıyoruz varsayarsak ve çalışma zamanı sistemi ve bir çöp toplanan dili uyguluyorsanız söyledi.

Cevap 27/06/2010 saat 00:43
kaynak kullanıcı

oy
3

Ben en bir komut dosyası Motor-Compiler yanı sıra Bxbasm adında bir yerel kod derleyici inşa edelim" başlıklı derleyici tasarımı üzerine bir online öğretici, yazdım Çevrimiçi doc en altındadır. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

: Zip şeklinde dokümanlar, destek dosyaları ve derleyici, altındadır http://geocities.com/blunt_axe_basic

Ayrıca: http://tech.groups.yahoo.com/group/QDepartment

Steve A.

Cevap 13/01/2009 saat 23:31
kaynak kullanıcı

oy
3

Ejderha Kitap çok karmaşıktır. Yani bir başlangıç ​​noktası olarak bunu görmezden. Bu iyi ve zaten bir başlangıç ​​noktası var kez çok düşündürüyor, ama yeni başlayanlar için, belki sadece yazılı her şey (lexing / ayrıştırma) ile RD, LL veya LR ayrıştırma teknikleri kullanılarak bir matematik / mantıksal ifade değerlendirici yazmaya çalışmalısınız belki C / Java elle. Bu başlı başına ilginç ve size derleyici söz konusu olan sorunlar bir fikir verir. Sonra (metin işleme bunlar genellikle kolay olduğundan) bazı kodlama dili kullanarak kendi DSL atlamak ve birisi Dediğim gibi Muhtemelen / antlr vb flex / bizon kullanmalıdır kendisi ya C. kodlama dilini ya kod oluşturmak Eğer c / java bunu yapacağız eğer ayrıştırma / lexing yapmak.

Cevap 01/10/2008 saat 21:24
kaynak kullanıcı

oy
2

Ben söz edilmemiştir şaşırdım ama Donald Knuth Bilgisayar Programlama Sanatı aslen derleyici yazma öğretici bir tür kaleme alınmıştır.

Elbette konularda derinlemesine gitmek için Dr Knuth'un eğilimi derleyici-yazma öğretici yol açmıştır tahminen 9 ciltlik daha arttırıldığını, sadece üçü aslında yayınlandı. Bu programlama konularında oldukça komple fuar, ve sen hiç dakikalık detaylı olarak, bir derleyici yazma hakkında bilmeniz gereken her şeyi kapsar.

Cevap 21/07/2009 saat 01:20
kaynak kullanıcı

oy
2

Bir başlangıç noktası olarak, bir özyinelemeli iniş ayrıştırıcı (RDP) oluşturmak için iyi olacak bir derleyici yazmak için nasıl anlamak için (Diyelim ki BASIC kendi lezzet oluşturmak ve TEMEL tercüman inşa etmek isteyen diyelim). Herbert Schild'in C Güç Kullanıcılar en iyi bilgiyi buldum bölüm 7. Bu bölüm o bir hesap makinesi (basit bir ifade ayrıştırıcı) nasıl oluşturulacağını açıklar H. Schildt başka kitapta "C komple Referans" anlamına gelir. Ben eBay'de hem kitaplar çok ucuz buldum. Eğer giderseniz www.osborne.com Kitabın kodunu kontrol veya kontrol edebilirsiniz www.HerbSchildt.com ben onun son kitabında aynı kodu ama C # için bulunan

Cevap 20/08/2008 saat 12:16
kaynak kullanıcı

oy
1

Sadece kitapları arıyorum, ama konuyla ilgili makaleler sahip web sitelerinde de ilgi değilseniz, bir programlama dili oluşturma çeşitli yönleri hakkında blogged ettik. Mesajların çoğu blogumun bulunabilir "Dil Tasarım" kategorisinde .

Özellikle, otomatik makina veya bayt kodu üreten bir bayt kodu yorumlayıcı yaratmak üzere bir nesne yönelimli zamanını yazma, basit bir yükleyici oluşturma ve basit bir işareti / tarama çöp toplayıcısı, yazma, el Intel makine kodu üretme kapak. yerine teorinin dolu canınızı sıkmak çok pratik ve pragmatik bir şekilde bu tümü.

Bu hakkında geri bildirim seviniriz.

Cevap 02/04/2014 saat 13:39
kaynak kullanıcı

oy
1

En hızlı yaklaşım iki kitap geçer:

1990 versiyonu Derleme Teknikleri An Introduction, ANSI C, Lex ve Yacc kullanarak İlk Ders JP Bennett tarafından - örnek kod mükemmel bir denge, teori ayrıştırma ve tasarım-a C, lex ve yacc yazılmış tam bir derleyici içerir basit gramer

Ejderha Kitabı (eski sürüm) - Eski kitapta yer almayan özellikler için çoğunlukla detaylı referans

Cevap 01/04/2011 saat 20:39
kaynak kullanıcı

oy
1

Yeni bir dil fikrini denemek istediğinizde, sadece basit bir ayrıştırıcı yazmak ve C gibi iyi derleyiciler almak kolaydır bazı dil oluşturmak var

Nasıl C ++ yapıldığını düşünüyorsunuz?

Cevap 21/07/2009 saat 01:42
kaynak kullanıcı

oy
1

Eğer benim gibi iseniz, hiçbir resmi Bilgisayar bilimi eğitimini vardır ve bir derleyici nasıl çalıştığını bilmek istiyorum / bina ile ilgilenen kim:

, Kendi kendini yetiştirmiş bir bilgisayar programcısı için şaşırtıcı bir kitap: Ben "Derleyiciler ve Müfessirleri Programlama Dili Java İşlemciler" tavsiye değilim.

Bu temel dil teorisini anlamak benim açımdan, itibaren, makineyi otomatik hale getirmek ve küme teorisi büyük bir sorun değildir. Sorun koduna şeyleri açmak için nasıl. Yukarıdaki kitap ayrıştırıcı, analiz bağlamını yazmak ve kodu oluşturmak için nasıl anlatır. Bu kitabı anlayamıyorum, o zaman, demek bir derleyici inşa vazgeçmek zorunda. Kitap şimdiye kadar okuduğum en iyi programlama kitabı.

Aynı zamanda iyi bir diğer kitap, yoktur C Derleyici Tasarımı . Orada bir sürü kod olduğunu ve size derleyici ve lexer araçlarını oluşturmak konusunda her şeyi anlatır.

bir derleyici Bina eğlenceli bir programlama uygulamadır ve size programlama becerileri yığın öğretebilir.

Almayın Ejderha kitabı . Bu para ve zaman kaybı oldu ve bir uygulayıcı için değil.

Cevap 05/02/2009 saat 03:55
kaynak kullanıcı

oy
0
  • Eğer soruların çoğu Yığın taşması burada C ++ etiketli cevap verebilir emin olmakla başlayın.
  • Bundan sonra, diğer derleyiciler çalışmak ve [parçalarını] onların kaynak kodu anlamak anlamak emin olun.
  • Eğer assembler ihtiyaç ve bu etiketle birçok soru cevap verebilir kadar assembler öğrenme başlayacak göreceksiniz.
  • Buraya kadar geldiyseniz, birkaç yıl geçtiğini bulmak ve böyle bir projenin ne kadar büyük fark ve muhtemelen o zamanlar kendi soruya gülümseme olacak (bu sayfa hala o anda varsa) ...
Cevap 21/07/2009 saat 00:01
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more