2011-06-28 18 views
11

Supongamos que tengo la siguiente gramática:SLR (1) Analizador y épsilon involucrado

S → X 
X → a | ϵ 

Si que la gramática no tendría ϵ involucrados, me gustaría construir el primer estado como:

S' → .S 
S → .X 
X → .a 

, pero ¿qué pasa con el símbolo ϵ? ¿Debo incluir:

X → .ϵ 

también?

Si es así ... al crear los próximos estados ... ¿debo hacer GOTO(Io,ϵ), siendo Io ese primer estado?

Respuesta

7

Desde ϵ no es un terminal en sí hay que eliminarlo de su regla que le da

X → . 

Luego, más tarde no tendrá ningún extraño GOTO con "símbolo" ϵ pero en cambio su estado

S' → S. 

es un estado de aceptación en su gráfico.

+0

Eso tiene sentido. ¿Tiene algún ejemplo de un analizador LR aplicado a una gramática en la que interviene un épsilon? –

+0

@Oscar Desafortunadamente no tengo un ejemplo que demuestre cómo proceder. Pero debería ser sencillo construir esto a mano en función de su gramática. – Howard

+0

Lo confirmé en un libro que leí hoy;) Es exactamente como dijiste. Gracias por su respuesta. –

14

Estoy de acuerdo con Howard. Su estado en el DFA debe contener el elemento: x → . Aquí hay un DFA que dibujé para un analizador SLR (1) que reconoce una gramática que usa dos producciones épsilon: SLR(1) DFA

+0

Tengo un problema con este ejemplo escaneado. Echemos un vistazo a T (n): T ->. (E) goto (T (n),() = {[T -> (. E)], [E ->. TX], , [T -> intY.]} si es así, a continuación, en consecuencia, para T (n + 1) - [T> (E).]:. X -> + E debería no tener: Goto (T (n + 1), +) = {[X -> +. E], [E ->. TX], [T ->. (E)], [T-> .intY]}? En cambio en el ejemplo que tengo: goto (T (n + 1), +) = {[X -> +. E], [E ->. TX]} Por qué no incluimos in goto (T (n) +1), +) producciones para T? – Joanna

+0

Tiene la @jana correcta. Si bien no entiendo lo que quiere decir con T (n) y T (n + 1), el estado LR al que se refiere, es decir {[X -> +. E], [E ->. TX]} debería en incluyen producciones para T a través de la predicción. En la formulación actual no hay forma de progresar desde el estado dado ya que no hay terminales a la derecha del punto. –

Cuestiones relacionadas