Theodore Norvell (1999) tarafından Özyinelemeli İniş ile İfadeleri Ayrıştırma makalesinde yazar aritmetik ifadeler için aşağıdaki dilbilgisi ile başlar:
E --> E "+" E | E "-" E | "-" E | E "*" E | E "/" E | E "^" E | "(" E ")" | v
bu oldukça kötü, çünkü belirsiz ve sol yinelemeli. Böylece sol özyinelemeyi ondan çıkarmaya başlar ve sonucu şöyledir:
E --> P {B P}
P --> v | "(" E ")" | U P
B --> "+" | "-" | "*" | "/" | "^"
U --> "-"
Ama bu sonuca nasıl ulaştığını anlayamıyorum. Sol özyinelemeyi kendim kaldırmaya çalıştığımda, bunu şu şekilde yapıyorum:
Firs, bir grupta özyineleme bırakmayan üretimleri, diğer bir grupta diğer (sol özyinelemeli) üretimleri bir araya getiriyorum:
E --> E "+" E | E "-" E | E "*" E | E "/" E | E "^" E // L-recursive E --> v | "(" E ")" | "-" ESonra, onları adlandırıyorum ve daha kolay manipülasyonlar için faktör:
E --> E B E // L-recursive; B stands for "Binary operator" E --> P // not L-recursive; P stands for "Primary Expression" P --> v | "(" E ")" | U E // U stands for "Unary operator" B --> "+" | "-" | "*" | "/" | "^" P --> "-"Şimdi sadece ilk iki prodüksiyonla uğraşmam gerekiyor, ki bu artık başa çıkması daha kolay.
Bu ilk iki prodüksiyonu L-özyinelemesiz üretimden (basitçe
PBirincil ifade) başlayarak ve onuT, orijinal üretimin geri kalanı olarak ilk sol özyinelemeli nonterminalden daha az olarak tanımladığım isteğe bağlı Kuyruk ile izleyerek yeniden yazıyorum. (olduğunu, sadeceB E) Tail ardındanT, veya hangi boş olabilir:E --> P T T --> B E T |(kuyruk için boş alternatifi not edin).
EBNF'de şu şekilde yeniden yazabileceğim bu iki yapım şöyle:
E --> P {B E}ki bu neredeyse yazarın elde ettiği şey, ama
Ebunun yerinePsıfır veya daha fazla tekrarlama modelinin (Kuyruk) içinde var. Sahip olduğu diğer prodüksiyonlarla aynı:P --> v | "(" E ")" | U E B -> "+" | "-" | "*" | "/" | "^" U -> "-"ama burada da ilk üretimim
Eyerine var .PP
Benim sorum şu: Ne özlüyorum? Autor ile aynı formun aynısını almak için sözdiziminde hangi cebirsel dönüşüme ihtiyacım var? Ben yerine koyma denedim E, ama bu sadece beni döngülere götürüyor. Ben yerine nasılsa ihtiyaç şüpheli Piçin E, ama bunu haklı çıkarmak için herhangi bir yasal dönüşümü bilmiyorum. Belki de son eksik adımın ne olduğunu biliyorsunuzdur?