Yazan : Şadi Evren ŞEKER

Bazı programlama dillerinin esnek yapısından kaynaklanan ve belirsizlik (ambiguity) sebebi olan bir problemdir. Bu probleme göre bir “else” satırının hangi koşula bağlı olduğunun anlaşılması mümkün değildir. Bu durumda dallanma (çatallanma, fork) işleminde belirsizlik ortaya çıkar. Örneğin aşağıdaki satırı ele alalım:

if a then if b then s1 else s2

Bu satırda sırasıyla a ve b koşuları kontrol edilecek ardından başarılı olunursa s1 satırı çalışacaktır. Ancak else satırının (s2) hangi durumda çalışacağı bir muammadır. Burada iki ihtimal bulunur :

  • a başarısızlığında s2’nin çalışması
  • b başarısızlığında s2’nin çalışması

Bu belirsizlik aşağıdaki şekilde modellenebilir:

if a then
{
  if b then
  {
    s1
  }
  else
  {
    s2
  }
}


if a then { if b then { s1 } } else { s2 }

Bu problem çeşitli dillerde çeşitli şekillerde çözülmüştür. Örneğin C dilinde aşağıdaki kodlamayı ele alalım:

if (a)
   if(b)
      printf("ikisi de dogru");
   else
      printf("sadece b yanlis");

Yukarıdaki örnekten de anlaşılacağı üzere C dilinde bloklama yapılmadığında else komutu kendisine en yakın olan (en son tanımlanan) if satırı ile ilişkilendirilmektedir.

Elbette bu durum dil tasarımında bir problem olmaktadır. Bu problemin çözümü için stack (yığın) yapısından faydalanılarak açılmış iflerin takibi yapılabilir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir