Pregunta

Digamos que usamos el parser predictivo LL (1).¿Por qué es necesario que

$ primero (\ alfa) \ tapa primero (\ beta)=vacioset $ ,

para todos $ \ alfa, \ beta $ lado derecho de producciones alternativas es decir, producciones asociadas a la misma no terminal.¿Por qué es necesaria esta condición?

¿Fue útil?

Solución

Aquí hay una explicación intuitiva:

Se deduce esencialmente de la naturaleza de LL (1) analizadores: LL (1) Los analizadores construyen una tabla de análisis de LL (1). Las filas de la tabla son antierminales, y las columnas son terminales. Podemos pensar acerca de LL (1) analizando como LL (1) busques de tabla al encontrarnos a cada símbolo en la entrada: Miramos la entrada determinada por el antiérmino actual y el terminal de entrada, y aplique una regla de producción correspondiente. Por lo tanto, la tabla LL (1) no puede contener múltiples reglas de producción en cada entrada, de lo contrario, el analizador no puede decidir qué regla se aplicará.

Si el lado derecho de una producción $ \ alfa $ , $ \ beta $ tiene intersección Primeros sets, luego tendríamos varias reglas en una sola entrada en la tabla LL (1) (es decir, las entradas de duplicado / conflictiva), que tienen una intersección no trivial de los primeros conjuntos, etc., nos impiden que construyamos la tabla de análisis de LL (1).

Si aún no está claro por qué esta condición es necesaria , le sugiero que construya un ejemplo con la intersección de los primeros conjuntos en el lado derecho de una producción, y luego intente construir un LL manualmente. (1) Mesa de análisis o use una de las herramientas de visualización en línea ; Inmediatamente encontrarás un conflicto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top