Я пытаюсь разобрать список через запятую. Чтобы упростить, я просто использую цифры. Эти выражения будут действительны:
(1, 4, 3)
()
(4)
Я могу придумать два способа сделать это, и мне интересно, почему именно неудачный пример не работает. Я считаю, что это правильный BNF, но я не могу заставить его работать как PEG. Кто-нибудь может объяснить, почему именно? Я пытаюсь лучше понять логику разбора PEG.
Я тестирую с помощью генератора парсеров интернет-браузера здесь:
https://pegjs.org/online
Это не работает:
list = '(' some_digits? ')'
some_digits = digit / ', ' some_digits
digit = [0-9]
(на самом деле, он анализирует нормально и любит () или (1), но не распознает (1, 2)
Но это работает:
list = '(' some_digits? ')'
some_digits = digit another_digit*
another_digit = ', ' digit
digit = [0-9]
Почему это? (Грамматика новичок здесь)