LL1 Сначала и следуйте установленным правилам
Я смотрю на создание таблицы разбора для грамматики LL(1), и все это имеет смысл, кроме одного аспекта!?
Правила для последующего набора швов конфликтуют.
• Для каждого производства X → αAβ, поместите ПЕРВЫЙ (β) - {€} в СЛЕДУЮЩЕМ (A)
• Если € - ПЕРВЫЙ (β), тогда поместите СЛЕДУЮЩУЮ (X) в СЛЕДУЮЩУЮ (A)
это правила 1 и 2 (3 не проблема).
Как реализовать правило 2, если это производственное правило еще не соответствует правилу 1?
так может кто-то объяснить, какое правило применяется к чему и где?
1 ответ
Первое правило гласит, что вы помещаете все в FIRST(β), за исключением эпсилона, если следующий набор содержит его в следующем для А. Эпсилон не должен быть там, так как для А ничего не должно быть законным, если за ним ничего не следует.
Второе правило гласит, что если β может быть эпсилоном, то все, что следует за X, также является законным следствием A, поскольку β может быть получено из ничего.
Правила не являются взаимоисключающими. Вам нужно будет применить все правила к каждому производству, это не так, как если производство подходит для правила 1, тогда вы не будете запускать правило 2. Вы будете запускать все правила до тех пор, пока набор FOLLOW не стабилизируется и больше ничего не будет добавлено.