Jump to content
senoleker

brainfuck programlama dili ve Excel VBA yorumlayıcı

Önerilen İletiler

senoleker    0

Brainfuck, "ezoterik" diye adlandırılan programlama dillerinden en beğendiğim dil. Diğer ezoterik diller genellikle "işi zorlaştırmak" amacıyla yapılmış ama brainfuck, işi "kısaltmak" için yapılmış. Olabildiğince küçük bir interpretter'a sahip. O kadar basit ki, bu dil için yazılan bir yorumlayıcı 200 byte'ın altında olabiliyor.

Dilin sadece sekiz tane komutu var ve öğrenmesi çok kolay. Komutlar da "kısa" olsun diye tek bir karakterden oluşuyor: < > + - . , [ ]
Mantık da şu şekilde: 30000 adet hücremiz ve bir işaretçimiz var. İşaretçi, bu hücrelerden birini gösteriyor. Her bir hücre 0-255 arası değer alabiliyor.
Başlangıçta işaretçi en baştaki hücrede ve tüm hücrelerin içeriği sıfır.
> komutu ile işaretçi, bir sonraki, < komutu ile de bir önceki hücreye geçiyor.
+ komutu, işaretçinin gösterdiği belleği bir arttırırken, - komutu bir azaltıyor.
. komutu, işaretçinin gösterdiği hücreyi YAZIYOR
, komutu ise klavyeden (ya da giriş biriminden diyelim) girilen değeri işaretçinin gösterdiği hücreye yazıyor.
[ komutuna geldiğimizde, eğer işaretçinin gösterdiği hücre sıfır ise, bundan sonraki ] komutuna gidiliyor. (Burada iç içe parantezlere dikkat edin)
] komutuna geldiğimizde, eğer işaretçinin gösterdiği hücre sıfır DEĞİLSE, bundan ÖNCEKİ [ komutuna gidiyoruz.
Dilin tamamı bu. Artık bir program bile yazabiliriz :)

Örneğin 0. ve 1. hücrelerde sayılar olsun, işaretçimiz sıfırıncı hücreyi gösteriyor olsun ve biz 0. ve 1. hücreleri toplamak isteyelim. Sonuç da sıfırıncı hücrede olsun:
>[<+>-]
hepsi bu. O kadar da zor değil sanırım.
Şimdi bu program nasıl çalışıyor onu anlatalım:
Yöntemimiz şu olacak:
Birinci hücreyi bir azaltıp sıfırıncı hücreyi bir arttıracağız. Ta ki birinci hücre sıfır olana dek bunu tekrar ettiğimizde, toplama işlemi gerçekleşmiş olur.
Örnek:
9 3
10 2
11 1
12 0
9+3=12
Şimdi bu "program"i yorumlayıcı tarafından nasıl yorumlanıyor onu inceleyelim:
İşaretçimiz sıfırıncı hücrede iken > ile birinci hücreye geçiyoruz. Ardından [ komutu geliyor. Eğer işaretçinin gösterdiği hücre (1. hücre) sıfır ise, ] komutuna, yani programın sonuna gidecek. Çünkü bir sayıyı sıfırla topladığımızda bir şey değişmez.
Ama birinci hücre sıfır değilse, parantezin içine girecek. Buraya girdiğimize göre, birinci hücre sıfır değildir. O halde sıfırıncı hücreye bir şeyler eklememiz gerekecek. + ile sıfırıncı hücreye bir ekleyip > ile birinci hücreye geçerek onu da - komutu ile bir azaltıyoruz. Sonra gelen ] komutu ise, işaretçinin gösterdiği (birinci) hücrenin değeri henüz sıfır olmadı ise, [ komutuna geçerek, birinci hücre sıfır olana dek işlemi tekrarlayacaktır.

 

Ekte, kendi yazdığım bir excel dosyası var. Bu excel dosyası, GÖRSEL bir brainfuck yorumlayıcı. Burada istediğiniz bir programı çalıştırıp sonuçlarını görebilir, yazdığınız kodları deneyebilir, debug edebilirsiniz. Burada amaç programları "çalıştırıp kullanmak" değildir. Bunu yapan çok sayıda yazılım var. Ekteki excel dosyası, kodun çalışmasını göstermek içindir, adım adım göstererek çalışır, bu yüzden çok yavaştır.

Excel programının kullanımı:
Öncelikle Excel size, dosyayı açtığınızda VBA scriplerini çalıştır / engelle sorusunu soracak. Buna doğal olarak "çalıştır" demeniz gerekiyor.

Anlayamadığım bir şekilde form üzerindeki butonlar kimi zaman basılı gibi görünüyor, ama bu çalışmasına engel olmadığı için üzerinde durmadım. Sorunu bulursanız buradan bildirin ki düzeltelim.

Programda başlangıçta yukarıdaki toplama kodu ve ilk iki hücrede de örnekteki gibi 9 ve 3 değerleri var. Dolayısı ile "step" düğmesine basarak her seferinde bir adım ilerleterek kodun nasıl çalıştığını, işaretçinin ve hücre değerlerinin nasıl değiştiğini izleyebilirsiniz.

İsterseniz doğrudan Run ALL düğmesine basarak adım adım değil de tüm kodu baştan sona işletebilirsiniz.

CLS düğmesi çıktı ekranını temizler, reset ise programı ve işaretçiyi başa alır ve tüm hücreleri sıfırlar.

Save düğmesi ekrandaki programı diske kaydederken Load düğmesi de diskten bir program yükler. Yüklenecek ya da kaydedilecek dosyanın yol+ad bilgisi, sarı renkli "FileName" kutusundadır.

En alttaki <, >, +, - düğmeleri ise, işaretçi ve hücreleri manuel olarak değiştirmeye yarar.

Hücreler, B stunu boyuncadır. Ayrıca B stunundaki her hücrenin ASCII karşılığı da A stunundadır. Böylece hem sayı hem ASCII olarak izleyebilirsiniz.

İsterseniz kodunuzu canlı olarak excel tablosu üzerinde değiştirebilir / geliştirebilirsiniz.

En güzeli de, program üzerinde bir hücreye çift tıklarsanız, orada breakpoint koymuş gibi program o hücreye kadar çalışır ve orada durur. Durduktan sonra çift tıkladığınız için hücrenin içine girmiş olacaksınız, oradan esc ile çıkabilirsiniz. Bu sırada hücre içeriğini bozmamaya dikkat edin.

Excel tablosu ile ya da brainfuck ile ilgili sorularınız olursa, bunun altına yazabilirsiniz.

İyi eğlenceler.

bf.xlsm

İletiyi paylaş


İletiye bağlantı
Sitelerde Paylaş

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Misafir
Bu konuyu yanıtla

×   Yapıştırdığınız içerik biçimlendirme içeriyor.   Biçimlendirmeyi Temizle

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Önceki içeriğiniz geri yüklendi.   Editör içeriğini temizle

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları