Klasik olarak bir derleyicinin üç bölümü vardır: sözcüksel analiz, ayrıştırma ve kod oluşturma. Sözcük analizi, programın metnini dil anahtar sözcüklerine, adlarına ve değerlerine ayırır. Ayrıştırma, sözcüksel çözümlemeden gelen belirteçlerin dil için sözdizimsel olarak doğru ifadelerde nasıl birleştirildiğini gösterir. Kod üretimi, ayrıştırıcı tarafından üretilen veri yapılarını alır ve bunları makine koduna veya başka bir temsile çevirir. Günümüzde sözcüksel analiz ve ayrıştırma tek bir adımda birleştirilebilir.
Açıkça, kod üretecini yazan kişi, hedef makine kodunu, talimat setleri, işlemci boru hatları ve önbellek davranışı da dahil olmak üzere çok derin bir düzeyde anlamalıdır. Aksi takdirde derleyici tarafından üretilen programlar yavaş ve verimsiz olacaktır. Sekizli veya onaltılık sayılarla temsil edilen makine kodunu çok iyi okuyabilir ve yazabilirler, ancak genellikle makine kodlarını oluşturmak için dahili olarak makine kodunu oluşturmak için işlevler yazarlar. Teorik olarak, lexer ve ayrıştırıcıyı yazan kişiler makine kodunun oluşturulması hakkında hiçbir şey bilmeyebilir. Aslında, bazı modern derleyiciler, lexer ve ayrıştırıcı yazarların hiç duymadığı bazı CPU için makine kodu yayabilecek kendi kod oluşturma rutinlerinizi takmanıza izin verir.
Bununla birlikte, pratikte her adımdaki derleyici yazarları farklı işlemci mimarileri hakkında çok şey bilir ve bu da kod oluşturma adımının ihtiyaç duyacağı veri yapılarını tasarlamalarına yardımcı olur.