Ana sayfateknolojiYazılım ve ProgramlamaYorumlayıcı Nedir?
💻
Teknoloji · Konu Anlatımı

Yorumlayıcı Nedir? Kodun Çalışma Yolculuğu

Programlamaya Giriş· genel· 9 dk okuma· Son güncelleme: 17 Temmuz 2026
Öğreniyo İçerik Ekibi tarafından hazırlandı · Editör: Yusufhan Seyis
Kısaca

Yorumlayıcı (interpreter), kaynak kodu çalıştırma sırasında analiz edip işleten yazılımdır; bunu mutlaka her satırı doğrudan makine koduna çevirerek yapmaz. Kullanılan dile ve uygulamaya göre kodu doğrudan işleyebilir, ara koda dönüştürebilir veya sık kullanılan bölümleri JIT derleme ile makine koduna çevirebilir.

Bu yazıda (8)
💻
Teknoloji

Yorumlayıcı Nedir? Kodun Çalışma Yolculuğu

Bir programlama diliyle yazılan kaynak kod, işlemcinin doğrudan yürüttüğü komutlarla aynı biçimde değildir. Kaynak kod; değişkenler, fonksiyonlar, koşullar ve veri yapılarıyla insanların program kurmasını kolaylaştıran bir gösterimdir. Bilgisayarın bu talimatları çalıştırabilmesi için kaynak kod ile donanım arasında bir çalışma mekanizması gerekir.

Yorumlayıcı bu mekanizmalardan biridir. Ancak onu yalnızca "kodu satır satır makine diline çeviren program" şeklinde tanımlamak eksik ve bazı durumlarda yanıltıcıdır. Modern yorumlayıcılar kaynak kodu önce sözdizimsel olarak çözümleyebilir, bir ara gösterim oluşturabilir, bu gösterimi sanal makinede çalıştırabilir ve performans için belirli bölümleri sonradan derleyebilir. Bu nedenle yorumlayıcıyı anlamanın en doğru yolu, tek bir çeviri biçimine değil, kodun çalışma anındaki işlenme sürecine bakmaktır.

Bu rehberde yorumlayıcının ne yaptığını, derleyiciyle neden tam bir karşıtlık oluşturmadığını, hataların hangi aşamada görüldüğünü ve küçük kod parçalarının nasıl yürütüldüğünü adım adım inceleyeceğiz.

Yorumlayıcıyı "satır satır çeviri" tanımından daha doğru anlamak

Yorumlayıcı, bir programlama dilinde yazılmış kaynak kodun çalıştırılmasını sağlayan yazılım bileşenidir. Kaynak kodu okur, dilin kurallarına göre analiz eder ve programın davranışını çalışma zamanında yürütür. Buradaki kritik nokta şudur: Yorumlayıcı her durumda her satırı ayrı ayrı makine koduna çevirmez.

"Satır satır çalıştırma" ifadesi başlangıç düzeyinde yararlı bir benzetmedir; çünkü bir programın işlemleri sıralı biçimde ilerler ve hata çoğu zaman belirli bir kod konumuyla ilişkilendirilir. Fakat gerçek uygulamada yorumlayıcı önce birden fazla satırı birlikte inceleyebilir. Örneğin bir fonksiyon tanımının tamamını, parantezlerin eşleşmesini veya girintiye dayalı bir blok yapısını değerlendirmesi gerekebilir.

Yorumlayıcının temel kararı, kodun bir sonraki bölümünde ne yapılacağını belirlemektir. Bir değişkene değer atanıyorsa bellekte ilgili çalışma zamanı yapısı oluşturulur veya güncellenir. Bir koşul varsa koşulun sonucu hesaplanır ve yalnızca uygun dal yürütülür. Bir fonksiyon çağrılıyorsa fonksiyonun parametreleri hazırlanır ve fonksiyon gövdesi çalıştırılır. Bu nedenle yorumlayıcıyı, kaynak kod ile çalışma zamanı davranışı arasında aracılık eden yürütme sistemi olarak düşünmek daha isabetlidir.

Yorumlayıcının görevi derleyicininkinden tamamen ayrı olmak zorunda değildir. Aynı programlama dili için farklı uygulamalar bulunabilir: biri kaynak kodu doğrudan işleyebilir, diğeri bytecode adı verilen ara gösterimi kullanabilir, bir başkası da çalışma sırasında bazı bölümleri makine koduna çevirebilir.

Bir kod parçası çalışırken gerçekleşen beş aşama

Yorumlayıcı tabanlı bir çalıştırma sürecini öğretici olarak beş aşamada düşünebiliriz:

  1. Kaynak kodun alınması: Çalıştırılacak dosya, komut satırından verilen ifade veya etkileşimli kabuktaki komut yorumlayıcıya iletilir.
  2. Sözcüksel ve sözdizimsel analiz: Metin; anahtar kelime, sayı, işleç ve isim gibi parçalara ayrılır. Ardından parantezlerin, blokların ve ifade yapısının dil kurallarına uygun olup olmadığı kontrol edilir.
  3. Anlamın hazırlanması: Yorumlayıcı, değişkenin hangi değeri taşıdığını, fonksiyonun nasıl çağrılacağını ve koşulun hangi ifadeyi denetlediğini belirler. Bu aşama yalnızca noktalama işaretlerini kontrol etmekten ibaret değildir.
  4. Yürütme: Hazırlanan ifade çalışma zamanı ortamında işletilir. Aritmetik işlem yapılır, değer bellekte tutulur, bir fonksiyon çağrılır veya bir koşula göre akış değiştirilir.
  5. Sonraki ifadeye geçiş: Programın akışı devam eder. Bir hata oluşursa süreç ilgili noktada durabilir; hata yakalama mekanizması varsa akış başka bir bölüme yönlenebilir.

Bu aşamalar her dilde aynı adlarla ve aynı sırayla ayrı ayrı görünmeyebilir. Örneğin bazı sistemler kaynak kodu önce ara koda dönüştürür ve yorumlayıcı ara kodu çalıştırır. Bazı uygulamalar da sözdizimi ağacını önceden oluşturup tekrar tekrar kullanır. Dolayısıyla "yorumlayıcı çalışırken analiz ve yürütme birlikte ilerler" demek genel bir açıklamadır; uygulamanın iç mimarisi bundan daha karmaşık olabilir.

Bir kodun yalnızca sözdiziminin doğru olması çalışacağı anlamına gelmez. Tanımsız bir değişken, uygun olmayan veri türleriyle işlem veya çalışma zamanında bulunamayan bir dosya gibi sorunlar, sözdizimi kontrolünden sonra ortaya çıkabilir.

Derleyiciyle farkı: iki ayrı kutu değil, iki farklı işlem biçimi

Derleyici, kaynak kodu çalıştırmadan önce başka bir gösterime dönüştüren araçtır. Bu çıktı doğrudan makine kodu olabileceği gibi bir ara kod da olabilir. Yorumlayıcı ise yürütme sırasında kaynak kodu veya ara gösterimi işleyerek programın çalışmasını sağlar.

Basitleştirilmiş karşılaştırma şöyledir:

  • Yorumlayıcıda çalıştırma isteği ile analiz ve yürütme arasında doğrudan bir ilişki vardır. Kod değiştirildiğinde yeniden çalıştırma sırasında ilgili analizler tekrar yapılabilir.
  • Derleyicide kaynak kodun önceden dönüştürülmesi ayrı bir aşama olarak gerçekleştirilir. Çalıştırma aşamasında hazır bir çıktı kullanılabilir.
  • Yorumlayıcı yaklaşımı etkileşimli denemeyi kolaylaştırır. Kullanıcı bir ifade yazıp sonucunu aynı oturumda görebilir.
  • Derleme aşaması; hata denetimi, optimizasyon ve hedef ortama uygun çıktı üretme gibi işlemleri çalıştırmadan önce yapabilir.

Bu ayrım bir performans veya dil sınıflandırması değildir. Bir dilin "yorumlanan dil" olarak anılması, o dilde yazılan her programın her sistemde yalnızca saf yorumlama ile çalıştığını göstermez. Java örneğinde kaynak kod genellikle önce bytecode biçimine derlenir; bytecode daha sonra Java Sanal Makinesi tarafından yürütülür ve uygulamaya bağlı olarak bazı bölümler çalışma sırasında optimize edilebilir. Benzer şekilde JavaScript motorları da yalnızca basit bir satır okuyucu gibi çalışmaz.

Bu yüzden sınav veya mülakatta en güvenli ifade şudur: Derleyici dönüşümü çoğunlukla çalıştırmadan önce yapan, yorumlayıcı ise kodun anlamını çalışma sırasında işleyip yürütmeye bağlayan araçtır. Gerçek sistemler bu iki yaklaşımı birlikte kullanabilir.

