Lexer Yapmak | Karşılaşacağım Hatalar,Seçmemi Önerdiğiniz Dil,Ekstralar

Merhabalar!

Kendimi geliştirmek amacıyla bir dil yapmayı hedefliyorum.Python,C,C++,Java gibi bir dil olmayacak,merak etmeyin.Amacım dediğim gibi kendimi geliştirmek.Konsol uygulaması yapabilen cross-platform bir dil yapabilirsem ne mutlu bana.Bazı konularda danışmam gerekiyor ve burada bunları cevaplayacak kişiler olduğunu biliyorum.Konu kalabalığı yapmamak için lütfen konu ile alakasız soruları özelden veya yeni bir konu oluşturarak sorun.

1. Hangi Dili Seçmeliyim?

C ve C++ burada en iyi seçim gibi duruyor.C++ performans ve geniş kullanım alanıyla radarıma girdi.C++ ile kötü bir dil yapmak C ile iyi bir dil yapmaktan kötü,bunu biliyorum ama iki dili de bilmediğim için hangisini öğrenirsem öğreneyim yüksek ihtimal aynı şeyleri yapacağım.Ayrıca OOP desteği olan bir dil C++.

2. Karşılaşacağım Hatalar

Lexer birkaç yüz satır olacak gibi.Algoritmayı hazırladım ama dili bilmediğim için bir şey yapamıyorum :frowning:

Merhaba dünya örneğinin şöyle olmasını hedefliyorum :

yaz("Merhaba dünya!\y")

//Yorum satırı

Yapmayı planladığım dil derlenecek bu arada.Lexer şöyle işleyecek :

[kod: yaz]
[girdi: ""]
[değer: Merhaba Dünya]
[komut: yeni_satır]

Kodda bulunan \y “yeni satır” anlamına geliyor.Print’in Println’i var ama buna bir şey bulamadım :smiley: Bu yüzden \n yerine \y kullanmayı planladım.

Buradaki Lexer hata verecek midir? Veya Lexer’a eklemediğim şey nedir?

Şimdiden teşekkürler.İyi forumlar…

C ile C++ arasında kalıyorsan C seç.

Sanırım bunlar token type: token value şeklinde veriler. Yeni satır karakterinin karakter dizisi değerinden ayrılmasına gerek yok, derlenirken "\n" karakterine dönüştürülebilir.

Bu arada normalde lexer’ler yukarıda gösterdiğiniz şekilde çalışmıyor, şunun gibi bir çıktı veriyor:

[(TokenTypes.IDENTIFIER, "yaz"), (TokenTypes.LEFT_PAREN, "("), (TokenTypes.STRING, "Merhaba dünya!\n"), (TokenTypes.RIGHT_PAREN, ")")]

yaz'ın bir fonksiyonu temsil ettiğine parser karar verir mesela, lexer değil.

C’de println yok.

Ortada henüz bir kod yok. Nasıl bir hatadan bahsediyoruz?

Sebebini açıklayabilir misiniz?

Bilgilendirme için teşekkür ederim.Lexer mi önce çalışıyor yoksa Parser mi?

Herhangi bir dilde olabilir bunlar.Dil belirtmemiştim :slight_smile:

Kurduğum algoritmanın değişmesi gerektiği,%100 hata verecekmiş çünki ( ve ) karakterlerini tanımlamamışım.Kod olmasa bile hata olacağı bariz :slight_smile:

C, C++'a kıyasla çok daha basit ve öğrenimi kolay bir dil. Bazı konularda type safety açısından problemleri var ama zaten siz yorumlanan bir dil yapacağınız için (değil mi?) C kodunda buna sebep olacak yapılara ihtiyaç duymazsınız diye tahmin ediyorum.

Bunu lexer yapmaya karar veren birinin zaten bilmesi lazım.

Aslında değil :smiley: Derlenmesini planlıyorum.

İngilizce eğitimlerde Lexer yaparak başlıyorlar.Oradan bildiklerimle sordum.

Dil mi yapiyorsun, lexer mi yapiyorsun, anlamadim.

Lexer yaptigini varsayiyorum. Python.

Lexer yapiyorsun, ikisiyle de isin yok.

Burada yine bir kafa karisikligi var. C ve C++ gibi programlama dilleriyle program yapiliyor, dil degil.

C++ ogrenmek icin C bilmek gerekiyor. Veya: C++ ogrenirken C’nin %80’ini ogreniyorsun zaten.

Neden? Lexer ne ise yariyor?


Hic calismakta olan bir lexer gordun mu? Yapmaya calistigin seyin neye benzeyecegini biliyor musun?

3 Beğeni

Sıfırdan yapmaya kalkarsan bazı şeyleri öğrenmen gerekir. Kaynak kodundan başlayıp, makine koduna kadar(veya başka bir ara dile kadar) olan süreçte neler olup bittiği hakkında fikrin olmak zorunda. İnternette bunun için kaynak çok, bence kaynak bulmak zor olmaz senin için.

Ama sorun henüz hiç birine bakmadan, fikir edinmeden bir şeyler üretmeye kalkman Ve soruları da bu üretmeye çalıştığın temelsiz fikirler üzerinden sormak. Ben bir kaynak paylaşıyorum. İçerisinde yer alan örnek kodları kendin inceleyip mantığı anlarsan, belki sıfırdan kendin yapmak isteyebilirsin.

Ha tabiki sıfırdan yapmak zorunda değilsin. Birçok araç geliştirilmiş bugüne kadar. Temel mantığı anladıktan sonra bu araçlar üzerinde kendini geliştirip basit bir dil tasarlayabilirsin.

Haklısınız.Lexer’in bile ne olduğunu bilmiyorum galiba.Yapmak istediğim bir dil yapmak,basitçe.Galiba yeni bir konu gerekli?

Dili yapmak icin “kagit-kalem” yetiyor.

Dilin compiler’i, ne bileyim linter’i, interpreter’i dedigin noktada programlara ve programlama dillerine basvuruyorsun.

Istersen dildeki butun ozellikleri ornekleyerek basla. (Simdiye kadar fonksiyon cagrisi, string deger, bir adet escape ve tek satirlik yorum gorduk.) Yeni konu da olabilir, evet.

2 Beğeni