Bu, dil tasarımında kullanılan kavramları bir çerçeve şeklinde soyutlamayı amaçlayan Soyutlama Projesi'nin kardeş projesine odaklanan bir dizi sorunun bir parçasıdır. Kardeş proje, maçlarda kod enjeksiyonu kullanılmadan dilbilgisi dosyalarından bir ayrıştırıcı oluşturmayı amaçlayan OILexer olarak adlandırılır.
Bu sorularla ilişkili, yapısal yazmayla ilgili diğer bazı sayfalar burada görülebilir ve kullanım kolaylığı burada bulunabilir . Çerçeve ve gönderilecek uygun yerle ilgili bir soruşturmayla ilişkili meta-konu burada bulunabilir .
Belirli bir dilbilgisinden ayrıştırma ağacını ayıklamaya başlamak üzere olduğum noktaya geliyorum, ardından ileri yolları (ANTLR 4'ün LL (*) benzeri) ayırt etmek için DFA kullanan bir Yinelenen İniş ayrıştırıcısı izliyorum. içgörü kazanmak için açacağımı düşündüm.
Ayrıştırıcı derleyicide ne tür özellikler idealdir?
Şimdiye kadar neler uygulandığına dair kısa bir genel bakış:
- Şablonlar
- Belirli bir noktada neyin geçerli olduğunu bilerek, ileriye bakın.
- Değişmezleri kurallar dahilinde alarak ve hangi simgeden geldiklerine karar vererek 'Deliteralization' kuralını uygulayın.
- Belirsiz Otomata
- Deterministik Otomata
- Jeton tanıma için basit sözcüksel durum makinesi
- Jeton otomasyon yöntemleri:
- Tara - yorumlar için yararlıdır: Yorum: = "/ *" Tara ("* /");
- Çıkarma - Tanımlayıcılar için kullanışlıdır: Tanımlayıcı: = Çıkarma (IdentifierBody, Keywords);
- Tanımlayıcının anahtar kelimeleri kabul etmediğinden emin olun.
- Encode - Bir otomasyonu X serisi temel N geçiş sayısı olarak kodlar.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
- Onaltılı 4 geçişli onaltılık bir unicode kaçış yapar. Bu ve: [0-9A-Fa-f] {4} arasındaki fark, Kodlama ile sonuçlanan otomasyonun, izin verilen onaltılık değerler kümesini IdentifierCharNoEscape kapsamıyla sınırlandırmasıdır. Bu yüzden \ u005c verirseniz, kodlama sürümü değeri kabul etmez. Bunun gibi şeylerin ciddi bir uyarısı var: Tutumlu kullanın. Ortaya çıkan otomasyon oldukça karmaşık olabilir.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
Uygulanmayan şey CST üretimidir, bu çalışmayı elde etmek için Deterministik otomasyonları uygun bağlamı taşıyacak şekilde ayarlamam gerekir.
İlgilenenler için, T * y♯ projesinin orijinal formunun oldukça basılı bir resmini yükledim . Her dosya diğer her dosyaya bağlanmalı, onları takip etmek için bireysel kurallara bağlanmaya başladım, ancak çok uzun sürecekti (otomatikleştirmek daha kolay olurdu!)
Daha fazla içeriğe ihtiyaç duyulursa, lütfen buna göre gönderin.
Düzenleme 5-14-2013 : Belirli bir dilde durum makineleri için GraphViz grafikleri oluşturmak için kod yazdım. İşte AssemblyPart'ın bir GraphViz digrafisi . Dil açıklamasında bağlanan üyelerin göreli klasörlerinde bu kuralın digrafisi ile bir rulename.txt olmalıdır. Örneği yayınladığımdan beri bazı dil açıklamaları değişti, bunun nedeni gramerle ilgili şeyleri basitleştirmek. İşte ilginç bir grafik resmi .