Hata türünü çalışma aşamasıyla eşleştirmek

Yorumlayıcıyı öğrenirken hatanın ne zaman ortaya çıktığını ayırt etmek gerekir. Sözdizimi hatası, dilin yazım kurallarına uymayan kodda görülür. Örneğin kapanmayan parantez veya eksik bir blok işareti, programın ilgili bölümünün anlamlandırılmasını engelleyebilir. Böyle bir durumda program yürütmeye başlamadan önce durabilir.

Çalışma zamanı hatası ise yapı biçimsel olarak kabul edildikten sonra ortaya çıkar. Sıfıra bölme denemesi, mevcut olmayan bir dosyaya erişme veya bir ismi tanımlamadan kullanma buna örnek olabilir. Programın önceki ifadeleri çalışmış, sorunlu ifade geldiğinde yürütme durmuş olabilir.

Mantık hatasında ise yorumlayıcı kodu kurallara uygun biçimde çalıştırır; fakat programcının kurduğu algoritma istenen sonucu üretmez. Örneğin iki sayının ortalaması istenirken toplamın yalnızca bir sayıya bölünmesi, sözdizimi açısından geçerli olabilir. Yorumlayıcı bu niyeti bilemez.

Bu ayrım hata ayıklama yöntemini belirler:

  • Sözdizimi hatasında parantez, girinti, işleç ve anahtar kelimeler incelenir.
  • Çalışma zamanı hatasında hata mesajındaki ifade, değişken değerleri ve veri türleri kontrol edilir.
  • Mantık hatasında beklenen sonuç ile gerçek sonuç karşılaştırılır; algoritmanın adımları tek tek izlenir.

Yorumlayıcının hata konumunu göstermesi yararlıdır; ancak gösterilen satır her zaman hatanın kaynağı olmayabilir. Sorun, o satıra daha önce yanlış değer aktarılması veya eksik bir fonksiyon çağrısı yapılması nedeniyle de oluşabilir.

Python, JavaScript, PHP ve Ruby için "yorumlayıcı dil" demenin sınırı

Mevcut kaynakta Python, JavaScript, PHP ve Ruby yorumlayıcılarla ilişkilendirilen dillere örnek verilmiştir. Bu örnekler, bu dillerin yaygın çalışma biçimlerini anlatmak için kullanılabilir; fakat dil ile dilin belirli yorumlayıcı uygulamasını birbirine eşitlememek gerekir.

Python programı, Python çalışma ortamı üzerinden yürütülür. Python kabuğunda tek bir ifade denenebildiği gibi bir dosya da çalıştırılabilir. JavaScript, tarayıcı içindeki motor veya sunucu tarafındaki bir çalışma ortamı tarafından yürütülebilir. PHP kodu çoğunlukla sunucu tarafında işlenir ve sonuç olarak tarayıcıya HTML gönderilebilir. Ruby de kendi çalışma ortamı aracılığıyla programların yürütülmesini sağlar.

Platform bağımsızlığı da koşulludur. Aynı kaynak kodun Windows, macOS ve Linux üzerinde çalışabilmesi için ilgili dil çalışma ortamının kurulmuş olması, kullanılan kütüphanelerin uyumlu olması ve işletim sistemine özgü dosya yolu veya donanım işlemlerinin sorun oluşturmaması gerekir. Yani yorumlayıcı, kaynak kodun platformlar arasında taşınmasını kolaylaştırabilir; tek başına her programın değişikliksiz çalışacağını garanti etmez.

Performans değerlendirmesinde de tek ölçüt "yorumlanan" veya "derlenen" etiketi olmamalıdır. Kodun yaptığı iş, kullanılan veri yapıları, kütüphaneler, giriş-çıkış işlemleri ve çalışma ortamının optimizasyonları sonucu etkiler. Yorumlayıcı tabanlı bir sistemde JIT derleme varsa, sık çalıştırılan bölümler çalışma sırasında makine koduna dönüştürülebilir. Bu nedenle "yorumlayıcılar her zaman yavaştır" ifadesi bilimsel olarak aşırı genellemedir; yalnızca belirli bir uygulamanın belirli koşullardaki performansı ölçülerek karar verilebilir.

Çözümlü örnek: değişken ve koşulun yürütülmesini izlemek

Verilenler:

puan = 72
gecme = 50
if puan >= gecme:
    sonuc = "Başarılı"
else:
    sonuc = "Tekrar dene"

Çözüm adımları:

  1. Yorumlayıcı ilk atamayı işler ve puan isminde 72 değerini çalışma zamanı ortamında tutar.
  2. İkinci atamada gecme ismine 50 değeri bağlanır.
  3. if ifadesindeki karşılaştırma değerlendirilir: 725072 \ge 50 sonucu doğrudur.
  4. Koşul doğru olduğu için ilk blok yürütülür; sonuc değişkenine "Başarılı" değeri atanır.
  5. else bloğu bu çalıştırmada yürütülmez. Çünkü iki alternatiften yalnızca koşula uyan dal seçilir.

Sonuç: sonuc değişkeninin değeri "Başarılı" olur.

Bu örnekte yorumlayıcının yaptığı iş yalnızca satırları okumak değildir. Değişken değerlerini saklar, karşılaştırma işlemini yapar ve koşulun sonucuna göre program akışını değiştirir. Eğer puan = 40 olsaydı karşılaştırma 405040 \ge 50 biçiminde yanlış sonuç verecek ve sonuc değeri "Tekrar dene" olacaktı. Eşik burada örneğe ait bir sayıdır; yorumlayıcı bu sayının eğitim kuralı olup olmadığını değerlendirmez, yalnızca yazılan karşılaştırmayı yürütür.

Çözümlü örnek: sözdizimi ile çalışma zamanı hatasını ayırmak

Verilenler:

adet = 3
fiyat = 20
ara_toplam = adet * fiyat
print(ara_toplam)
print(indirim)

Çözüm adımları:

  1. adet değişkenine 3, fiyat değişkenine 20 atanır.
  2. adet * fiyat işlemi değerlendirilir ve ara_toplam için 60 değeri elde edilir.
  3. İlk print çağrısı 60 değerini üretir.
  4. İkinci print çağrısında indirim ismi aranır. Kod parçasında bu isim için daha önce bir değer verilmediği görülür.
  5. Bu satırın yazım biçimi geçerli kabul edilse bile program çalışma sırasında tanımsız isimle karşılaşır ve hata verir. Önceki satırların çalışmış olması mümkündür.

Sonuç: İlk çıktı 60 olur; ardından indirim değişkeni tanımlanmadığı için çalışma zamanı hatası oluşur.

Düzeltme için eksik değer tanımlanabilir:

indirim = 5
print(indirim)

