Forum: Diğer Konular RSS
D ile Bir Programlama Dili Yapmak
Sayfa:  1  2  sonraki 
Avatar
huseyin #1
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D ile Bir Programlama Dili Yapmak
Tamam assembly konusundada araştırmalar yaptım (birçok eksiğim var farkındayım) syntaxlardan tutalımda code generation tekniklerine kadar kapsamlı bir araştırma peki sizce çılgın bir proje de olsa mümkün mü niye olmasın basit bir programlama dili amacım sadece bir deneme ancak d ile bunu başarmak için de desteklerinize ihtiyacım var
Huseyin
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
İşte bunu yapabilmek için önce şu 800. başlık olan konsol uygulamamızı ilerletelim...

Çünkü buradan girilen bir takım komutlarla D'de var olan olanakları çalıştırabiliriz. Sonra bakarsın Perl gibi bir script olabilir. Ama önce bir arabirime ihtiyacımız var. Gerçi bunu Fuzuli'de çok güzel yapmışlar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
huseyin #3
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet  o konuyu hatırlıyorum üzerinde tartışmıştık aslında mümkün bir olay sizce script dili mi yoksa derlemeli bir dil mi ?
nedenleri ile birlikte yanıtınızı alabilir miyim
O projeyi ilerletmenizde yardımcı olabilirim ancak konu hakkında bilgi sahibi değilim iron python gibi bir konsol mu olacak ? Yani girdiğimiz birşeyin sonucunu mu vermeli yoksa interpreter tipinde bir konsol mu ?
Huseyin
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Şimdi derlemi şeyler bizi aşar gibime geliyor. Sağlam assembly bilmek gerekir. Ama iki tür derlemeli dil olduğuna inanıyorum ki biri yalancı..:)

Yalancı olandan kastım script'i interpreter'in sonuna yapıştırıp derlenmiş havası veren uygulamalar. Ama önce kuralları belirlemeliyiz. Yani yapılacak şey basit bir bash script yazar gibi bir arabirim oluşturmak. Sonra bunu anlayıp yorumlayacak ve içeriğinde lexer olan (bu hiç kolay bir şey değil) bir şeyler yapmak.

Başlangıç std/json.d olabilir, çünkü basittir. Hemen gidip bu kütüphaneyi incele. Böylece kümeleme işaretleri, veri tipleri konusunda nasıl if'ler switch'ler kullanılmış göre. İşte bunun üzerine yeni şeyler inşaa edebiliriz..
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
huseyin #5
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
json u inceleyeceğiö lexer olaylarını biliyorum denemelerim oldu parser de lexer kadar zor malesef keşke bison flex gibi d ye göre de uygulamalar olsa dsource.org da gördüm ancak sanırım güncel değiller :(
derleme işi için gerçekten sağlam assembly gerekiyor özellikle yerel değişkenler ve stack korkunç
benim anlayamadığım nokta derleme olayı olmadan if yapısını nasıl işleteceğiz tree walker falan yazıyorlar mantığı ne onu anlayamıyorum malesef
Huseyin
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben bu konulara çok yabancıyım.

D'nin olanakları lexer ve parser'a gerek bırakmayacak kadar zengin olduğundan, metin halinde PEG (parsing expression grammer) düzeninde tarif edilerek dil oluşturulabiliyor:

  https://github.com/PhilippeSigaud/Pegged

Bütünüyle derleme zamanında! :)

Ali
Avatar
huseyin #7
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Gerçektende tam bir harika ancak kullanmayı öğrenmem gerekiyor bunu daha önce görseydim diğer denemelerimi d üzerinden geliştirmeyi düşünürdüm :) Teşekkür Ederim
Huseyin
Avatar
huseyin #8
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Peki Merak Ediyorum da değişkenleri nasıl bir biçimde tutabiliriz  fikirlerinizi alabilir miyim
Huseyin
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bir eşleme tablosunda tutabilirsin. Çoook uyduruk bir fikir:

enum Tür { tamsayı, kesirli, boolean }
enum Deyim { değişkenTanımı, döngü }
 
struct Değişken
{
    Tür tür;
    string isim;
    // ... başka? ...
}
 
import std.stdio;
 
void derle(File kaynakKod)
{
    Değişken[string] değişkenler;
 
    foreach (satır; kaynakKod.byLine()) {
        Deyim deyim;
        // ... satırı dilin kurallarına göre ayrıştır ...
 
        final switch (deyim) {
        case Deyim.değişkenTanımı:
            Değişken değişken /* = değişken bilgisini edin */;
 
            if (değişken.isim in değişkenler) {
                throw new Exception("Değişken zaten tanımlı");
 
            } else {
                değişkenler[değişken.isim] = değişken;
            }
 
            break;
 
        case Deyim.döngü:
            // ...
            break;
 
        // ...
        }
    }
}
 
