İnsan Dili Bir Derleyici Hatasından mı Doğdu?

İnsan Dili Bir Derleyici Hatasından mı Doğdu?

Bir programcının ekranında beliren soyut sözdizim ağacı, ilk bakışta kuru bir mühendislik nesnesidir: düğümler, dallar, ifadeler, operatörler. Oysa biraz yakından bakınca bu ağaç, insan dilinin karanlık ormanına tutulmuş güçlü bir fener gibi davranır. Çünkü dil dediğimiz şey yalnızca kelimelerin arka arkaya dizilmesi değildir; kelimelerin birbirine hangi görünmez kurallarla bağlandığı, hangi parçanın hangi parçayı taşıdığı ve anlamın hangi dallardan süzülerek zihne ulaştığıdır.

Programlama dillerinde AST, kaynak kodun yüzeydeki yazım biçimini değil, derindeki mantıksal yapısını temsil eder. Mesela 3 + 4 * 5 ifadesi soldan sağa okunduğunda basit görünür; fakat AST bize çarpmanın toplamadan önce örgütlendiğini söyler. İnsan dili de benzer bir numara yapar. “Kırmızı şapkalı adam koştu” dediğimizde zihin, sözcükleri düz bir boncuk dizisi gibi saklamaz. “Kırmızı”nın şapkaya mı, adama mı ait olduğunu; “şapkalı adam”ın bir bütün olarak eylemin öznesi olduğunu çözer. Yani beynimiz, konuşurken farkında olmadan bir tür biyolojik ayrıştırıcı gibi çalışır.

Bir Yıldız İşaretinden Daha Fazlası: Regex’in Gizli Dil Hiyerarşisi

Bir metinde e-posta adresi bulmak, log dosyasından hata kodu çekmek ya da bir form alanının yalnızca rakam kabul etmesini sağlamak için yazdığımız .*, +, ? ve köşeli parantezler ilk bakışta mütevazı araçlardır. Fakat bu semboller, bilgisayar biliminin en zarif fikirlerinden birine açılan kapıdır: Her desen aynı türden değildir; her dili aynı güçte bir makine tanıyamaz. Regex yazarken aslında, çoğu zaman fark etmeden, Chomsky Hiyerarşisi denen matematiksel bir karmaşıklık merdiveninde dolaşırız.

Desen aramak mı, dil tanımlamak mı?

Regex çoğu geliştiricinin zihninde bir “metin bulma aracı”dır. Oysa kuramsal açıdan düzenli ifade, bir dili tanımlar: Kabul edilecek tüm karakter dizilerinin kümesini. Örneğin ab*, önce bir a, ardından sıfır veya daha fazla b içeren dizileri tanımlar: a, ab, abbb gibi. Bu küçük ifade, sonsuz sayıda olası metni birkaç sembolle tarif eder. Gücü tam da buradadır: Sonlu bir tariften sonsuz bir davranış üretmek.