Почему процесс синтаксического анализа Grako завершается сбоем, если моя грамматика содержит выражение, состоящее из множества соединенных по ИЛИ подвыражений?

Я использую Грако. В моей грамматике EBNF у меня есть выражение, состоящее из множества подвыражений, объединенных с помощью оператора ИЛИ, например:

expression = subexpressionA | subexpressionB | ...  | subexpressionZ;

Процесс синтаксического анализа всегда терпит неудачу, если входная строка содержит одно из последних подвыражений, скажем, подвыражениеZ. Когда я переписываю грамматику вот так

expression = subexpressionZ | subexpressionB |  ...  | subexpressionA;

процесс синтаксического анализа завершается успешно, если входная строка содержит подвыражениеZ, но теперь произойдет сбой, если она содержит подвыражениеA.

У кого-нибудь когда-нибудь была похожая проблема? Это ошибка в Grako (я использую 3.6.3.) или я что-то не так делаю?

Большое спасибо за любые идеи!


person Matthias    schedule 15.03.2017    source источник
comment
Ошибка в Grako маловероятна, так как подобные грамматические правила используются во многих активно используемых грамматиках. Без примера сложно оценить проблему. Пожалуйста, опубликуйте минимальную грамматику и пример ввода, который воспроизводит проблему?   -  person Apalala    schedule 15.03.2017
comment
Это звучит как упорядоченная альтернатива, но, как говорит Апалала, вам нужно опубликовать минимальный воспроизводимый пример чтобы убедиться в этом.   -  person rici    schedule 16.03.2017


Ответы (1)


Я решил свою проблему - давным-давно :) - разбив выражения на несколько подвыражений следующим образом:

expression1 = subexpressionA | subexpressionB | subexpressionC;
expression2 = subexpressionD | subexpressionE | ...  | subexpressionZ;
expression = expression1 | expression2;

Почему-то это работает...

person Matthias    schedule 18.10.2019