Уменьшить-уменьшить ошибку: .. может следовать более чем одному выполненному правилу
Я использую Gold Parser v5.2.
Я попытался немного изменить движок Object Pascal (от Роба ван ден Бринка), чтобы он мог анализировать файлы.dpr и.dpk, а также файлы.pas.
Файл garmmar (названный D7Grammar.grm, в файле, загруженном по ссылке выше) проходит анализ Голда [Project | Анализировать грамматику] (с изменениями ниже), но не с "Project | Создание таблиц LALR Parse '.
Изменения в файле 'D7Grammar.grm':
Найдите определение для FloatLiteral и перепишите его так:
FloatLiteral = {Digit} + '.' + {Digit} +
Найдите "
" и перепишите его так: <UsesClause> ::= USES <UnitList> ';' | SynError
Добавьте следующие правила
<UnitRef> ::= <RefID> !see http://stackru.com/questions/35871440/ | <RefID> IN 'StringLiteral' | <RefID> IN 'StringLiteral' Comment Start <RefID> Comment End <UnitList> ::= <UnitList> ',' <UnitRef> | <UnitRef>
Сделав это, когда я выпускаю Project | Создание таблиц LALR Parse 'в Gold Parser, я получаю следующую ошибку.
')' может следовать нескольким законченным правилам. Ошибка Reduce-Reduce возникает, когда грамматика допускает одновременное сокращение двух или более правил для одного и того же токена. Грамматика неоднозначна. Пожалуйста, смотрите документацию для получения дополнительной информации.
Дальнейшее нажатие приводит к отображению таблицы, показывающей / намекающей на то, что "FieldDesignator" и "EnumId" являются виновниками, а также некоторую дополнительную информацию. Я понятия не имею, что они имеют в виду.
Я предполагаю, что эта новая неоднозначность была просмотрена более старыми версиями Gold (поскольку у D7Grammar.grm тогда не было проблем), но была обнаружена новой версией.
Проблема в том, что кроме пробных ошибок (в основном копирование / вставка из случайных идей или предложений других людей) я бесполезен с правилами грамматики.
Следовательно, само собой разумеется, помощь очень нужна, чтобы обойти эту проблему.