Почему Nearley-Unparse не включает токены в примеры строк, сгенерированных из скомпилированной грамматики Nearley, при использовании Moo в качестве токенизатора / лексера
Я не уверен, является ли это проблемой с библиотекой Nearley.js, токенайзером / лексером Moo или с моим собственным кодом. Поэтому мне, возможно, придется отправить это в качестве вопроса в репозиторий Nearley. Все ссылки на файлы можно найти в этом Gist.
Я пытаюсь написать грамматику Nearley, которая проанализирует список домашних заданий для одного из моих занятий. Проблемы находятся в problem.txt и выглядят так:
Section 5.2 (Due 4/23)- #3, 5*, 8*, 9, 11, 14*, 15, 17*, 18*, 20, 21*, 22*, 24*, 25 (see example 5, not discussed in class)
Section 5.3 (Due 4/30)- #1, 3*, 4, 5, 6*, 7, 9*, 11, 13*, 16, 20*, 21*, 22*, 23, 24*, 25*, 27, 28*, 31, 32
Это просто две строки в качестве примера, весь файл больше.
Грамматика Nearley, которую я написал, находится в problems-grammar.ne
здесь и я еще не совсем закончил. Я использую токенайзер / лексер Moo в соответствии с этими инструкциями в документах Nearley.
В настоящее время я проверяю свою грамматику, используя nearley-unparse
команда, как описано здесь, с помощью этой команды, где problems-grammar.js
это парсер, скомпилированный Nearley.
nearley-unparse problems-grammar.js -o test.txt
К сожалению, unparser, похоже, неправильно генерирует грамматики с примерами токенов, кроме токена новой строки. Вот один из выводов nearley-unparse
:
Section (Due )- #*, ,
Section (Due )- #, *,
Section (Due )- #*, , , *,
Section (Due )- #*, *
Section (Due )- #*, *, *, *
Мне интересно, является ли это недостатком моей грамматики или недостатком самой Nearley/Moo. Если это проблема с моим кодом, как я могу это исправить?
1 ответ
Поскольку я не получил ответа отсюда, я пошел дальше и спросил в репозитории Nearley GitHub.
По словам сопровождающих, nearley-unparse
в настоящее время не может генерировать строки, соответствующие регулярному выражению. Также нет никаких планов добавить эту функциональность, поскольку это был бы проект сам по себе.
Вот их полный ответ:
Привет! Спасибо за попытку сначала опубликовать вопрос Stackru, извините, что никто не смог там помочь:-)
Это ограничение unparser: он не знает, как генерировать случайные строки, удовлетворяющие регулярному выражению, и мы не планируем этого делать (это будет проект сам по себе!).
Ваша грамматика выглядит хорошо для меня, с первого взгляда; если вы протестируете его с помощью nearley-test, то, надеюсь, вы обнаружите, что получили ожидаемые деревья разбора.