Öznitelik grameri - Attribute grammar

Bir öznitelik grameri tanımlamanın resmi bir yoludur Öznitellikler bir yapımları için resmi gramer, bu özellikleri değerlerle ilişkilendirme. Değerlendirme, soyut sözdizimi ağacı, dil birileri tarafından işlendiğinde ayrıştırıcı veya derleyici.

Nitelikler iki gruba ayrılır: sentezlenmiş özellikler ve miras Öznitellikler. Sentezlenen öznitelikler öznitelik değerlendirme kurallarının sonucudur ve ayrıca miras alınan özniteliklerin değerlerini de kullanabilir. Devralınan öznitelikler üst düğümlerden aktarılır.

Bazı yaklaşımlarda, sentezlenmiş öznitelikler anlamsal bilgiyi ayrıştırma ağacının yukarısına iletmek için kullanılırken, miras alınan öznitelikler anlamsal bilginin aşağı ve yukarı geçişine yardımcı olur. Örneğin, derleyici gibi bir dil çeviri aracı oluştururken, sözdizimi yapılarına anlamsal değerler atamak için kullanılabilir. Ayrıca, sözdizimi tanımıyla açıkça verilmeyen bir dilin kurallarını temsil eden bir dilbilgisi ile ilişkili anlamsal kontrolleri doğrulamak da mümkündür.

Öznitelik gramerleri, sözdizimi ağacını doğrudan belirli bir makine için koda veya bazılarına çevirmek için de kullanılabilir. ara dil.

Öznitelik gramerlerinin güçlü bir özelliği de, bilgileri soyut sözdizimi ağacının herhangi bir yerinden başka herhangi bir yere kontrollü ve biçimsel bir şekilde aktarabilmeleridir.[kaynak belirtilmeli ]

Tarih

Öznitelik gramerleri tarafından icat edildi Donald Knuth ve Peter Wegner.[1] Donald Knuth genel konsept için itibar görürken, Peter Wegner Knuth ile yaptığı bir konuşma sırasında miras kalan nitelikleri icat etti. Bazı embriyonik fikirler geriye doğru izler[1] Edgar T. "Ned" Irons'ın eserine,[2] yazarı IMP.

Misal

Aşağıdaki basit bir bağlamdan bağımsız gramer çarpma ve tam sayıların eklenmesinden oluşan bir dili tanımlayabilir.

 İfadeİfade + Dönem İfadeDönem DönemDönem * Faktör DönemFaktör Faktör → "(" İfade ")" Faktörtamsayı

Aşağıdaki öznitelik grameri, dilbilgisi ile yazılmış bir ifadenin sonucunu hesaplamak için kullanılabilir. Bu dilbilgisinin yalnızca sentezlenmiş değerleri kullandığını ve bu nedenle bir S atıfta bulunulan dilbilgisi.

 İfade1İfade2 + Dönem [ İfade1.value = İfade2.value + Dönem.value] İfadeDönem [ İfade.value = Dönem.value] Dönem1Dönem2 * Faktör [ Dönem1.value = Dönem2.value * Faktör.value] DönemFaktör [ Dönem.value = Faktör.value] Faktör → "(" İfade ")" [ Faktör.value = İfade.value] Faktörtamsayı [ Faktör.value = strToInt (tamsayı.str)]

Sentezlenen özellikler

Sentezlenmiş bir öznitelik, çocukların özniteliklerinin değerlerinden hesaplanır. Önce çocukların değerlerinin hesaplanması gerektiğinden, bu aşağıdan yukarıya yayılmanın bir örneğidir. Bir sentezlenmiş özniteliği resmi olarak tanımlamak için resmi bir dilbilgisi olmak

  • terminal olmayan semboller kümesidir
  • terminal sembolleri kümesidir
  • kümesidir yapımlar
  • ayırt edici veya başlangıç ​​sembolü

Ardından, bir dizi terminal olmayan sembol verildiğinde ve bir öznitelik adı , bu koşulların üçü de karşılanırsa sentezlenmiş bir özniteliktir:

  • (yani dilbilgisindeki kurallardan biridir)
  • (yani, kuralın gövdesindeki her sembol uçbirim değildir veya uçbirimdir)
  • , nerede (yani özniteliğin değeri bir işlevdir kuralın gövdesindeki sembollerden bazı değerlere uygulanır)

Devralınan özellikler

Bir devralınan öznitelik ayrıştırma ağacındaki bir düğümde, ebeveyn veya kardeşlerdeki öznitelik değerleri kullanılarak tanımlanır. Devralınan öznitelikler, bir programlama dili yapısının göründüğü bağlama bağımlılığını ifade etmek için uygundur. Örneğin, tanımlayıcının adresinin mi yoksa değerinin mi gerekli olduğuna karar vermek için bir tanımlayıcının bir atamanın solunda mı yoksa sağında mı göründüğünü izlemek için miras alınan bir öznitelik kullanabiliriz. Sentezlenmiş özniteliklerin aksine, miras alınan öznitelikler ebeveynlerden ve / veya kardeşlerden değerler alabilir. Aşağıdaki üretimde olduğu gibi,

S → ABC

Burada A, S, B ve C'den değerler alabilir. B, S, A ve C'den değerler alabilir. Aynı şekilde, C, S, A ve B'den değerler alabilir.

Özel nitelik grameri türleri

Ayrıca bakınız

Referanslar

  1. ^ a b D. E. Knuth: Öznitelik gramerlerinin doğuşu. Nitelik gramerleri ve uygulamaları üzerine uluslararası konferans bildirileri (1990), LNCS, vol. 461, 1–12.
  2. ^ http://zzcad.com/ned.htm

Dış bağlantılar