Calcolare first e follow
Dato un parser top-down, se ho le seguenti produzioni:
\(S \rightarrow Ab | c \)
\(A \rightarrow aA | \epsilon \)
Con \(S,A \in NT \) e \(a,b,c \in T\)
Io first(Ab), siccome \(Ab \rightarrow aAb | \epsilon b \) l' ho calcolato come {\(a,\epsilon\)}
Sul libro però dice che first(Ab)=\({a,b}\)
Mi pare strano, visto che \(first(\alpha)\) è definito come:
"L' insieme dei simboli terminali che possono stare in prima posizione in una stringa che si deriva da \(\alpha\)".
Quindi in prima posizione ci sarà \(\epsilon\) (anche se è la stringa vuota), non \(b\) , che ne dite?
\(S \rightarrow Ab | c \)
\(A \rightarrow aA | \epsilon \)
Con \(S,A \in NT \) e \(a,b,c \in T\)
Io first(Ab), siccome \(Ab \rightarrow aAb | \epsilon b \) l' ho calcolato come {\(a,\epsilon\)}
Sul libro però dice che first(Ab)=\({a,b}\)
Mi pare strano, visto che \(first(\alpha)\) è definito come:
"L' insieme dei simboli terminali che possono stare in prima posizione in una stringa che si deriva da \(\alpha\)".
Quindi in prima posizione ci sarà \(\epsilon\) (anche se è la stringa vuota), non \(b\) , che ne dite?
Risposte
Mi sono accorto dopo che \(first( \alpha) = \epsilon\) solo se \( \alpha \rightarrow \epsilon\).
Dà un'occhiata anche qui (segnalato in appunti/dispense):
http://www.cs.nuim.ie/~jpower/Courses/P ... ode48.html
http://www.cs.nuim.ie/~jpower/Courses/P ... ode48.html