void main()
{}

Ali
Avatar
huseyin #10
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet aslında güzel bir fikir ancak eşleme tabloları yokken ne şekilde tutuyorlardı gerçekten merak etmekteyim araştırdım ama kesin bir sonuç bulamadım ayrıca tree walker denilen olayın mantığını anlamak biraz zor yani label kavramına  derlemeden yorumlama anında atlamak :)
Huseyin
acehreli (Moderatör) #11
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
huseyin325325:
eşleme tabloları yokken ne şekilde tutuyorlardı

Eşleme tablosunu hash table veri yapısının karşılığı olarak kullanıyoruz. Diğer veri yapıları gibi bu da özel bir kısıtlaması bulunmayan her dilde gerçekleştirilebilir.

Dil böyle bir olanak getirmediğinde bir hash table yapısı yazılır ve kullanılır. Benim çalıştığım yerdeki C kütüphanelerinde bile böyle bir yapı var ama kullanımının ne kadar külfetli olduğunu anlatamam. :)

tree walker denilen olayın mantığını anlamak biraz zor

O zaman da bir ağaç yapısından bahsediyoruz.

label kavramına  derlemeden yorumlama anında atlamak

Hash table olsa gerçekten de nereyse hemen atlanır (tablodaki eleman adedinden bağımsız olarak). İkili ağaçta ise ağaçtaki eleman adedi N ise O(log N) karmaşıklığında atlanır (kabaca, 1000 eleman varsa düğümlerde 10 kere ilerleyerek (çünkü 2^^10 1024'tür)).

Eğer D'nin eşleme tablolarını kullanmak istemiyorsan bence bu işe başlamadan önce veri yapılarını öğrenmek isteyebilirsin. Erdem de şu sıralarda bununla eğleniyor. :)

Ali
Avatar
Salih Dinçer #12
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Eğer D'nin eşleme tablolarını kullanmak istemiyorsan bence bu işe başlamadan önce veri yapılarını öğrenmek isteyebilirsin. Erdem de şu sıralarda bununla eğleniyor. :)
Evet, bu konularda güzel başlıklar (tartışmalar) açmıştık. Özellikle "ikili arama" ve "bağlı liste" üzerine. Bağlı listeden kastım "linked list" ve mutlaka öğrenilmeli ki "tree walker" deyiminden ben bunu anlamaktayım. Yani bir ağaç yapısı var ve onun üzerinde yürüyoruz. Bu güzel bir şey...:)

Eğer, "Associative Array" ve "Hash Table" gibi şeylerle ilgileniyorsan şu kodu tersine mühendislik ile incelemeni tavsiye ediyorum: https://github.com/9rnsr/New-AA-implementation/blob/master…

Her ne kadar 1000 satırı aşan bir kod olsa da içindeki unittest'leri ve fazla satırları çıkarırsak sanırım 500 satır ya var ya yoktur. Buna rağmen içeriğinde asal sayılardan tutta da verilerin sıralanmasına kadar çok güzel bilgiler yer alıyor. Anlamadığın şeyler olursa kodun ilgili bölümünü ayrı bir başlık açıp bizlere sorabilirsin. Sanırım konuyu hatim etmemen için hiç bir sebep yok; belki biraz vakit lazım...:D
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #13
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer:
"ikili arama" ve "bağlı liste" üzerine. Bağlı listeden kastım "linked list" ve mutlaka öğrenilmeli ki "tree walker" deyiminden ben bunu anlamaktayım. Yani bir ağaç yapısı var ve onun üzerinde yürüyoruz.

Orada bir terim karışıklığı var. Bağlı liste (linked list) ve ağaç (tree) farklı veri yapılarıdır.

Ali
Avatar
huseyin #14
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet biraz daha araştırmam gerek bu konular çok sağlam bilgi istiyor :/ Sizden birşey rica edebilir miyim ?
Daha önceden incelediğim şeylerin arasında memphis( http://memphis.compilertools.net/ ) adında bir tree walker var ancak kullanımı hakkında çok bilgi sahibi olamadım bizim yapmamız gereken şey bu mu acaba ? (Ricam: Bunu incelemeniz :) )
Huseyin
Avatar
Salih Dinçer #15
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #13
acehreli on 2012-09-21, 12:31:
Salih Dinçer:
"ikili arama" ve "bağlı liste" üzerine. Bağlı listeden kastım "linked list" ve mutlaka öğrenilmeli ki "tree walker" deyiminden ben bunu anlamaktayım. Yani bir ağaç yapısı var ve onun üzerinde yürüyoruz.

Orada bir terim karışıklığı var. Bağlı liste (linked list) ve ağaç (tree) farklı veri yapılarıdır.

Ali
Farkı ne hocam?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 17:24:21 (UTC -08:00)