Menu
Coddy logo textTech

Sözdizimi Hatası (Syntax Error) Nedir?

Sözdizimi hatası (syntax error), eksik bir iki nokta, parantez ya da tırnak işareti gibi, kodun yapısındaki ve programlama dilinin dilbilgisi kurallarını bozan bir hatadır. Derleyici ya da yorumlayıcı programı, tek satırı bile çalışmadan reddeder.

Yazan Kevin Spektor, Kurucu ortak ve CTO

Güncellendi: 24 Eylül 2026

Python programının tek bir satırını bile çalıştırmadan önce dosyanın tamamını okur ve dilin dilbilgisine uyup uymadığını kontrol eder. Bir satır bu dilbilgisini bozuyorsa hiçbir şey çalışmaz. Bu programı çalıştır ve neyin olmadığına dikkat et: ilk print hiçbir şey yazdırmaz.

  File "main.py", line 4
    if temperature > 30
                       ^
SyntaxError: expected ':'
  1. satır tamamen geçerli, yine de "Checking the temperature" çıktıda yok. Python dosyayı bir bütün olarak reddetti, çünkü bir if satırı iki nokta ile bitmek zorunda. 30'dan sonra : ekle, tekrar çalıştır; iki satır da yazdırılır.

Sözdizimi hatası nasıl tespit edilir

Her programlama dilinin bir dilbilgisi vardır: hangi kelimelere izin verildiği, parantezlerin nerede açılıp kapandığı, if'ten sonra ne gelmesi gerektiği. Bunu kontrol eden programa ayrıştırıcı (parser) denir ve kaynak kodu bir makinenin çalıştırabileceği bir şeye dönüştürmenin ilk aşamasında çalışır.

  1. Tokenizer metni token'lara böler: if, temperature, >, 30 ve devamı.
  2. Ayrıştırıcı token'ları sırayla okur ve dilbilgisine oturtur. if temperature > 30'dan sonra bir : bekler ama satırın sonuyla karşılaşır.
  3. Durur ve pes ettiği yeri bildirir: dosyayı, satır numarasını ve o konumun altında bir şapka işareti (^).
  4. Ayrıştırma başarısız olduğu için kod üretilmez, dolayısıyla programın hiçbir satırı çalışmaz.

CPython'da ayrıştırıcı her script başlattığında çalışır. Ayrı bir derleme adımı olan dillerde bu kontrolü derleyici yapar: gcc, clang ve javac tek bir sözdizimi hatası kaldığı sürece program üretmeyi reddeder. Bu yüzden sözdizimi hataları derleme zamanı hataları arasında sayılır; program çalışırken ortaya çıkan çalışma zamanı hatasının tersine.

Python'da sık görülen sözdizimi hataları

Yeni başlayanların gördüğü sözdizimi hatalarının çoğunun arkasında bu hatalar vardır; yanlarında Python 3.12'nin yazdırdığı mesajın birebir hali.

KodMesajÇözüm
if x > 3SyntaxError: expected ':'if, for, while, def ve class satırlarını : ile bitir
print("Hi"SyntaxError: '(' was never closedAçtığın her parantezi kapat
name = "AdaSyntaxError: unterminated string literal (detected at line 1)Tırnak işaretini kapat
if x = 5:SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?Karşılaştırmayı == ile yap
print "Hi"SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?Python 3 print(...) ister
if a > 0 && b > 0:SyntaxError: invalid syntaxPython and, or ve not kullanır
Altında girintili satır olmayan bir ifIndentationError: expected an indented block after 'if' statement on line 1Gövdeyi dört boşlukla içeri al

IndentationError bir tür SyntaxError'dır: Python'da girinti dilbilgisinin parçasıdır.

Her yazım hatası bir sözdizimi hatası değildir. pritn("hello") dilbilgisine tamamen uyar, çünkü ardından parantez gelen bir isim bir fonksiyon çağrısıdır. Python pritn adında bir fonksiyon olmadığını ancak o satıra geldiğinde fark eder ve NameError: name 'pritn' is not defined. Did you mean: 'print'? hatasını fırlatır. Bu bir çalışma zamanı hatasıdır ve üstündeki satırlar çoktan çalışmıştır.

Bildirilen satır neden yanlış olabilir

Ayrıştırıcı devam edemediği noktayı bildirir; bu her zaman hatanın olduğu nokta değildir. Klasik örnek kapanmamış bir parantezdir: ayrıştırıcı parantezin hiç kapanmadığını, kapanması gereken yeri geçene kadar bilemez.

  File "main.py", line 1
    prices = [4.50, 3.20, 7.80
             ^
SyntaxError: '[' was never closed

Python 3.10 ve sonrası 1. satırdaki açılış [ işaretini gösterir. Python 3.9 ve öncesi yalnızca 2. satırda, yani asıl hatadan sonraki satırda invalid syntax bildirirdi. Bu yüzden bildirilen satır doğru görünüyorsa bir üstündeki satırın sonuna bak.

Başka ayrıştırıcılar da aynı şekilde davranır. FROM yanlış yazılmış SELECT name FORM users; sorgusunda SQLite, FORM'u name sütunu için bir takma ad (ikinci bir isim) olarak okur ve ancak bir kelime sonra hata verir:

Parse error near line 1: near "users": syntax error
  SELECT name FORM users;
                   ^--- error here

C, Java ve JavaScript'te sözdizimi hataları

Derlenen diller sözdizimi hatalarını çalıştırırken değil, derlerken bildirir. İşte noktalı virgülü olmayan bir tanımlama, Clang ile derlenmiş (macOS'ta gcc komutunun çalıştırdığı derleyici):

#include <stdio.h>

int main(void) {
    int count = 3
    printf("%d\n", count);
    return 0;
}
main.c:4:18: error: expected ';' at end of declaration

javac aynı hatayı Java'da error: ';' expected olarak bildirir ve hiçbir .class dosyası yazılmaz. C'de tek bir eksik süslü parantez dosyanın ilerisinde bir düzine hata üretebilir. İlkini düzelt ve tekrar derle, çünkü diğerleri çoğu zaman onun sonucudur.

V8 gibi JavaScript motorları da, tıpkı Python gibi, bir script'i çalıştırmadan önce tamamını ayrıştırır. Node.js bu dosyayı "start" yazdırmadan reddeder:

console.log("start");
if (x > 1 {
  console.log("big");
}
SyntaxError: Unexpected token '{'

Tarayıcıda bir sözdizimi hatası yalnızca o script dosyasının çalışmasını durdurur; sayfadaki diğer script'ler çalışmaya devam eder.

Sözdizimi hatası nasıl düzeltilir

  1. Önce mesajın son satırını oku. Sorunu adıyla söyler: eksik bir :, kapanmamış bir (, beklenmeyen bir token.
  2. Bildirilen satıra git ve şapka işaretine bak. Satır doğru görünüyorsa bir üstündeki satırı kontrol et.
  3. Çiftleri kontrol et. Her (, [, { ve tırnak işaretinin bir eşi olmalı. Çoğu editör, imleç bir parantezin yanındayken eşini vurgular.
  4. Dilin istediği noktalama işaretlerini kontrol et: Python'da iki nokta ve girinti, C, Java ve JavaScript'te noktalı virgül ve süslü parantez.
  5. Yalnızca ilk hatayı düzelt, sonra tekrar çalıştır. Sonraki mesajlar çoğu zaman ilkinden kaynaklanır.
  6. Sözdizimi renklendirmesine dikkat et. Kapanmamış bir tırnak işaretinden sonra dosyanın geri kalanı genelde string rengine bürünür; bu da sana nerede başladığını gösterir.

İyi haber şu ki sözdizimi hataları düzeltmesi en kolay türdür: araç bir şeylerin yanlış olduğunu ve aşağı yukarı nerede olduğunu söyler. Daha zor türler sonra, kod çalışırken gelir.

Sırada ne var

Ayrıştırıcıdan geçen bir program çalışırken yine de çökebilir; bu bir çalışma zamanı hatasıdır. Sonuna kadar çalışan ama yanlış cevap yazdıran bir programda mantık hatası vardır ve o sayfa üç türü tek bir tabloda karşılaştırır. Dilbilgisi kurallarının kendisi için Python sözdizimi ya da C sözdizimi sayfasını oku ve bunları Python kursunda pratik et.

Sıkça Sorulan Sorular

Sözdizimi hatasına bir örnek verir misin?
print("Hello" satırında kapanış parantezini unutmak bir sözdizimi hatasıdır; Python'da iki noktası olmayan bir if satırı da öyle: if x > 3. C ve Java'da en yaygın olanı, bir ifadenin sonundaki eksik noktalı virgüldür. Her durumda kod dilbilgisine uymadığı için çalışamaz.
Sözdizimi hatası ile anlamsal hata (semantic error) arasındaki fark nedir?
Sözdizimi hatası dilbilgisini bozar, bu yüzden kod ayrıştırılamaz bile. Anlamsal hata ise dilbilgisi açısından doğru ama anlamı yanlış olan koddur. Bazı kitaplar bu terimi derleyicinin reddettiği tip hataları için kullanır, örneğin Java'da bir int değişkenine metin atamak; bazıları ise mantık hatasının başka bir adı olarak kullanır.
C dilinde sözdizimi hatası nedir?
C'de derleyicinin ayrıştıramadığı koddur; çoğu zaman eksik bir noktalı virgül, eşi olmayan bir süslü parantez ya da yanlış yazılmış bir anahtar kelime. gcc ve clang dosyayı, satırı ve sütunu yazdırır, örneğin main.c:4:18: error: expected ';' at end of declaration, ve her hata düzeltilene kadar çalıştırılabilir dosya üretmez.
Python sözdizimi hatalarını neden kendisi düzeltmiyor?
Çünkü çoğu sözdizimi hatasının birden fazla olası düzeltmesi vardır ve yanlış bir tahmin programın anlamını değiştirir. Kapanmamış bir köşeli parantez birinci öğeden sonra da kapanmak istenmiş olabilir, onuncudan sonra da. Güncel Python, Did you mean print(...)? gibi olası bir düzeltme önerir ama kararı sana bırakır.
Hesap makinesinde syntax error ne demek?
Koddakiyle aynı anlama gelir: yazdığın ifade hesap makinesinin kurallarına uymuyor, bu yüzden hesaplanamıyor. Tipik nedenler kapanmamış bir parantez, art arda iki işlem işareti ya da negatif işaretin gerektiği yerde çıkarma tuşunu kullanmaktır. Örneğin bir TI-84 ERR:SYNTAX gösterir.
Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA