Merhaba panpalarım,
Daha önce AVR için bytecode interpreted bir dil yazdığımdan bahsetmiştim, Assembler'ın kodunda ufak bir sıkıntı yaşadım.
Bahsettiğim kod şu:
https://hastebin.com/umucubebaj.cpp
Ne işe yaradığına gelirsek:
Bu fonksiyonu komutları işlerken çağıracağım, örneğin MOVE BYTE 0 #10 komutunu işlerken çağırdığımda "0"ı TYPE_IMM olarak, "#10"u TYPE_MEM olarak döndürmesini istiyorum.
Yani sırasıyla get_type("0") ve get_type("#10") olarak iki çağrı yapıldığında fonksiyon sırasıyla TYPE_IMM ve TYPE_MEM olarak değer döndürmeli.
Kısacası sayının başında # veya $ varsa TYPE_MEM, yoksa TYPE_IMM döndürmesini istiyorum.
Buraya kadar sorun yok, mesele hata kontrolünde. Eğer MOVE BYTE 0 $iNCi ya da MOVE BYTE SERKAN #0 yazarsam ne olacak?
Bunun için anlayacağınız üzere stringi sayılar harici bir şey bulması için taratıyorum fakat aynı kodu iki kere kullanmak güzel görünmüyor.
Fonksiyonun yaptığı basit, eğer ilk karakter harici karakterlerin tamamı rakamsa ve ilk karakter # veya $ ise TYPE_MEM döndürüyor, bu koşul sağlanmazsa ve karakterlerin tamamı rakamsa TYPE_IMM döndürüyor, bu koşul da sağlanmazsa derleme hatası veriyor.
Fakat taramayı iki defa yapmam gibi sebeplerden bir türlü hoşuma gitmedi. Bunu nasıl daha güzel ve düzgün görünecek şekilde yazarım?