Поскольку такие простые случаи довольно искусственны, а в случае реальных примеров это трудно или невозможно.
Для ясности, если у вас есть LR(k)
грамматика с k>1
и вы знаете значение k
, существует механическое преобразование, с помощью которого вы можете сделать эквивалент LR(1)
грамматика, и, кроме того, вы можете с помощью некоторого жонглирования исправить действия сокращения так, чтобы они имели одинаковый эффект (по крайней мере, до тех пор, пока они не содержат побочных эффектов). Я не знаю ни одного генератора синтаксического анализатора, который бы это делал, отчасти потому, что правильно преобразовать действия сокращения будет непросто, а отчасти потому, что результирующая грамматика LR (1) обычно довольно велика, даже для небольших значений k
.
Но, как я упоминал выше, вам нужно знать значение k
, чтобы выполнить это преобразование, и оказывается, что не существует алгоритма, который может взять грамматику и сказать вам, является ли она LR(k)
. Поэтому все, что вы можете сделать, это попробовать последовательно увеличивать значения k
до тех пор, пока не найдете подходящее, или не решите отказаться.