Удалите Неоднозначность в абстрактном синтаксисе, чтобы написать DCG-парсер Prolog
P => Программа K => Блок
S => одиночная команда
C => Команды
E => Выражение
B => Boolean-expr
I => Идентификатор
N> цифра
P :: = K.
K :: = начало C конец
C :: = C1; С2 | S
S :: = I: = E | если (B), то S | если (B), то S1 еще S2 | в то время как (B) делать S | повторять C, пока (B) | К | печать E
E :: = - E | E1 + E2 | E1 - E2 | E1 E2 | E1 div E2 | E1 мод E2 | (E) | Я | N
B :: = E1 = E2 | E1> E2 | E1 <E2 | E1! = E2 | не B | B1 и B2 | B1 или B2 | (В)
Я должен удалить двусмысленности в E и B, чтобы я мог написать анализатор DCG в прологе.