Geçenlerde yığın tabanlı bir programlama dili yazma görevini üstlendim. Dilimi tasarlamaya başlamadan önce, mevcut yığın tabanlı dilleri okumanın ve denemenin iyi bir fikir olacağını düşündüm.
Bu beni bu yazının konusuna getiriyor. Postfix stil ifadelerini kullanan yığın tabanlı bir dil olan Forth'daki Wikipedia makalesini okuyordum . Makalede, aşağıdaki ifadeyi gördüm:
Forth'un esnekliği statik bir BNF dilbilgisini uygunsuz hale getirir ve monolitik bir derleyiciye sahip değildir. Derleyiciyi genişletmek, dilbilgisini değiştirmek ve temeldeki uygulamayı değiştirmek yerine yalnızca yeni bir sözcük yazmayı gerektirir.
Anladığım kadarıyla Forth lingo'da "kelime" terimi temelde "altyordam" ile eşanlamlı gibi görünüyor. Bu göz önüne alındığında, yukarıdaki ifade garip görünüyor. Neden Forth'ta yeni işlevler oluşturma yeteneği Forth için resmi bir dilbilgisi uygunsuz hale getirir? Tanımladığınız her yeni alt program için dilbilgisini neden yeniden yazmanız gerekiyor? Çevreye yeni bir kelime yazmak derleyiciyi genişletmeyi nasıl oluşturur ? Yukarıdaki ifade, yeni fonksiyonları tanımlayabileceğiniz için resmi bir dilbilgisinin Python için uygun olmadığını söylemeye benzer.
Aslında, aşağıdaki Forth'un basit bir alt kümesi için bir BNF stili dilbilgisi yazmaya karar verdim:
program ::= stmt+
stmt ::= func | expr
func ::= ':' expr+ ';'
expr ::= INTEGER | word
word ::= ('+' | '-' | '*' | '/' )
Yukarıdaki dilbilgisi, Forth ifadelerinin geçerli bir alt kümesini kapsamaktadır ve Forth dilindeki tüm geçerli ifadeleri kapsayacak şekilde genişletilmesi zor görünmemektedir. Ayrıca, bir derleyicinin ayrıştırıcısı yukarıdaki dilbilgisini uygularsa, derleyicinin nasıl genişletileceğini göremiyorum. Derleyici, çevresine yeni kelimeler ekleyecektir . Sadece çevre değişti. Wikipedia'dan Yukarıdaki alıntı derleyici oluşturan altını çizerek kodunu (değişmezse olan) conflating sanki neredeyse görünüyor ile derleyici'nın çevre (değişim yapar).
Özetle, Forth'un yeni sözcükleri (altyordamlar) tanımlaması ablitisi neden yazılı bir dilbilgisi için uygun değildir?