Почему моя грамматика Nearley вызывает цикл? - PullRequest
0 голосов
/ 19 июня 2019

Я играю с nearley.js, и что-то меня смущает.В качестве теста я пытаюсь построить парсер, разбирающий покерные ранги.

Теперь эта грамматика работает, как и ожидалось:

@{% function nuller() { return null; } %}

main -> _ composition _                         {% nuller %}

composition -> _ expression _                   {% nuller %}
    | composition _ "," _ rank                  {% nuller %}

expression -> _ rank _                          {% nuller %}
rank -> [a, k, q, j, t, A, K, Q, J, T, 2-9]     {% nuller %}

_ -> [\s]:*                                     {% nuller %}

Однако, во второй раз я изменяю | composition _ "," _ rank на | composition _ "," _ expression тогда я получаю цикл:

@{% function nuller() { return null; } %}

main -> _ composition _                         {% nuller %}

composition -> _ expression _                   {% nuller %}
    | composition _ "," _ expression            {% nuller %}

expression -> _ rank _                          {% nuller %}
rank -> [a, k, q, j, t, A, K, Q, J, T, 2-9]     {% nuller %}

_ -> [\s]:*                                     {% nuller %}

Может кто-нибудь объяснить мне, почему это так?Код можно быстро проверить на игровой площадке: https://omrelli.ug/nearley-playground/

Используемая мной строка теста: a, k, q, j, t, 9, 8, 7, 6, 5, 4, 3, 2

Заранее большое спасибо!

...