Bağlamdan bağımsız gramerlere parametre eklerseniz ne elde edersiniz?


13

Girintiye duyarlı diller için gramerler düşünüyordum ve CF gramerleri parametrelerle birleştirilirse hile yapacak gibi görünüyor. Örnek olarak, ANTLR benzeri formatta basitleştirilmiş Python dilbilgisi için bu parçayı düşünün:

// on top-level the statements have empty indent
program  
    : statement('')+
    ;

// let's consider only one compound statement and one simple statement for now
statement(indent) 
    : ifStatement(indent)
    | passStatement(indent)
    ;

passStatement(indent)
    : indent 'pass' NEWLINE
    ;

// statements under if must have current indent plus 4 spaces
ifStatement(indent)
    : indent 'if' expression ':' NEWLINE (statement(indent '    ')+)
    ;

Benim sorum: Bu tür gramerlerin (parametreli CFG) bir adı var mı?

Bu dilbilgisi için özyinelemeli bir iniş ayrıştırıcısı yazmak zor olmayacaktır (parametreler temel olarak ayrıştırıcılar olmalıdır). Bu yaklaşımla ilgili zorluklar neler olabilir?

Parametrelerin eklenmesi, desteklenen dil sınıfını bağlamdan bağımsız hale getiriyor mu?


1
Parametrelerin alabileceği değer kümesi sonluysa, önemsiz bağlamsız hareketsizdir (daha sonra tüm değerleri yineleyebilir ve hepsini yazabilirsiniz).
cırcır ucube

1
Teklifinizin sabit girintili girintiye duyarlı diller için olduğunu belirtmek gerekir. Python (ve bu tür diğer diller) bu şekilde kısıtlanmaz; kullanıcının istediği girintiyi kabul eder. Parseability'yi etkilemez (sekme karakterlerini işlemek hariç), ancak en azından anladığım kadarıyla teklifinizle ifade etmek zor olurdu.
rici


@HendrikJan, dilbilgisi niteliğini semantik eylemle dilbilgisine açıklama eklemenin bir yoludur, ayrışmayı kontrol etmezler.
AProgrammer

1
Amaç girintiyi ele almaksa, ayrıştırıcıdan ziyade tokenizatör için daha uygundur. Girinti seviyesi değiştiğinde belirteç sanal INDENT ve UNINDENT belirteçleri yaysın. Ardından, dil bilgisi gramerini girinti hakkında bilgi ile genişletmeye gerek yoktur.
John Kugelman

Yanıtlar:


14

Ek dilbilgisi (parametreleştirilmiş bağlamsız dilbilgisi), Hollandalı bilgisayar bilimcisi Cornelis HA Koster tarafından , LGLT Meertens ile birlikte yazılan 1962 tarihli "Temel İngilizce, İngilizcenin bir dilbilgisi grameri" adlı kitabı ile kapsamlı bir şekilde incelenmiştir. 1970 yılında bu kavramın biçimselliğini yarattı; Citianer'da bulduğum 1971 tarihli "Programlama Dilleri için Ek Dilbilgisi " adlı makalesinde yararlı bir genel bakış mevcuttur .

Bu makalede, Koster formalizmini (ve benzer bir tanesini) Van Wijngaarden iki seviyeli gramerleriyle karşılaştırıyor ve çok benzer buluyor.

Dick Grune'un ayrıştırma tekniklerinin paha biçilemez açıklamalı bibliyografyası, ek gramerleri ve diğer Chomskyian olmayan formalizmler için çok sayıda diğer faydalı referansları içerir. (Diğer bölümlerde yararlı makaleler olmasına rağmen, bibliyografyanın bölüm 18.2.6'sına bakın.) Grune , Parsing Techniques: A Pratik Kılavuz'un ikinci baskısının §15.3.2'sinde kısaca ek dilbilgilerini kapsar (ve ilk basımda daha da kısaca , çevrimiçi olarak kullanılabilir), yukarıdan aşağıya (ve diğer) ayrıştırma tekniklerini uyarlamanın kolay olduğu gerçeğinden söz eder.

Parametrelerin alanı sonlu olmadığı sürece, bu durumda, bir CFG ile sonuçlanan tüm olası üretimleri statik olarak üreterek çıkarılabilirler, ek dilbilgisi sınıfı kesinlikle bağlamsız dilbilgisi kümesinin katı bir üst kümesidir. (Bir için ek gramer yukarıdaki Dick Grune'un Ayrıştırma Teknikleri referansında bulunabilir.)anbncn

Algol 68 raporunun da editörü olan Koster, ek dilbilgisi hakkındaki fikirlerine dayanarak Derleyici Açıklama Dili'nin (CDL) orijinal geliştiricisiydi . Bu araç takımı ve daha sonraki türevleri yıllarca üretimde kullanılmıştır. Bu sayfa bir Google arama ile buldum ve kimin ben garanti yapamam kalıcılık, CDL3 için manuel ve indirme sitesine bağlantıları vardır.


CDL dillerinin öznitelik gramerlerine daha çok benzediğini düşünüyorum: özniteliklerin değerleri harici olarak tanımlanan işlevlerle hesaplanabilir. Eklerin (özniteliklerin) değerleri arasındaki ilişkilerin Biçimcilik içinde, Genişletilmiş Ek Dilbilgisi Dilimlerinde olduğu gibi tanımlandığı durumlar için isim eki dilbilgisi ayırırdım .
reinierpost

@reinierpost: Elbette kendi terminolojinize hak kazanıyorsunuz; ayrıcalık antropomorfik yumurtalarla sınırlı değildir. Ancak, CDL el kitabının kendisi, "CDL3'ün ek dilbilgisine dayalı bir uygulama dili olduğunu" iddia ediyor. (Manuel olarak ftp.cs.kun.nl/pub/cdl3/cdl3-manual-1.2.7.pdf adresinden ulaşabilirsiniz ). Cevabımda bunu iddia ettim: CDL, Koster'ın ek dilbilgisi çalışmalarına dayanıyordu. Grune'un işaret ettiği gibi, ek ve nitelik gramerleri arasındaki fark hafiftir; ayrımı, eklerin sözdizimsel geçerliliğe karar vermek için kullanılıp kullanılmadığıdır.
rici

(Alıntı, kılavuzun ilk sayfasından alınmıştır.)
rici

Biliyorum ... ve haklısın. Benim yorumum seninle çelişmek anlamına gelmiyordu.
reinierpost

6

CFG'ler için pompalama lemmasını alın :

Dilbilgisini alın

S -> A("")
A(p) -> p 
      | p '\n' A(p"*") '\n' p 

Bu bir yıldız üçgeni tanımlar:

*
**
***
**
*

Bir yıldız üçgeni 5 parça bölmenin yolu yoktur, öyle ki da bir yıldız üçgeni ( boş olmayan) olur.{ u v n w x n y | n > 0 } v xuvwxy{uvnwxny|n>0}vx

Bu, yıldız üçgeninin bağlamdan bağımsız bir dil olmadığı anlamına gelir.

Veya daha basit bir örnek:

S-> B("")
B(p)-> p 'a' p 'a' p
     | B(p 'b')

Bu, dil bağlam içermez.{bnabnabn|n0}


3

Bu formalizmi daha önce hiç görmedim (Grune'nin Ayrıştırma Teknikleri gibi bir şeyde bile ), tam olarak nasıl tanımladığınıza dair ayrıntılara bağlı olarak, "parametreler temel olarak ayrıştırıcılar olmalıdır" gibi van Wijngaarden ile aynı güce sahip iki seviyeli gramerler için eşlenebilir görünüyor sınırsız faz yapısı dilbilgisi (yani bağlama duyarlı olandan daha güçlü, tüm durma programlarını veren bir VW dilbilgisi yazabilirsiniz).



Koster ve grubu, bildiğim kadarıyla iki tür ekli dilbilgisi üzerinde çalıştılar: 1) Van Wijngaarden dilbilgisinin kısıtlı biçimleri, daha kolay tanınmasını sağladı; 2) CDL dilleri, herhangi bir açık ek değer manipülasyonu olmayan ancak hedef dilde (örn. Montajcı) kuralları tanımlama seçeneği ile pratik derleyici açıklama dilleri.
reinierpost
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.