Operatörün sol ilişkisini korurken dilbilgisinde sol özyinelemeyi kaldırma


13

Bu alıştırmada bir sorunum var:

G λ-hesabı için aşağıdaki belirsiz dilbilgisi olsun:

E → v | λv.E | EE | (E)

burada E, terminal olmayan tek bir simgedir, λv.E, E'deki v değişkeninden soyutlamayı temsil eder ve EE uygulamayı temsil eder.

  1. L (G ′) = L (G) ve G'nin belirsizliği aşağıdaki olağan kurallar uygulanarak çözülecek şekilde bir LL (1) dilbilgisi G ′ tanımlayın :
    1. soyutlama doğru ilişkiseldir;
    2. başvuru ilişkisel bırakılmıştır;
    3. uygulama soyutlamadan daha yüksek önceliğe sahiptir.
  2. G ′ için LL (1) ayrıştırma tablosunu ve dizeyi ayrıştırırken elde edilen ayrıştırma ağacını gösterin λv1. λv2. v1v2v1.

Bu dilbilgisini elde ederek belirsizlik belirleme önceliğini ve ilişkilendirmesini ortadan kaldırdım:

E -> EF | F
F -> λv.G | G
G -> (E) | v

üretim E -> EFözyinelemeli bırakıldığı için LL (1) değildir . Ancak, elde ettiğim bu üretimden sol özyinelemeyi ortadan kaldırarak:

E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v

gerekliliklere uymayan 1.2.

İnternette bir çözüm aradım, ancak sol birlikteliği koruyarak sol birleşmeyi ortadan kaldırmak mümkün değil gibi görünüyor.

Ancak, bu egzersiz birkaç yıl önce derleyiciler sınavında ortaya çıktı, bu yüzden doğru bir cevap olmalı.

Yardımın için teşekkürler.

Yanıtlar:


11

Sol birliktelik ve LL (1) ayrıştırma uyumluluğu

Bağlamdan bağımsız (CF) sözdizimi kullanımındaki büyük tutarsızlıklardan birine çarptı. İnsanlar dilbilgisi seçmek isterler, böylece parse ağacı cümlenin amaçlanan yapısını yansıtır, semantiğe yakın, özellikle uygulama gibi ilişkisel olmayan operatörler durumunda . Bu, dilbilimdeki CF gramerlerinin orijinal niyetiydi. Ama aynı zamanda kendilerini sadece bazı gramer türlerine tahammül edecek teknolojiyi ayrıştırma ile sınırlıyorlar.

Aslında, ayrıştırma ağacı bir operatörün sol ilişkisini yansıtacaksa, ayrıştırıcıdaki üst uygulama düğümü zorunlu olarak parethesized ardışık uygulamaların en sağdaki terimini eklediği için dilbilgisi mutlaka sol yinelemelidir. Dolayısıyla LL ayrıştırma söz konusu değildir. Haklısın.

Bunun iki yolu var. Birincisi, daha sonraki işlem aşamalarında (burada lambda ekspresyonunun azaltılması gibi) kullanılacak rijit "ayrıştırma ağacını" vermek için ayrıştırıcıya güvenmemek. Bu, ayrıştırma ağacından oluşturulabilen, ancak farklı bir yapıya sahip Soyut Sözdizimi Ağaçları (AST) kavramına yol açar.

Diğer çözüm, herhangi bir CF gramerini kabul edecek ve buna göre ayrıştıracak daha genel ayrıştırma tekniklerini kullanmaktır. Genel CF ayrıştırıcılar iyi gelişmiş bir teknolojidir (ve LL'nin neden bu kadar popüler olduğunu merak etmiyorum).

Bu çelişen gereksinimlere neyin uygun bir cevap olarak kabul edilebileceği hakkında hiçbir fikrim yok.

Yapacağım şey, onların çelişkili gereksinimler olduğunu göstermek. İlişkilendirilebilirliği ve öncelik kısıtlamalarını karşılayan bir ilk dilbilgisi verin, ardından dilbilgisini ayrıştırma için LL (1) dilbilgisine dönüştürün.

Bir dergide veya sınavda bir şeyin ortaya çıkması, doğru olduğu konusunda tam bir garanti değildir. Ben de yanılıyor olabilirim ... ama konuyla ilgili kendi bilgime ek olarak biraz kontrol yaptım.

Bu özel örnek hakkında

Bununla birlikte, önerdiğiniz ilk dilbilgisi tam olarak doğru görünmüyor. Λu.λv.v üretmenin bir yolu yoktur.

Bilmek için bir hile, en düşük önceliğe (soyutlama) sahip operatörlerle (burada soyutlama veya uygulama) başlamaktır. Aritmetik ifadeler için de aynı şey geçerlidir.


Ayrıntılı yorumunuz için çok teşekkür ederim. Haklısın, ilk dilbilgisi ile ilgili bir hata yaptım, bunun için de teşekkürler. O zaman profesöre soracağım.
Marco DallaG

İlgileniyorsanız, aptallar için dilbilgisi tasarımı (ben de) üzerine küçük bir notla yanıtı ekleyebilirim. Ayrıca, profesörünüzün bu konuda ne söylediğini bize söyleyin.
babou

Profesör bu soruya cevap verdiğinde konuyu güncelleyeceğim. Her neyse, bu sizin için bir sorun değilse daha fazla bilgi eklemek için çekinmeyin, elbette bunu çok takdir ediyorum. Yardımınız için tekrar teşekkür ederiz
Marco DallaG

@MarcoDallaG Pierce'ın TAPL'si üzerinde çalışırken buna rastladı. Profesörünüz bu cevaptan farklı bir şey söyledi mi? :)
lcn

0

Girişimim:

E  -> A | λv.E
A  -> FA'
A' -> A | ɛ
F  -> (E) | v

Bu dilbilgisi LL (1) dir ve gerekli özelliklere uymalıdır.

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.