Üniversitede bir derleyiciler kursu aldım ve çok fazla bilgi olmasına rağmen çok bilgilendirici ve eğlenceli geçti. Uygulama için bir dil belirtimi verildiğinden, fazla bir şey öğrenemediğim bir şey dil tasarımıydı. Artık eğlenmek için basit bir oyuncak dili oluşturmayı düşünüyorum, böylece farklı dil tasarım ilkeleriyle uğraşabilir ve deneyebilirim.Oyuncak derleyici için çıkış dili/biçimi
Henüz karar vermediğim bir şey, derleyicimin çıkmasını istediğim dil veya biçim. İdeal olarak, kullanımı kolay bir sanal makine için bayt kodu çıkarmayı ve ayrıca hata ayıklama için bazı olanaklara sahip olmayı (örneğin yürütmeyi duraklatmayı ve herhangi bir noktada yığına bakmayı) istiyorum. Yine de benim fanteziim.
elimden çıktı metinsel x86 assembly dili: Onları gördüğünüz gibi size aradığım bir fikir vermek için, burada artıları ve eksileri ile birlikte ben kabul ettik seçeneklerden bazıları vardır ve daha sonra NASM veya FASM gibi bir derleyicisini çağırır. Bu, önceki derleyici çalışmamın bir VM üzerinde yapıldığı için, gerçek donanım için derleme deneyimi yaşayacaktı. Gdb'yi kullanarak oluşturulan programlarda hata ayıklama yapabilirim, ancak hata ayıklama desteğiyle bir VM kullanmak kadar kolay olmayabilir. Bunun en önemli dezavantajı x86 montajı konusunda sınırlı tecrübem var ve CISC talimatı olarak biraz göz korkutucu.
Ben JVM veya Lua sanal makine gibi popüler bir sanal makine için bytecode çıkış bytecode olabilir. Bunların artıları ve eksileri, seçtiğim özel VM'ye göre değişebilir, ancak genel olarak burada gördüğüm olumsuz sonuç, gelecekteki projelerime sınırlı uygulanabilirlik gösteren bir bayt kodu öğrenmeye potansiyel olarak sahip olmaktır. Ayrıca, hangi SM'nin ihtiyaçlarına en uygun olacağından da emin değilim.
Ben de bu amaçla üniversitemde tasarlanmış olan derleyiciler dersi, içinde kullanılan aynı VM kullanabilirsiniz. Tasarım ve talimat setini zaten biliyordum ve iyi hata ayıklama özellikleri var, bu yüzden büyük bir artı. Ancak, yetenekleri ile son derece sınırlıdır ve orta düzeyde ilerlemiş bir şey yapmaya çalışırsam hızlıca bu sınırlara karşı çıkacağımı hissediyorum.
LLVM'yi ve LLVM Intermediate Representation çıkışını kullanabilirim. LLVM IR çok güçlü görünüyor ve aşina olmak benim için kesinlikle gelecekte olabilir. Diğer yandan, çalışmanın ve hata ayıklamanın ne kadar kolay olduğu konusunda hiçbir fikrim yok, bu yüzden bu alanda deneyimli birisinin tavsiyelerini çok takdir ediyorum.
kendi sanal makinemi tasarlayıp uygulayabilirim. Bu muazzam ve bariz bir dezavantajı var: Aslında projemi iki projeye dönüştürüyor olacağım. Bununla birlikte, hala istediğim dil özellikleri için "birinci sınıf" desteği olan bir Sanal Makineyi yapmam için bana izin vermesi oldukça cazip geliyor - örneğin, Lua VM'nin masalar için birinci sınıf desteği var. Lua bayt kodu ile onlarla çalışmak. Yani
Kod oluşturmayı değiştirdiyseniz, iyi bir derleyici tasarımı IR'nizi herhangi bir şeye dönüştürmenize izin verir.Dilinizi bazı IR'lere dönüştürerek ve ardından C \ C++ 'ya dönüştüren bir arka plan oluşturarak başlayacağım. Bu şekilde, derleyicinin farklı bileşenleri hakkında bilgi edinebilir ve asm veya bytecode'da bazı alt düzey dil yapılarını doğrulama konusunda endişelenmenize gerek yoktur. – linuxuser27