Temel bir dil için temel özellikler? DSL önerileri?


9

Sonunda bir tercüman ve derleyici oluşturmanın ardındaki karmaşıklığı anlamaya başladım. Bu noktaya gelmeden önce TinyBasic, 1964 (Dartmouth) Basic'in çeşitli versiyonlarını ve bu dillere yaptığım genişlemeleri yaptım. En son proje Açık Kaynak Temel dediğim projedir ... çünkü dilin insanları ilgilendirecek başka bir özelliği düşünemedim. Dilin kaynağını açabilir ve bazı karmaşık şeylerin nasıl yapıldığını (tarama, ayrıştırma, yorumlama ve derleme nasıl yapıldığını) anlayabilme

Açık Kaynak Temel ilk olarak yığın tabanlı bir dile yorumlanır. Bu yığın tabanlı dil daha sonra hemen yorumlanır ve yürütülür veya CLR yürütülebilir dosyasına dönüştürülür.

Sorularımın hepsi bu kadar kaynar:

  • Temel tabanlı bir dilin temel özellikleri / yapıları nelerdir? Ben zaten bu temel yapıları var: Ödevler, İfadeler, Değişkenler, bazı fonksiyonlar (Rastgele, ToUpper, ToLower), Döngü (ve do-while / until), If (blok ve tek satır) Else kararları, konsol tabanlı giriş (Giriş ) ve çıktı (Yazdır) ve alt rutinler (henüz parametresiz).
  • Temel yapıları kendi dilime eklediğimde - nasıl dallanmalıyım? Hangi alan adlarına? Diğer bir deyişle, tüm genel yapıları çalıştırdıktan sonra açık kaynak temel dilim hangi yönleri almalıdır?

Zaman ayırdığınız için teşekkür ederim,

Dominick'in


3
Her zaman yerleşik, sözdizimi destekli AOP işlevselliğine sahip bir dil istemiştim.
FrustratedWithFormsDesigner

@Dominick: LINQ işlevselliğine ne dersiniz?
Predator

@Frustrated ... AOP - Unsur Odaklı Programlama işlevselliği? Bir örnek verebilir misiniz?
Dominick

5
Etki alanına özgü bir dili temel zorunluluk özelliklerinden icat etmeye başlamamalısınız. Önce alan adınızı resmileştirin, bu bilgiyi bir dile çevirin ve yalnızca gerekliyse temel özellikleri ekleyin. Muhtemelen Turing tamamlanmamış mükemmel bir DSL ile sonuçlanacaksınız ve DSL'lerin en iyi özelliklerinden biri.
SK-logic

1
Kesinlikle "git" herhangi bir TEMEL zorunlu bir özelliktir?
Perry

Yanıtlar:


1

Commodore'daki [Vic-20, C-64] erken BASIC ile yaşadığım deneyim, bana satır numaralarının BASIC'in temel bir "özelliği" olduğu izlenimini verdi. Görünüşe göre artık modern uygulamalarda kullanılmıyor gibi görünüyor, bu benim için zararlı bir şey çünkü BASIC'in temel görüşüm, başka bir şeye sıçrama tahtası yapılacak bir öğrenme dili.


1

Kesinlikle asil bir çaba, ama önceliklerinizin tersine döndüğünü düşünüyorum.

İlk endişeniz, dilinizin ele almayı hedeflediği "alan" sorunları olmalıdır. Bu yüzden öncelikle "Alana Özel Dil" olarak adlandırılır. DSL, sadece tereyağı ile bıçak gibi belirli sorunları çözmek için küçük, basit ve çok dar odaklanıldığında tolere edilebilir .

Alan adını ve dilinizin alan adında nasıl çalışacağını belirledikten sonra, belirli yapıları veya özellikleri düzenleyebilirsiniz.

Son olarak, dahili veya harici bir DSL isteyip istemediğinizi düşünmek yardımcı olabilir .


0

Bir CAE / FEA uygulaması için bir komut dosyası dili geliştiriyorum ve son kullanıcılar için yararlı bulduğum bazı özellikler şunlardır: Yerel ve global değişkenler Dinamik ayırma ve genişletme ile matrisler Bağımsız değişkenler ve referans geçen yapılar (kullanıcı tanımlı türler) ile birlikte kendinizden bahsettiğiniz özellikler başlangıçta oldukça güçlü bir dil yapmalıdır. Sonra kullanıcı isteğine göre gelişir.


Bu ilginç ve alana özgü bir dil (Bilgisayar Destekli Mühendislik / Sonlu Elemanlar Analizi). Neden matrislere ihtiyacın olduğunu görebiliyorum. Tüm önerileriniz oldukça iyi ve onları aklımızda tutacağım. Teşekkürler.
Dominick

0

Varsa eklenebilecek veya genişletilebilecek birkaç özellik vardır, ancak ...

... Temel benzeri programlama dilleri, komut dosyası dillerine çok benzer ve daha sonra kaçırılan veya daha sonra dahil edilen bir özellik ad alanı veya modüllerdi.

C, C ++, PHP, Visual Basic, modül / ad alanı olmadan başladı ve sonradan eklendi.

Sonraki alt yordamlar (değer döndürmeyen yordamlar veya işlevler) ve işlevler (özel bir değer döndüren alt yordamlar) olabilir.


0

bazı karmaşık şeylerin nasıl yapıldığını anlamak (tarama, ayrıştırma, yorumlama ve derleme nasıl yapılır)

Bir yoktur güzel soru anlayış derleyiciler için kaynaklar üzerinde yığın taşması sitesinde bitti. Ayrıca Derleyiciler ders sayfamı da inceleyebilirsiniz .

Temel yapıları kendi dilime eklediğimde - nasıl dallanmalıyım?

Önceden oluşturduğunuz özellikler göz önüne alındığında, üç veri türü eklemenizi öneririm: int, string, boolean. Her biri öncekinden biraz daha zor olan üç şey yapmanız gerekir:

  1. Bu anahtar kelimeleri çözümleyebilmeniz için dilbilgisini değiştirin. Ölçek.
  2. Değişken adı ve diğer özelliklerle birlikte veri türünü dahil edebilmeniz için sembol tablonuzu oluşturun (veya mevcut tablonuza ekleyin). Ardından, bunu test edebilmeniz ve sembol tablosunu görebilmeniz için bir hata ayıklama anahtarı yapın.
  3. MsIL için kod oluşturmadan önce veya yorumlama sırasında uyumlu türleri kontrol edin. Her yürütme modunda hem hata hem de hata olmayan durumları tüm türler için test edin.

Bu iyi giderse, o zaman kapsam üzerinde çalışmanızı öneririm (alt rutinlerde yerel ve küresel). Bununla ilgili tavsiye almak isterseniz bana bildirin.

İyi şanslar. Ve keyfini çıkarın!

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.