Linguaggi e traduttori, problema sui FIRST ()
Salve, sono uno studente di ingegneria informatica ed ho un dubbio su questo esercizio svolto di linguaggi e traduttori e sui first che si calcola:
S -> aS’
S’ -> Sb/Pc/Q
P -> aP’’/P’
P’’ -> PdP’/TP’
P’ -> aTP’/ε
Q -> aQ’’
Q’’ -> PcQ’/RbQ’/QQ’
Q’ -> aQcQ’/ε
T -> eRT’/T’
T’ -> abRT’/ε
R -> PdR’/e/ε
R’ -> ε/a/b/Pc
FIRST(S)={a}
FIRST(S’)={a}∪FIRST(Pc) ∪ FIRST(Q)={a}∪{a,c}∪{a}={a,c}
FIRST(P)={a}∪ FIRST(P’)={a,ε}
FIRST(P’)={a,ε}
FIRST(P’’)=FIRST(PdP’) ∪ FIRST(TP’)={a,d}∪{a,e,ε}={a,d,e,ε}
FIRST(Q)={a}
FIRST(Q’)={a,ε}
FIRST(Q’’)= FIRST(PcQ’) ∪ FIRST(RbQ’) ∪ FIRST(QQ’)={a,c}∪{a,e,d,b}∪{a}={a,b,c,d,e}
FIRST(T)={a,e,ε}
FIRST(T’)={a,ε}
FIRST(R)={e,ε}∪ FIRST(PdR’) ={a,e,d,ε}
FIRST(R’)= {a,b,ε} ∪ FIRST(Pc) = {a,b,c,ε}
non capisco perchè ad esempio nel FIRST(S')={a}∪FIRST(Pc) ∪ FIRST(Q) si calcola il FIRST(Pc) e non FIRST(P)
oppure in FIRST(P’’)=FIRST(PdP’) ∪ FIRST(TP’) invece che di FIRST(P) ∪ FIRST(T)
grazie mille
S -> aS’
S’ -> Sb/Pc/Q
P -> aP’’/P’
P’’ -> PdP’/TP’
P’ -> aTP’/ε
Q -> aQ’’
Q’’ -> PcQ’/RbQ’/QQ’
Q’ -> aQcQ’/ε
T -> eRT’/T’
T’ -> abRT’/ε
R -> PdR’/e/ε
R’ -> ε/a/b/Pc
FIRST(S)={a}
FIRST(S’)={a}∪FIRST(Pc) ∪ FIRST(Q)={a}∪{a,c}∪{a}={a,c}
FIRST(P)={a}∪ FIRST(P’)={a,ε}
FIRST(P’)={a,ε}
FIRST(P’’)=FIRST(PdP’) ∪ FIRST(TP’)={a,d}∪{a,e,ε}={a,d,e,ε}
FIRST(Q)={a}
FIRST(Q’)={a,ε}
FIRST(Q’’)= FIRST(PcQ’) ∪ FIRST(RbQ’) ∪ FIRST(QQ’)={a,c}∪{a,e,d,b}∪{a}={a,b,c,d,e}
FIRST(T)={a,e,ε}
FIRST(T’)={a,ε}
FIRST(R)={e,ε}∪ FIRST(PdR’) ={a,e,d,ε}
FIRST(R’)= {a,b,ε} ∪ FIRST(Pc) = {a,b,c,ε}
non capisco perchè ad esempio nel FIRST(S')={a}∪FIRST(Pc) ∪ FIRST(Q) si calcola il FIRST(Pc) e non FIRST(P)
oppure in FIRST(P’’)=FIRST(PdP’) ∪ FIRST(TP’) invece che di FIRST(P) ∪ FIRST(T)
grazie mille
Risposte
Qualcosa non mi torna...
Hai controllato con JFlap?

Si è giusto, in pratica se durante la lettura dei first si incontra nel percorso la stringa vuota epsilon, e la stringa vuota non fa strettamente parte dei first della stringa che si stà controllando, allora bisogna considerare come first anche il simbolo successivo.
I first di P'' ad esempio sono i first di P (a,ε ), ma ε non è strettamente un first di P'' perciò prende (a,d) poichè la d è il simbolo successivo nella sottostringa PdP'
I first di P'' ad esempio sono i first di P (a,ε ), ma ε non è strettamente un first di P'' perciò prende (a,d) poichè la d è il simbolo successivo nella sottostringa PdP'