Arduino “expected ',' or ';' before ':' token” hatası, çoğunlukla bir komutun sonunda noktalı virgül yerine iki nokta kullanıldığında görülür. Çözüm için önce hata satırını, aynı komutun tamamını ve çevresindeki süslü parantezleri kontrol et; çünkü hata imleci gerçek yazım hatasından bir karakter sonra görünebilir.
Bu hata için önce hata satırının sonunda ':' yerine ';' kullanılıp kullanılmadığını kontrol et. Ardından bir önceki satırda eksik noktalı virgül veya dengesiz bir kod bloğu olup olmadığını incele.
Bu hata ne anlama gelir ve neden çoğunlukla oluşur?

Derleyici, Arduino kodunu okurken her karakterin bulunduğu konumda hangi sözdiziminin gelebileceğini değerlendirir. Mesajdaki expected ',' or ';' before ':' token ifadesi, derleyicinin bir virgül ya da noktalı virgül beklediği sırada iki nokta karakteriyle karşılaştığını anlatır.
Noktalı virgül, normal bir komutun bittiğini gösterir. Örneğin pinMode(ledPin, OUTPUT); satırında komut noktalı virgülle tamamlanır. Aynı satırın sonuna pinMode(ledPin, OUTPUT): yazıldığında iki nokta bu görevi taşımaz ve sözdizimi hatası oluşabilir. İki noktanın farklı sözdizimlerinde başka görevleri olabilir, ancak pinMode veya digitalWrite gibi komutları sonlandırmak için kullanılmaz.
Kod bloklarının sınırlarını ise süslü parantezler belirler. setup() ve loop() gibi fonksiyonlarda açılan her { parantezinin uygun yerde bir } paranteziyle kapanması gerekir. Eksik bir noktalı virgül ya da kapanmayan süslü parantez, derleyicinin sonraki satırları yanlış yorumlamasına ve iki noktayı beklenmeyen bir konumda görmesine yol açabilir.
Hata satırı ile gerçek hata kaynağı nasıl ayırt edilir?
Derleyici mesajındaki satır numarası ve hata imleci, derleyicinin okumaya devam edemediği konumu gösterir. Gerçek hata aynı satırdaki önceki karakterde veya bir önceki satırın sonunda bulunabilir. Bu nedenle yalnızca imlecin gösterdiği karakteri değiştirmek yerine ilgili komutun başlangıcına kadar geri dönmek gerekir.
Örneğin imleç iki noktanın altını gösteriyorsa sorun iki noktanın kendisi olabilir. Fakat bir önceki satırda eksik kalan noktalı virgül, derleyicinin iki noktaya gelene kadar ifadeyi tamamlayamamasına da neden olabilir. Aşağıdaki düzeltilmiş örnekte komutlar noktalı virgülle biter ve fonksiyon blokları dengeli biçimde kapanır:
const int ledPin = 7;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Bu kod için beklenen derleme sonucu, iki nokta kaynaklı sözdizimi hatasının oluşmamasıdır. Teşhis sırasında şu sırayı izleyebilirsin:
- İşaretlenen karakteri incele ve beklenmeyen bir
:olup olmadığını kontrol et. - Aynı komutun başlangıcına dönerek parantezleri ve virgülleri eşleştir.
- Bir önceki satırın sonunda noktalı virgül bulunup bulunmadığına bak.
- Yakındaki süslü parantezlerin açılıp kapandığını kontrol et.
Bu sıralı yaklaşım, hatayı tahmin etmek yerine küçük adımlara ayırır. Benzer problem çözme alışkanlıklarını geliştirmek için dilden bağımsız Algoritmik Düşünme Testi üzerinden farklı düşünme sorularını da deneyebilirsin.
LED örneğindeki iki nokta nasıl düzeltilir?

