Почему 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, то, надеюсь, вы обнаружите, что получили ожидаемые деревья разбора.

Другие вопросы по тегам