Supprimer la récursion gauche indirecte
-
29-09-2020 - |
Question
Je veux supprimer la récursion gauche indirecte de ces règles:
S-->TU,
T-->US|b,
U-->ST|a
Je ne sais pas si je peux mettre en œuvre l'algorithme correctement.Mon hypothèse est de le faire comme ça:
S-->TU, T-->U'b, U'b-->U'a
est-ce correct?
La solution
C'est fastidieux ... j'espère que je n'ai pas commis une erreur ...
S->TU
T->US|b
U->ST|a
1.
S->TU
T->U(TU)|b
U->(TU)T|a
2.
S->TU
T->aTU|(TUT)TU|b
U->bUT|(UTU)UT|a
3. * is regex for "repeated 0 or more times"
S->TU
T->aTU|T(UTTU)*|b
U->bUT|U(TUUT)*|a
4.
S->TU
T->aTU|aTUX|bX|b
U->bUT|bUTY|aY|a
X->UTTUX|UTTU
Y->TUUTY|TUUT
Par substitution de toutes les possibilités de T et U, vous pouvez retirer les non-terminaux à l'avant des expressions pour X, Y et S.
Autres conseils
non.La première langue n'est pas vide (par exemple, il contient le mot "BA"), tandis que la deuxième langue est vide.
Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange