Code Generation
Bu son aşamada, derleyici optimize edilmiş ara kodu makineye bağlı koda, Assembly’ye veya hedeflenen herhangi bir düşük seviye diline çevirir.
Intermediate Code Generation
Three address code (3AC), en basit haliyle, bir komutun bir atama operatörü ve bunun dışında en fazla 3 operatör içerebildiği bir dildir. Çoğu 3AC komutu, a := b c or a := b formuna sahiptir.
Yukarıdaki resimde annotad AST’den 3AC kodunun nasıl üretildiği gösterilmiştir.
Bu aşamanın bitimiyle de Compiler’in Front-end kısmı son bulmuştur.
Lexical Analysis
Lexeme’yi kaynak programlama dilinin içerisinde yer alan benzersiz (unique) karakter stringleri olarak düşünebiliriz. Örnek verecek olursak, keywords dediğimiz if, while veya func, belirteçler (identifiers), strings, sayılar, operatörler, veya tek karakterler (, ), ., ; gibi.
Token ise lexemeyi tanımlayan bir objedir. İçerisinde lexeme’nin string’i.
Optimization
Bu aşamada, yani back-end kısmının ilk aşamasında, kodu hem daha hızlı çalışacak ve hem de kısa bir hale getirmek için, çeşitli optimization teknikleri, ara kod üzerine uygulanır.
Mesela yukaradaki ara kod parçasına, optimization uygularak t3’ü içeren satır optimize edilmiştir, elenmiştir.
Semantic Analysis
Type Inferencekısmında, eğer kullanılan programlama dili tip çıkarımını destekliyorsa, Compiler, programdaki tipi verilmemiş ifadeleri anlamaya, çıkarmaya çalışır.
Eğer bu çıkarım başarılı olursa, ilgili AST noduna compiler, type annotation’u ekler.
Type Checkingkısmında, Compiler atanan değerlerin değişkenin tanımlandığı tiple uyumluluğunu, işleml.
Syntax Analysis
Bu aşama sonunda var olan syntax hataları bulunur ve kullanıcıya bilgilendirici bir mesaj halinde raporlanır. Örnek olarak yukarıdaki resmi aldığımızda, sum fonksiyonunu yazarken } karakterini unutursak, Compiler } karakterinin konulmadığını belirtecek ve hangi satır ve kolona koymamız gerektiğini söyleyecektir.
Eğer bu aşamada herhangi bir hata il.