Bence bu soru, en iyi ihtimalle sadece sınır çizgisi doğru olan bir varsayım içeriyor.
Gerçek hayatta, (belirsiz) çok belirsiz olmadıkça, sadece belirsiz gramerlerle yaşamak oldukça yaygındır.
Örneğin, yacc (ya da bizon ya da byacc gibi) ile derlenmiş gramerlere bakarsanız, derlediğiniz zaman "N kaydırma / azaltma çakışması" hakkında oldukça az sayıda uyarı verdiğini göreceksiniz. Yacc bir kayma / azalma çatışması ile karşılaştığında, bu gramerde bir belirsizlik anlamına gelir.
Bir değişim / düşüş çatışması, ancak, genellikle oldukça küçük bir sorundur. Ayrıştırıcı üreteci, anlaşmazlığı azaltmak yerine "vardiya" lehine çözecektir. Dilbilgisi eğer istediğin buysa, gayet iyi (ve pratikte gayet iyi çalışıyor gibi görünüyor).
Bir kayma / azaltma çatışması tipik olarak bu genel siparişte ortaya çıkar (terminal olmayanlar için kapaklar ve terminaller için küçük harf):
A -> B | c
B -> a | c
Bir ile karşılaştığımızda c
belirsizlik vardır: c
doğrudan mı A
yoksa ayrıştırmalı mıyız yoksa B
sırayla A
mı? Böyle bir durumda, yacc ve benzeri daha basit / daha kısa rotayı seçecek ve -> -> rotasına gitmek yerine c
doğrudan olarak ayrıştıracaktır . Bu yanlış olabilir, ancak öyleyse, muhtemelen dilbilginizde çok basit bir hataya sahip olduğunuz anlamına gelir ve seçeneğin kesinlikle bir olasılık olarak kabul edilmemesi gerekir .A
c
B
A
c
A
Şimdi, aksine, daha çok şöyle bir şeyimiz olabilir:
A -> B | C
B -> a | c
C -> b | c
Şimdi bir karşı karşıya c
geldiğimizde, c
a B
veya a gibi davranıp davranmama arasında bir çelişki var C
. Otomatik bir çatışma çözme stratejisinin gerçekte ne istediğimizi seçmesi ihtimali çok daha az. Bunların hiçbiri "kayma" değildir - her ikisi de "azaltma" dır, bu nedenle bu bir "azaltma / azaltma çatışması" dır (bu sıkıntıya alışkın olanlar ve genel olarak bir kayma / azaltma çatışmasından çok daha büyük bir sorun olarak tanınırlar).
Her ne kadar, birisinin dilbilgisinde gerçekten belirsizliği memnuniyetle karşıladığını söyleyecek kadar ileri gideceğimden emin olmasam da, en azından bazı durumlarda hiç kimsenin bu konuda çok fazla umursayamayacağı kadar küçük. Özette tüm belirsizliği ortadan kaldırma fikrini beğenebilirler - ama bunu her zaman yapmak için yeterli değil. Örneğin, küçük bir belirsizlik içeren küçük, basit bir dilbilgisi, belirsizliği ortadan kaldıran daha büyük, daha karmaşık bir dilbilgisi için tercih edilebilir (özellikle dilbilgisinden gerçekte bir ayrıştırıcı üretme pratik alanına girdiğinizde ve belirsiz olanı bulduğunda) dilbilgisi, hedef makinenizde çalışmayacak bir ayrıştırıcı üretir).