Derleyici Tasarımı - Hata Kurtarma
Ayrıştırıcı, programdaki herhangi bir hatayı algılayıp raporlayabilmelidir. Bir hatayla karşılaşıldığında, ayrıştırıcının bunu işleyebilmesi ve girdinin geri kalanını ayrıştırmaya devam etmesi beklenir. Çoğunlukla ayrıştırıcıdan hataları kontrol etmesi beklenir, ancak derleme işleminin çeşitli aşamalarında hatalarla karşılaşılabilir. Bir program, çeşitli aşamalarda aşağıdaki türden hatalara sahip olabilir:
Lexical : yanlış yazılan bazı tanımlayıcıların adı
Syntactical : eksik noktalı virgül veya dengesiz parantez
Semantical : uyumsuz değer tahsisi
Logical : koda ulaşılamaz, sonsuz döngü
Koddaki hatalarla başa çıkmak için ayrıştırıcıda uygulanabilecek dört yaygın hata kurtarma stratejisi vardır.
Panik modu
Bir ayrıştırıcı ifadenin herhangi bir yerinde bir hatayla karşılaştığında, girdiyi noktalı virgül gibi sınırlayıcıya hatalı girdiden işlemeyerek ifadenin geri kalanını yok sayar. Bu, hata gidermenin en kolay yoludur ve ayrıca ayrıştırıcının sonsuz döngüler geliştirmesini engeller.
İfade modu
Bir ayrıştırıcı bir hatayla karşılaştığında, geri kalan ifade girdilerinin ayrıştırıcının önceden ayrıştırmasına izin vermesi için düzeltici önlemler almaya çalışır. Örneğin, eksik bir noktalı virgül eklemek, virgül yerine noktalı virgül koymak vb. Ayrıştırıcı tasarımcıların burada dikkatli olması gerekir çünkü bir yanlış düzeltme sonsuz döngüye yol açabilir.
Hata üretimleri
Kodda oluşabilecek bazı yaygın hatalar derleyici tasarımcıları tarafından bilinmektedir. Ayrıca tasarımcılar, bu hatalarla karşılaşıldığında hatalı yapılar üreten yapımlar olarak kullanılacak artırılmış dilbilgisi oluşturabilirler.
Küresel düzeltme
Ayrıştırıcı, eldeki programı bir bütün olarak ele alır ve programın ne yapmak istediğini anlamaya çalışır ve bunun için en yakın eşleşmeyi bulmaya çalışır ki bu hatasızdır. Hatalı bir girdi (ifade) X beslendiğinde, en yakın hatasız Y ifadesi için bir ayrıştırma ağacı oluşturur. Bu, ayrıştırıcının kaynak kodunda minimum değişiklik yapmasına izin verebilir, ancak bunun karmaşıklığı (zaman ve alan) nedeniyle bu strateji henüz uygulamada uygulanmamıştır.
Soyut Sözdizimi Ağaçları
Ayrıştırma ağacı temsillerinin, gerekenden daha fazla ayrıntı içerdiklerinden, derleyici tarafından ayrıştırılması kolay değildir. Örnek olarak aşağıdaki ayrıştırma ağacını alın:
Yakından izlenirse, yaprak düğümlerinin çoğunun ebeveyn düğümlerinin tek çocuk olduğunu görürüz. Bu bilgi, bir sonraki aşamaya aktarılmadan önce elimine edilebilir. Ekstra bilgileri gizleyerek, aşağıda gösterildiği gibi bir ağaç elde edebiliriz:
Soyut ağaç şu şekilde temsil edilebilir:
AST'ler, en az gereksiz bilgi içeren bir derleyicideki önemli veri yapılarıdır. AST'ler bir ayrıştırma ağacından daha kompakttır ve bir derleyici tarafından kolayca kullanılabilir.