Bir programlama dilini kendisiyle derleyin


10

Ben bir bilgisayar bilimi öğrencisiyim. Kendi programlama dilimi oluşturmak istiyorum (Birkaç talimat içeren temel bir dil).

Sözdizimsel bir çözümleyicinin nasıl yapılacağını biliyorum, zaten Perl'de yaptım. Bir makalede, derleyici hakkında bir şey okudum, kendi içinde bir derleyici yapılır.

Örneğin C derleyicisi C dilinde yazılmıştır. Nasıl mümkün olabilir? Kendi dilimi yapabilirim ama nasıl yürütebileceğimi bilmiyorum? Herhangi bir fikir?

Bu gerçekten iyi bir soru ve proje için bir blog yazabilirim.


İnsanlar nasıl önyükleme yapacağını açıkladı ama neden ihtiyacın var? C, Perl veya başka bir şeyle yazılmış bir derleyici kullanarak dilinizi derleyememenizin hiçbir nedeni yoktur. Tabii ki, kendi dilinizde yazılmış bir derleyiciye sahip olmak güzel olurdu, ancak bu çok fazla iş olurdu - bunu elde etmek için en az iki derleyici yazmanız gerekir (biri C / Perl / her neyse, biri senin dilin).
David Richerby

Hmm .. Sanırım ilk derleyicimi C dilinde yazacağım ve kendi dilimde bir seconde yazacağım. Küçük bir programlama dili oluşturmak gerçekten ilginç, bilgisayar bilimi hakkında çok şey öğrenebiliriz
BaptisteL

Yanıtlar:


13

Hile önyükleme . Öncelikle diliniz (veya bir altkümesi) için başka bir dilde bir derleyici yazarsınız. Daha sonra kendi diliniz için bir derleyici (veya zaten işleyebileceğinizin büyük bir alt kümesi) yazarsınız. Yeni derleyiciyi derlemek için eski derleyiciyi kullanırsınız ve sonra yeni derleyici kendini derleyebilir.


Yani, C kullanarak ilk derleyici oluşturabilir ve bir dahaki sefere derleyici v2 v1 ile derleyecek? Ama bir sorun var, derleyicinin bir sorunu olmadığını nasıl bilebilirim? Kaynak kodumu derleyiciye dönüştürmem gerekiyor mu? Ya da başka bir şey?
BaptisteL

2
Derleyicinin herhangi bir sorunu olmadığını nasıl bilebilirim? Daha genel olarak, bir program yazdınız; böcek olmadığını nereden biliyorsun? Yapmazsın. Bazı testler yazıyorsunuz ve en iyisini umuyorsunuz. Kaynak kodumu montaja dönüştürmem gerekiyor mu? Kesinlikle hayır. C derleyicisine güvenebilirsiniz. Aynı şeyi yapıyorsunuz, ancak montaj C (veya seçtiğiniz başka bir dil) ile değiştiriliyor.
Yuval Filmus

Tamam becerilerime güvenmek zorunda kaldım ^^ Sürecin derleyiciyi yapmasını istemek istedim. Bir derleyicinin ne yaptığını gerçekten anlamıyorum, sözdizimsel ve sözlüksel analiz tamam ama sonraki ??
BaptisteL

Sonra kod üretirsiniz. Makine kodu oluşturma ayrıntılarına girmek istemiyorsanız, her zaman başka bir dilde kod üretebilirsiniz, C kodu deyin ve bunu makine koduna derlemek için harici bir derleyici kullanabilirsiniz. (Ya da yorumlanmış bir dil kullanabilir ve bir tercüman çalıştırabilirsiniz.)
Yuval Filmus

Hummm Hayır Bunu şu şekilde yapmayı tercih ederim: Dilim enter -> Makine Kodu. Dilimi başka bir dile dönüştürmek istemiyorum (ilk derleme için aynıdır) Mümkün mü?
BaptisteL

2

Kendi kaynaklarını derleyebilen derleyiciye kendi kendini barındıran derleyici denir . İlk derleyiciler başka bir dilde yazıldı. Örneğin, ilk C derleyicisi büyük olasılıkla derleyicide yazılmıştır. Eski bir alt seviye derleyiciyi kullanmanın tüm hilesine bootstrapping denir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.