Это грамматика:Конфликт в CLR разборе
S' -> S
S-> aBc|bCc|aCd|bBd
B ->e
C ->e
Я разобран в CLR, то свёртка/свёртка возник конфликт. Что делать дальше? Я приложил свою решённую проблему ниже.
Это грамматика:Конфликт в CLR разборе
S' -> S
S-> aBc|bCc|aCd|bBd
B ->e
C ->e
Я разобран в CLR, то свёртка/свёртка возник конфликт. Что делать дальше? Я приложил свою решённую проблему ниже.
Кто-нибудь, пожалуйста, скажите мне, что делать дальше
Err ... исправить конфликт?
Это очень ясно, даже просто из последних двух спектаклей, когда парсер встречает С или D после е:
B -> e . {c, d}
C -> e . {c, d}
одного опережения не достаточно, чтобы определить, следует ли выше условия сводятся к B или C.
Генераторы парсеров обычно имеют решение, беря тот, который появляется первым в грамматике, но это не всегда хороший случай. В вышеприведенной грамматике, если это решение принято, синтаксический анализатор не сможет разбираться и из-за e всегда сводится к B.
Предлагаю изменить грамматику таким образом, чтобы конфликт не возникал. Вы знаете, что вся грамматика может производить только aec, bec, aed и bed. Посмотрите, что лучше в последовательности, чтобы сделать отдельную продукцию, которая будет уменьшаться однозначно.
Он уменьшил/уменьшил конфликт. Так у нас нет решения для этого? Вместо того, чтобы менять грамматику. – Niroj
Ну ... некоторые генераторы парсеров позволяют вам указать приоритет определенных токенов, но, поскольку вы изучаете теорию языка и автомат, я не думаю, что вам разрешено использовать концепцию конкретной реализации в задаче. Вот ссылка на связанную статью о бизоне: http://www.gnu.org/software/bison/manual/html_node/Reduce_002fReduce.html – LeleDumbo