CFG арифметический приоритет / неоднозначность - PullRequest
0 голосов
/ 02 февраля 2011

Давненько я работал с CFG. В любом случае, у меня есть определенная грамматика, которая правильно выполняет все операции, но в конце (я исключил другие стандартные математические операции).

S :: = S + T | S-T | T

T :: = нетерминал | ID | -S | (S)

за все, что у меня есть .. Я знаю, что -S должно быть -T. Но дополнительно .. что это делает с приоритетом. Это двусмысленно? Математически я могу, это, очевидно, не будет правильно ... но это не должно иметь значения в вопросе двусмысленности.

Если бы это был -T, имел бы такой же приоритет, как (S)?

действительно пытается понять, как это происходит, когда он возвращается к состоянию «Старт».

1 Ответ

0 голосов
/ 28 сентября 2011

Если вы измените -S на -T, неоднозначность будет решена. Перед изменением приведем пример неоднозначного предложения: -a-b. Это - (a-b) или (-a) -b?

С изменением, однако, больше нет двусмысленности.

Что касается приоритета, то в вашем конкретном примере необязательно должно быть правило между -T и (S), так как это всегда внутреннее правило, которое имеет приоритет, и это именно то поведение, которое вы ожидаете.

...