2010-02-23 11 views
2

Si quelqu'un pouvait m'aider avec les règles des ensembles FIRST et FOLLOW, ce serait génial.Création des ensembles FIRST et FOLLOW pour tous les non-terminaux

La question est de calculer les ensembles de suivre pour tous les non-terminaux dans la grammaire suivante

S ::= S b T a E ¦ a T b ¦ c T a c  R ::= E T ¦ a E 

T ::= a c E ¦ epsilon     E ::= R ¦ T a d ¦ epsilon 

J'ai lu les règles de création d'ensembles de suivi et compris les exemples de base, mais je suis confus à ce que je devrait être fait quand j'écris FIRST (S) pour ce

toute aide serait grandement appréciée.

Répondre

2

Parlez-vous des ensembles FIRST1? Vous construisez simplement un ensemble de tous les non-terminaux, qui peuvent être au début d'une dérivation.

Considérons le côté droit de S: toute dérivation de S commence par S, a, c, donc FIRST1 (S) = FIRST1 (S) union {a, c} = {a, c}.

+0

Je ne les ai jamais vu s'appeler les ensembles FIRST1, mais c'est exactement la définition des ensembles PREMIERS que j'ai été enseigné. –

+0

PREMIER (R) = PREMIER (E) union {a} = PREMIER (E) union FIRST (T) union {epsilon} = {epsilon, a} et aussi le FIRST (E) = {epsilon, a} ? – user279841

+0

Kaleb Pederson: Ce qu'on m'a enseigné, c'est qu'il y a des ensembles FIRSTk pour chaque k, donc quand vous écrivez un analyseur avec k lookahead, vous calculez les ensembles FIRSTk, de cette façon vous pouvez résoudre les ambiguïtés sans refactoriser votre grammaire. stagnetti: Je ne suis pas tout à fait sûr de l'epsilon car ce n'est pas un terminal au sens strict, donc je dirais FIRST1 (R) = {a}. Mais peut-être que quelqu'un d'autre peut aider ici. –