Дефиниција уреди

„Граматика је лево рекурзивна ако садржи нетерминал А, такав да се из њега може извести реченична форма која почиње тим симболом.” [1]

Непосредна лева рекурзија уреди

Непосредна лева рекузија се јавља у правилима облика

 

Где су α и β реченичне форме и β не почиње симболом А.

Пример : Правило

 

садржи непосредну леву рекурзију. Анализатор рекурзивним спустом би изгледао на пример овако :

function Expr() {
Expr(); match('+'); Term();
}

и анализатор би упао у бесконачну рекурзију када би покушао да анализира граматику која садржи ово правило.

Посредна лева рекурзија уреди

Посредна лева рекурзија у најједноставнијем облику могла би се дефинисати следећим правилима:

 

 

Из којих би се могло добити извођење:  

Уопштено говорећи, за нетерминале  , посредна лева рекурзија може се дефинисати постојањем форме:

 

 

 

 

Где су   реченичне форме.

Елиминација леве рекурзије уреди

Елиминација непосредне леве рекурзије уреди

Следи алгоритам уклањања непосредне леве рекурзије. Постигнуто је неколико унапређења овог метода, укључујући и она описана у чланку "Removing Left Recursion from Context-Free Grammars" [2], који је написао Robert C. Moore.

За свако правило облика

 

Где важи:

  • Нетерминал А поседује леву рекурзију
  •   је непразна реченична форма ( )
  •   је реченична форма која не почиње симболом А.

Заменимо А-правило правилом:

 

Где је А’ нови нетерминал за који важи:

 

Новодобијени симбол се често назива „реп” или „остатак”.

Елиминација посредне леве рекурзије уреди

Ако је граматика својствена, тј. ε-слободна (без правила облика  ) и без једностуких правила (ни за један нетерминал А не постоји извођење облика   ), ово је општи алгоритам који се може применити за уклањње посредне леве рекурзије:

Претходно међу нетерминалима успоставимо неки (било какав) поредак  , ...  .

for i = 1 to n {
for j = 1 to i – 1 {
  • ако су   правила
 
  • свако правило облика   заменимо са
 
}
  • елиминишемо непосредну леву рекурзију за  
}

Пример уреди

Посматрајмо граматику аритметичких израза:

 
 
 

Expr и Term су лево рекурзивна. Уведимо нове помоћне симболе Expr’ и Term’. Примена наведеног поступка даје следећу граматику без лево рекурзивних правила:

 
 
 
 
 

Погледајте још уреди

Белешке уреди

  1. ^ Notes on Formal Language Theory and Parsing Архивирано на сајту Wayback Machine (28. август 2017), James Power, Department of Computer Science National University of Ireland, Maynooth Maynooth, Co. Kildare, Ireland.JPR02
  2. ^ Removing Left Recursion from Context-Free Grammars, Robert C. Moore, Microsoft Research, Redmond, WA, USA