Derleyici(compiler) tasarımı hakkında

Başlatan Gökhan BEKEN, 17 Haziran 2010, 21:23:30

Gökhan BEKEN

s.a hocalar ve arkadaşlar öncelikle regaib kandilinizi kutlarım
herhangi bir dil üretmek için
mesela
denetleyici="16f84";
degisken a,b;
degisken i;

basla;

a=5; b=5;
eger(a=b)
{
   porta=10101010;
}
dongu(i=0;i=10) //açıklama 1 den 10 a kadar say
{
 portb=i;
}
son;



gibi birşey yapmak için kodları nasıl ayırt edebiliriz. Mesela derleme görevi verildiğinde porta=10101010; satırını nasıl anlarız. Standart string fonksiyonlar yeter mi?
Özel mesaj okumuyorum, lütfen göndermeyin.

serdararikan

buna benzer bir deneme yapmıştım.bence ilk önce oturup kullanacağın dilin tüm anahtar kelimelerini tesbit etmen lazım.daha sonra özel işaretleri tanımlaman lazım örneğin C deki ";" gibi.... bunların ışığında bi çekirdek hazırlayabilirsen daha sonra include dosyaların ile çekirdeğini zenginleştirebilirsin.


Gökhan BEKEN

#3
Şu an en merak ettiğim şey şu
eğer bunu yapabilirsem bu işi biraz geliştirebilirim

program çalıştığında şimdilik 1 adet text box ve 1 adet buton olsun
adam text box içine
beklet(100);
yazsın ve butona bassın
bastıktan sonra program messagebox ile cevap versin:
kullandığınız komut "beklet" ,verdiğiniz değer "100"
eğer noktalı virgül koymadıysa hata versin.

Bunu nasıl yapabiliriz? Bence bu konuda ülkemizde büyük bir açık var. Belkide istersek açık kodlu(özgür) güzel bir Türkçe pic programlama aracı yapılabilir. Kodları anlayabildikten sonra assembly diline çevirmek kolay önemli olan yukarıdaki verdiğim örnekteki gibi kodları yorumlamakta.

Katkılarınızı bekliyorum.
Özel mesaj okumuyorum, lütfen göndermeyin.

radres

Komutu karakter karakter okutup belli işarete gelene kadar alırsın. Örneğin (,[,],) gibi işaretlere. Bu işaretlere kadar gelen karakterleri komut olarak yorumlarsın. Sonra okunan komutun alacağı parametre sayısını veri tabanından okutup kullanıcının girdiği parametre sayısı ile karşılaştırırsın. Eksik veya fazla girmişse uyarı veya hata verdirirsin. Bunun gibi olabilir gibi geliyor bana. Tabi derleme işlemleri için daha bir çok ayrıntı vardır. Ama bir yerden başlamak lazım...

M_B

Örnek olması acısından Jalv2 nin acık kaynak kodlarını ınceleyebilirsin.
Derleyici C Dilinde yazılmış.

http://www.casadeyork.com/jalv2/  linkten
Source kısmındaki
archive/jalv24nsrc.zip  dosyayı indirip inceleyin.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

controller

Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

orhanc

i'm doing nothing... Giddy Up  http://www.drorhan.com

Gökhan BEKEN

arkadaşlar
farz edelim
bütün komutları sorusuz bir şekilde çevirdik
assemly komutlar richTextBox2
içinde duruyor
bunları nasıl hex' çevirebilirim

bu özellik isiste var
C:\Program Files\Labcenter Electronics\Proteus 7 Professional\Tools\MPASM
buraya bakarsanız proteusun dosyaları arasında MPASM dosyaları var

isiste pic' .asm uzantılı bir dosya yüklendiğinde otomatik olarak hex'e çeviriyor
bende bunu programımda yapmak istiyorum

nasıl yapabilirim?
Özel mesaj okumuyorum, lütfen göndermeyin.


Gökhan BEKEN

açıkçası birşey anlamadım
Kolay bir yolu veya hazır örneği varsa uğraşmama gerek kalmaz
Çünkü uğraşacak daha bir çok bölüm var projeyle ilgili.
Yavaş yavaş gelişme kaydediyorum.
Bu dediğim hex çevirme ise en en en bilmediğim kısım bu kısma biraz daha yardım ederseniz sevinirim.
Özel mesaj okumuyorum, lütfen göndermeyin.

orhanc

i'm doing nothing... Giddy Up  http://www.drorhan.com

sigmoid

assembly kodunu hex'e dönüştürmek için 2 aşamaya ihtiyacın var.

2. aşaması hex dosyasının formatı hakkında,yanlış hatırlamıyorsam intel hex file diye geçiyor. microchip'in mpasm veya linker datasheetinde bir yerde görmüştüm. Tam olarak hangi datasheette bu dosya formatının ayrıntılarını gördüğümü kesin olarak söyleyemem.

ilk aşama ise assembly komutlarının opcode çevrilmesidir. Bildiğimiz gibi PIC16 serisinde opcodelar 14bit uzunluğunda. Herhangi bir PIC'in data sheetini açıp INSTRUCTION SET SUMMARY kısmına bakarsan, orada her komutun karşılığı olan opcode görürsün. Burada örnek olması açısından BSF komutunu vereceğim

komut:

BSF f,b

f burada file register, b ise kacıncı bitin set edileceğini gösteriyor. Opcode karşılığı ise
0101bbbfffffff

dür

Herkomutun başındaki 1 ve0 ların farklı olduğunu datasheette fark etmişsindir. 0101 ile başlayan opcode BSF demektir.
BSF 0x20,3 komutunu opcode çevirmek için 0x20 ve 7 yi önce binaryye çevir. bbb ile ifade eden yere bit değeri, ffffff ile ifade edilen yere file registerının adresi yani 0x20 yazacaz

0x20 = 0b010 0000
7=0b111

sonuç olarak BSF karşılığı

0101 111  0100000

Kolay gelsin.



sigmoid

çalışmalar hangi aşamada? Yazın fırsat bulunca benzer bir şeylerde ben yapmayı düşünüyorum.