Ayrıştırıcı Dilbilgisi Motoru - Parser Grammar Engine

Ayrıştırıcı Dilbilgisi Motoru (PGE, başlangıçta Parrot Dilbilgisi Motoru) bir derleyici ve Çalışma süresi için Raku kuralları için Parrot sanal makine.[1] PGE bunları kullanır kurallar dönüştürmek için ifade dilbilgisini ayrıştırma Papağan içine bayt kodu. Bu nedenle, çoğu sanal makineden ve çalıştırma zamanından farklı olarak kuralları bir programda derler; bu, normal ifadeleri daha sonra bir normal ifade motoru tarafından çalışma zamanında yorumlanan ikincil bir dahili biçimde depolar. PGE tarafından kullanılan kural formatı herhangi bir Düzenli ifade ve en resmi gramerler ve bu nedenle Parrot'un tüm ön uç dilleri için derleyici zincirindeki ilk bağlantıyı oluşturur.

Çalıştırıldığında, PGE tarafından üretilen bayt kodu, metni giriş kurallarında açıklandığı gibi ayrıştırarak bir ayrıştırma ağacı oluşturur. Ayrıştırma ağacı doğrudan manipüle edilebilir veya sonraki aşamaya aktarılabilir. Parrot derleyici araç zinciri oluşturmak için AST hangi kod üretiminin gerçekleşebileceği (dilbilgisi bir programlama dilini tanımlıyorsa).

Tarih

Orijinal adı P6GE C dilinde yazılan PGE, yerli Parrot'a çevrildi ve Kasım 2004'teki ilk yayınından kısa bir süre sonra yeniden adlandırıldı. Yazarı Patrick R. Michaud'dur.[2] PGE, Parrot'ın üstüne bir derleyici uygulamak için gereken iş miktarını azaltmak için yazılmıştır. Ayrıca, Perl 6'nın mevcut olmasına rağmen kolayca kendi kendine barındırmasına izin vermek için yazılmıştır. Puglar geliştirme artık PGE'yi birincil kurallar arka ucu olarak PCR adı verilen yerel bir motor lehine kullanmıyor.[3]

Dahili

PGE, üç ayrıştırma stilini birleştirir:

Birincil biçim Raku kurallarıdır, bu nedenle bir PGE kuralı, yalnızca eklemeli bir dilbilgisi için aşağıdaki gibi görünebilir:

 kural dönem   {  | () } kural numara { d + } kural ifade   {  ('+' ) * }

Operatör öncelik ayrıştırıcısı, bir operatör tablosunun doğrudan bir Perl 6 kural stili ayrıştırıcısında oluşturulmasına ve kullanılmasına izin verir:

 kural ifade dır-dir seçilebilir { ... } kural dönem   {  | () } kural numara { d + } proto terim: dır-dir öncelik('=')             dır-dir ayrıştırılmış(& terim) {...} proto ek:+ dır-dir daha gevşek('terim:') {...}

Bu, basit, yalnızca eklemeye dayalı bir dilbilgisi tanımlama amacının aynısını gerçekleştirir, ancak bunu Raku tarzı bir normal ifade / kural kombinasyonunu kullanarak yapar. dönem ve numara ve diğer her şey için seçilebilir bir vardiya azaltma.

Kod üretimi

PGE, bir kural tarafından açıklanan dilbilgisini ayrıştıracak bir kod çıkarsa da Çalışma süresi kodda bulunan basit gramerleri ve düzenli ifadeleri işlemek için, birincil amacı yüksek seviyeli diller.

Parrot derleyici araç zinciri, PGE'nin ilki olduğu birkaç parçaya bölünmüştür. PGE, kaynak kodunu ağaçları ayrıştırmak. Ağaç Dilbilgisi Motoru (TGE) daha sonra bunları Parrot Abstract Syntax Trees'e (PAST) dönüştürür. İkinci bir TGE geçişi daha sonra bir PAST'ı Parrot Opcode Sözdizimi Ağaçları (POST) doğrudan çalıştırılabilir bayt koduna dönüştürülebilir.

Pge-genel bakış.svg

Referanslar

  1. ^ Michaud, Patrick R. (2004-11-22). "Parrot Dilbilgisi Motoru (PGE)". Arşivlenen orijinal 2005-12-20 tarihinde.
  2. ^ Michaud, Patrick R. (2004-11-08). "Dilbilgisi motorunun ilk halka açık sürümü".
  3. ^ "Ajan Zhang" (2006-09-17). "PCR, Pugs'taki PGE'nin yerini alıyor".

Dış bağlantılar