Разработчик ParseKit здесь. Мне удалось найти проблему с вашей грамматикой, которую вы мне отправили (вне сайта).
Проблема в этой строке:
optionalWhere = empty | 'WHERE' comparisons;
Здесь у вас есть «пустой», который должен быть Empty
.
Все встроенные парсеры ParseKit имеют прописные буквы, например: Empty
.
Если вы исправите это, у вас все хорошо.
Чтобы найти / исправить подобные проблемы в будущем: выполните глобальный поиск в проекте ParseKit для: "doTestGrammar".
В этом методе замените существующую грамматику своей грамматикой. Затем запустите цель «DebugApp» в режиме отладки с включенными точками останова. Это приведет вас к катастрофе. Оттуда выполните резервное копирование в трассировке стека до последнего вызванного обратного вызова синтаксического анализатора и напечатайте PKAssembly
, отправленный этому методу обратного вызова синтаксического анализатора, в качестве аргумента. Вывод на консоль печати PKAssembly
укажет на строку в вашей грамматике, в которой есть ошибка. В данном случае это было:
[] /empty/ /|/ /'WHERE'/ /comparisons^
Надеюсь, что это поможет вам отладить будущие проблемы.