Uploaded by Lucia Erhan

10 Recursia stângă

advertisement
Recursie la stânga
• Def. Se numește recursie la stânga producția
de forma A  Aα
Eliminarea recursiei la stânga
A  Aα1
A  β1
A  Aα2 .. A  Aαn
A  β2 …
A  βm
se substituie cu
A  β1X
A  β2X
A  βmX
X  α1X
X  α2X … X  αnX
X  α1
X  α2
X  αn
A  β1
A  β2
…
A  βn
unde X este un neterminal nou.
Eliminarea recursiei la stânga prin
ɛ producții
A  Aα1 A  Aα2 … A  αn
A  β1
A  β2 ... A  βm
se înlocuiesc cu
A  β1X
A  β2X
A  βmX
X  α1X
X  α2X
X  αnX
Xɛ
unde X este un neterminal nou.
Eliminarea factorizării
Definiție. Gramatica cu reguli de tipul
A  1
A  2
…
A  n
unde 1, 2, ... n Є (VT U VN)* ,  Є VT U VN
se numește gramatică cu factorizare.
Factorizarea se elimină înlocuind aceste reguli cu
A  X
X  1
X  2
...
X  n
Sarcini
• Să se elimine recursia stângă:
1. P={1.S  SS 2.S  aSb 3.S  ab}.
2. P={1.S  AB 2.A  BB 3.A  a 4.B  BA 5.B  b}.
3.P={1.S  AB 2.A  CA 3.A  a 4.B  BC 5.B  AB
6.C aB 7.C  b}
4. P={1.S  L 2. L  A 3.L  L,A 4.A (I) 5.I  i 6.I  I,i }
5. P={1. S  a 2. S  bA 3. S  SbB 4. S  C 5. A  b
6. A  Ba 7. A  Ab 8. A  AaB 9. B  a }
6. P={1. S  a 2.S  bA 3.A  b 4.A  Ba 5.A  Ab
6. A  Acd 7. B  a
Download