Для языка, который не LL(1)
или LR(1)
, как можно попытаться выяснить, если какое-то число n
существует такое, что грамматика может быть LL(n)
или LR(n)
?Как определить, является ли грамматика LR (п), LL (п)
Вы проверяете, соответствует ли грамматика LR(0)
, канонической коллекции LR(0)
. Тогда, если предположить, что это не LR(0)
, вы можете проверить, является ли это LR(1)
, введя символ lookahead. Мои простые рассуждения говорят мне, что для проверки того, является ли это LR(2)
или нет, вы, вероятно, должны заставить lookahead содержать следующие два символа вместо одного. Для LR(3)
вам необходимо учитывать три символа и т. Д.
Даже если это так, несмотря на то, что я сомневаюсь в этом, я изо всех сил пытаюсь понять, как можно попытаться определить (или даже дать понять) n
, или его отсутствие, для которых конкретная грамматика может быть LR(n)
и/или LL(n)
, без предварительной инкрементности от арбирования LR(m)
вверх.
могли бы вы рассказать немного о точке No3? Каковы функции, которые следует искать на преемниках? Кроме того, что можно сделать в отношении грамматик LL? –
Если я тестирую грамматику и обнаруживаю, что это не LR (1), LR (2), LR (3) (...), в какой-то момент я должен начать искать конкретные характеристики, которые могли бы помочь построить случай, эта грамматика вообще не может быть LR. Будут ли такие характеристики существовать, и если да, на что они будут похожи? Если это возможно, что-то подобное можно было бы сделать для случая LL? –
@Eternal_Light: Я попытался ответить на ваши вопросы, но я боюсь, что он все еще неспецифичен. Существует несколько примеров не-LR (1) грамматик в SO, большинство из которых имеют вопрос «Как разрешить этот конфликт», и многие из них были проанализированы в ответах. Обычно я не беспокоюсь о конфликтах LL, поэтому я не могу вам помочь; для парсеров LL гораздо чаще встречается потребность в неограниченном просмотре, и обычным решением является переход на парсер LR. – rici