Bu örnek, hatanın kaynağını doğru adlandırmanın önemini gösterir. Eğer print(indirim biçiminde kapanmayan parantez olsaydı sorun sözdizimi aşamasında ortaya çıkardı. Eğer tüm kod çalışıyor fakat indirim hesabı yanlış yapılıyorsa bu kez mantık hatası söz konusu olurdu.

Sık yapılan hatalar ve karıştırılan kavramlar

  1. Yorumlayıcının her satırı doğrudan makine koduna çevirdiğini sanmak: Bu, öğretici ama eksik bir modeldir. Ara kod, sanal makine ve JIT derleme gibi katmanlar bulunabilir.

  2. Yorumlayıcı ile programlama dilini aynı şey sanmak: Python veya JavaScript birer dildir; yorumlayıcı ise o dili belirli bir ortamda çalıştıran uygulamadır. Aynı dilin farklı çalışma ortamları farklı iç mimarilere sahip olabilir.

  3. Her hatanın yorumlayıcı tarafından anında gösterildiğini düşünmek: Sözdizimi hatası çalıştırmadan önce, çalışma zamanı hatası yürütme sırasında, mantık hatası ise çoğu zaman yalnızca sonuçlar incelenince fark edilir.

  4. Platform bağımsızlığını garanti olarak görmek: Windows, macOS ve Linux üzerinde ilgili yorumlayıcı bulunmalı; dosya sistemi, işletim sistemi çağrıları ve bağımlılıklar da uyumlu olmalıdır.

  5. Derleyici ve yorumlayıcıyı kesinlikle birbirini dışlayan araçlar sanmak: Java gibi örneklerde kaynak kod ara koda dönüştürülebilir, ardından sanal makine bu ara kodu yürütebilir. Bir sistem hem önceden dönüşüm hem çalışma zamanı yorumlama kullanabilir.

  6. Yorumlayıcı kullanılan her programın daha yavaş olacağını söylemek: Performans; programın niteliğine, kullanılan uygulamaya ve JIT gibi optimizasyonlara bağlıdır. Böyle bir karar ölçüm yapılmadan verilmemelidir.

  7. Hata mesajındaki satırı doğrudan tek neden kabul etmek: Yorumlayıcı çoğu zaman hatanın gözlendiği konumu bildirir; yanlış değerin daha önce üretilmiş olması gibi nedenler de araştırılmalıdır.

Formül

Yorumlayıcının genel işlem akışı şu şekilde özetlenebilir: kaynak kod → analiz → çalışma zamanı değerlendirmesi → çıktı veya hata. Koşullu ifadelerde karar, yazılan karşılaştırmanın sonucuna bağlıdır; örneğin puangecmepuan \ge gecme doğruysa if bloğu, yanlışsa ve varsa else bloğu yürütülür.

Günlük hayatta

Bir alışveriş sitesinde ürün adını yazıp arama düğmesine bastığınızda, tarayıcıdaki JavaScript kodu arama kutusunun boş olup olmadığını kontrol edebilir. Kutu boşsa uyarı göstermek, doluysa arama isteği göndermek üzere iki farklı kod yolu çalışır. Bu davranış, JavaScript çalışma ortamının olay gerçekleştiğinde ilgili kodu analiz edip yürütmesine somut bir örnektir; arka plandaki motor yalnızca basitçe satır satır çeviri yapmakla sınırlı değildir.

Sınavda

TYT/AYT bilişim veya programlama sorularında "yorumlayıcı" ile "derleyici" karşılaştırılırken temel ipucu çalışma zamanıdır: yorumlayıcı kodu çalıştırma süreciyle birlikte işler; derleyici ise kaynak kodu önceden başka bir gösterime dönüştüren aşamayı ifade eder. Ancak seçenek "yorumlayıcı her satırı doğrudan makine koduna çevirir" veya "yorumlanan diller her zaman daha yavaştır" diyorsa bu ifadeler aşırı genellemedir. Java örneğinde kaynak kodun bytecode'a derlenip JVM üzerinde yürütülebilmesi, iki yaklaşımın birlikte kullanılabileceğini hatırlatır.

Sık sorulan sorular

Yorumlayıcı nedir?

Yorumlayıcı, bir programlama diliyle yazılan kaynak kodu çalışma zamanında analiz eden ve program davranışını yürüten yazılımdır. Her uygulamada işlemin biçimi aynı değildir; doğrudan yorumlama, ara kod yürütme ve JIT derleme birlikte bulunabilir.

Yorumlayıcı ile derleyici arasındaki en kısa fark nedir?

Derleyici dönüşümü çoğunlukla çalıştırmadan önce gerçekleştirir; yorumlayıcı ise kaynak kodun veya ara gösterimin yürütülmesini çalışma zamanındaki işleme bağlar. Gerçek uygulamalarda bu iki yaklaşım birlikte kullanılabilir.

Yorumlayıcı kullanan dillere hangi örnekler verilebilir?

Mevcut örnekler arasında Python, JavaScript, PHP ve Ruby bulunur. Buradaki ifade, bu dillerin yaygın çalışma ortamlarını anlatır; her uygulamanın iç mimarisinin yalnızca saf yorumlamadan oluştuğu anlamına gelmez.

Yorumlayıcı kodu her zaman satır satır mı çalıştırır?

Hayır. Satır satır anlatımı başlangıç için kolaylaştırıcıdır. Yorumlayıcı fonksiyon veya blok gibi birden fazla satırı birlikte analiz edebilir; ayrıca ara kod ve JIT derleme gibi teknikler kullanabilir.

Yorumlayıcı neden farklı işletim sistemlerinde çalışmayı kolaylaştırır?

Kaynak kod, ilgili işletim sisteminde kurulu uyumlu çalışma ortamı tarafından işlenebilir. Bu kolaylık; yorumlayıcının, kütüphanelerin ve işletim sistemine bağlı işlemlerin uyumlu olması koşuluna bağlıdır.

Sözdizimi hatası ile çalışma zamanı hatası arasındaki fark nedir?

Sözdizimi hatası kodun dil kurallarına uymadığını gösterir ve yürütme başlamadan ortaya çıkabilir. Çalışma zamanı hatası ise kod yürütülürken, örneğin tanımsız bir değişken kullanıldığında oluşabilir.

Kaynaklar
SıradakiDeğişken