Azon is elgondolkoztam, hogy hogyan legyen a rekurzió, bal- vagy jobboldalasan:
#1
program: utasítás | utasítás program
#2
program: utasítás | program 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 ;