2014-09-12 2 views
0

Supposons que j'ai la grammaire suivante:SLR (1) avec analyseur epsilon

E -> TX

T -> (E) | int Y

X -> + E | ε

Y -> * T | ε

La construction des ensembles d'objets que je reçois un état comme celui-ci:

T -> int. Y

Y ->. * T

Y ->.

Cet état est adéquat ou pas? Autrement dit, la grammaire est SLR (1) ou non? Merci

Répondre

0

vous devez construire les ensembles FOLLOW et voir si FOLLOW (Y) contient int ou *. Si tel était le cas, il y aurait un changement/réduction des conflits et la grammaire ne serait pas SLR (1). vérifier tous les états et si aucun n'a de conflits, la grammaire est SLR (1).

1

Oui les entrées spécifiées par vous dans l'état absolument correct.

T->int.Y 
    Y->.*T 
    Y->. 

Il s'agit du cinquième état de l'analyseur DFA créé pour l'analyseur syntaxique SLR (1) pour une grammaire donnée.

Une confusion peut se produire dans Y->Ɛ. Lorsque vous placez un point dans les productions augmentées, par exemple S->A.B, cela signifie que A est terminé et que B doit encore être complété (par achèvement signifie ici progression dans l'analyse syntaxique). De même, si vous écrivez Y->.Ɛ, cela signifie Ɛ est encore à plus, mais nous savons aussi que Ɛ est une chaîne vide-à-dire donc rien Y->.Ɛ est interprété comme Y->.

J'ai créé le DFA (13 états) pour cette grammaire et a constaté que la grammaire donnée est SLR (1) car il n'y a pas de conflit Reduce-Reduce ou Shift-Reduce.