pinMode() çağrısı tamamlandığında satır noktalı virgülle bitmelidir. Satırın sonunda iki nokta kullanılırsa derleyici, beklediği sonlandırıcı yerine farklı bir işaret gördüğü için expected ',' or ';' before ':' token hatasını gösterebilir.
Hatalı: pinMode(13, OUTPUT):
Doğru: pinMode(13, OUTPUT);
Bu hata için önce hata satırının sonunda ':' yerine ';' kullanılıp kullanılmadığını kontrol et. Hata imleci iki noktayı gösterse de asıl düzeltme, komutun sonundaki sonlandırıcıda yapılır. 13 veya OUTPUT değerlerini değiştirmek yerine satırın son işaretini düzeltmelisin.
Aşağıdaki örnekte setup() ve loop() işlevleri doğru süslü parantezlerle birlikte gösterilmiştir:
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Bu kodda başka bir sözdizimi hatası yoksa beklenen sonuç, ilgili token hatasının kaybolması ve derlemenin tamamlanmasıdır. Derleyicinin imleci : karakterinin altına yerleştirmesi, hatayı fark ettiği konumu gösterir. Gerçek düzeltme ise aynı satırdaki komut sonlandırıcısını ; yapmaktır. Benzer biçimde, eksik noktalı virgül veya kapanmayan parantez bir önceki satırdaysa imleç hatayı takip eden satırda da görünebilir.
Auto Format ile son kontrol nasıl yapılır?
Arduino IDE'de bu işlem Tools > Auto Format adıyla Tools menüsünden çalıştırılır. Auto Format, kodun girintilerini düzenleyerek iç içe blokların yapısını daha görünür hâle getirir. Böylece eksik ya da fazla kullanılan süslü parantezleri fark etmek kolaylaşır. Ancak iki noktayı noktalı virgüle çeviren otomatik bir sözdizimi düzeltmesi yapmaz.
Son kontrolü şu sırayla yapabilirsin:
- Hata mesajındaki ilk ayrıntılı satırı oku ve işaretlenen kod satırını bul.
- Hata satırında iki nokta ile noktalı virgülü karşılaştır.
- Hata satırından önceki satırın sonunu inceleyerek eksik bir sonlandırıcı olup olmadığını kontrol et.
{ve}süslü parantez çiftlerini açılma ve kapanma sırasıyla denetle.- Tools > Auto Format işlemini uygula.
- Kodu yeniden derle.
- Hata devam ederse, mesajda kalan ilk ayrıntılı hatadan devam et.
Benzer derleme ve sözdizimi sorunlarını karşılaştırmalı örneklerle incelemek için Arduino hata ayıklama yazılarına göz atabilirsin.
Sık Sorulan Sorular
İki noktayı noktalı virgülle değiştirdikten sonra hata sürüyorsa nereyi kontrol etmeliyim?
Hata satırının hemen üstündeki satırın sonunu, kapanmayan normal parantezleri ve ilgili kod bloğunun süslü parantezlerini kontrol et. Ardından kodu yeniden derleyerek mesajda görünen ilk ayrıntılı hatadan ilerle.
Derleyicinin işaretlediği satır her zaman hatanın başladığı satır mıdır?
Hayır. Derleyici bazen hatayı, önceki satırdaki eksik noktalı virgül veya kapanmayan parantez nedeniyle kodu artık yorumlayamadığı ilk noktada gösterir. Bu nedenle işaretlenen satırla birlikte bir önceki satırı ve çevresindeki bloğu da incele.
Auto Format sözdizimi hatasını otomatik olarak düzeltir mi?
Hayır. Auto Format girintileri düzenler ve blok yapısını görünür kılar. İki nokta ile noktalı virgül gibi sözdizimi karakterlerini kontrol edip doğru olanla değiştirmez; gerekli düzeltmeyi elle yapıp kodu yeniden derlemelisin.
Önce komut sonlandırıcılarını, ardından önceki satırı ve süslü parantezleri kontrol ederek hatanın kaynağına adım adım ulaşabilirsin.