Aşağıda verdiğim özet, "Derleyiciler, İlkeler, Teknikler ve Araçlar", Aho, Lam, Sethi, Ullman, (Pearson International Edition, 2007), sayfalar 1, 2'ye, bazı fikirlerimin de eklenmesine dayanmaktadır.
Bir programın işlenmesi için iki temel mekanizma derleme ve yorumlamadır .
Derleme, belirli bir dilde bir kaynak programın girişini yapar ve bir hedef dilde bir hedef program çıkarır.
source program --> | compiler | --> target program
Hedef dil makine koduysa, doğrudan bazı işlemcilerde çalıştırılabilir:
input --> | target program | --> output
Derleme, tüm giriş programının (veya modülün) taranmasını ve çevrilmesini içerir ve yürütülmesini gerektirmez.
Yorum, kaynak programın girişini ve girişini alır ve kaynak programın çıktısını üretir.
source program, input --> | interpreter | --> output
Yorum genellikle programın her seferinde bir ifadeyi işlemesini (analiz etmeyi ve yürütmeyi) içerir.
Uygulamada, birçok dil işlemcisi bu iki yaklaşımın bir karışımını kullanır. Örneğin, Java programları ilk önce bir ara programa (bayt kodu) çevrilir (derlenir):
source program --> | translator | --> intermediate program
Bu adımın çıktısı daha sonra sanal bir makine tarafından yürütülür (yorumlanır):
intermediate program + input --> | virtual machine | --> output
İşleri daha da karmaşık hale getirmek için JVM, bayt kodunu başka bir formata dönüştürmek için çalışma zamanında tam zamanında derleme yapabilir.
Ayrıca, makine dilini derlerken bile, temel işlemci tarafından uygulanan ikili dosyanızı çalıştıran bir tercüman vardır. Bu nedenle, bu durumda bile bir derleme + yorumlama melezi kullanıyorsunuz.
Bu nedenle, gerçek sistemler ikisinin bir karışımını kullanır, bu nedenle belirli bir dil işlemcisinin bir derleyici mi yoksa tercüman mı olduğunu söylemek zordur, çünkü işleminin farklı aşamalarında her iki mekanizmayı da muhtemelen kullanacaktır. Bu durumda, başka, daha tarafsız bir terim kullanmak muhtemelen daha uygun olacaktır.
Bununla birlikte, derleme ve yorumlama, yukarıdaki şemalarda açıklandığı gibi, iki ayrı işleme tipidir.
İlk soruları cevaplamak için.
Bir derleyici doğrudan fiziksel donanımda çalışan bir makine dili oluşturabilir mi?
Zorunlu olarak, bir derleyici, bir makine Mİ için yazılmış bir programı, bir makine M2 için yazılmış eşdeğer bir programa çevirir. Hedef makine donanımda uygulanabilir veya sanal bir makine olabilir. Kavramsal olarak hiçbir fark yoktur. Önemli olan, bir derleyicinin bir kod parçasına bakıp onu çalıştırmadan başka bir dile çevirmesidir.
Yani bir tercüman makine dili üretmiyor ama bir derleyici girişi için kullanıyor mu?
Eğer üreterek çıktıya atıfta bulunuyorsanız, derleyici makine dilinde olabilecek bir hedef program üretir, tercüman yapmaz.