Esto no es exactamente la tarea, sino que está relacionado con mis estudios:la conversión de una gramática en LL (1) gramática: algunos problemas
Una gramática, por ejemplo, es como:
E -> E + E | E * E | -E | (E) | Identificación del
Después de la eliminación de la ambigüedad se convierte en (a partir de menor precedencia del operador)
E->-F|F
F->F+G|G
G->G*H|H
H->(E)|id
Y después de la eliminación de la recursión por la izquierda y factoring izquierda (no es necesario en este caso) la gramática última LL1 es:
E->-F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
que da una tabla analizador libre de errores, que trabaja muy bien. Ahora sobre el problema que estoy enfrentando, supongamos que la gramática es la siguiente:
E -> E + E | E * E | id = E | (E) | Identificación del
Ahora no puedo generar una tabla de análisis sin conflictos, lo que significa que mi gramática final no es LL1. Estos son los pasos:
después de la eliminación de la ambigüedad:
E->id=F|F
F->F+G|G
G->G*H|H
H->(E)|id
y después de la eliminación de la recursión por la izquierda y factoring izquierda, la gramática se convierte en:
E->id=F|F
F->GF'
F'->+GF'|e
G->HG'
B->*HG'|e
H->(E)|id
Pero hay un conflicto en la tabla de Analizador que no puedo eliminar, lo que significa que hay algún paso que me he perdido, o hay algún error en los pasos que no puedo encontrar. Por favor, dime qué he hecho mal y cómo solucionarlo. He estado trabajando en este problema desde hace mucho tiempo.
Unary Minus La precedencia del operador no es la más baja, es más alta siempre en otros operadores binarios – ammar26