NevemTeve Creative Commons License 2018.11.22 0 0 20

Azon is elgondolkoztam, hogy hogyan legyen a rekurzió, bal- vagy jobboldalasan:

#1
program: utasítás | utasítás program

#2

programutasításprogram utasítás

 

Először naivan azt hittem, hogy az első a jobb módszer, de most a második felé hajlok.

 

Olyasmi tesztet végeztem, ahol az input 'változó=érték' utasításokból áll; ha különböző változókról van szó, akkor az értékadások sorrendje nem számít, de ha ugyanannak a változónak adok értéket kétszer (többször), akkor azt várnám, hogy az utolsó hajtódjon végre utolsónak (vagyis az jusson érvényre, ne az első).

 

A teszt szerint #1 esetén az első értékadás 'nyer', vagyis a végrehajtási sorrend fordított.

 

#2 esetén az utolsó értékadás jut érvényre, vagyis a végrehajtás sorrendje megegyezik az utasítás sorrendjével.

 

Kieg: Ezt találtam a témában olvasnivalónak

http://dinosaur.compilertools.net/yacc/index.html

 

Left Recursion

 

The algorithm used by the Yacc parser encourages so called ``left recursive'' grammar rules: rules of the form

 

name: name rest_of_rule ;