0

Я пытался найти «первый набор» этой контекстно-свободной грамматики. Я придумал 2 ответа, но я не уверен, что они верны. Я был бы признателен, если бы кто-нибудь мог объяснить, как создать первый набор этой грамматики.Как сгенерировать FIRST-набор этого контекстно-свободного грамматика

Оба ответа написаны по-разному, потому что источники, которые я прочитал, объяснили это разным синтаксисом.

Грамматика в вопросе:

E1 -> E2+E1|E2 
E2 -> num*E2|num 

Моего первый ответ:

| A -> α  | FIRST(α) | 
|:----------- |------------:| 
| E1 -> E2+E1 | {num, num} | 
| E1 -> E2  | {num, num} | 
| E2 -> num*E2 | {num} | 
| E2 -> num | {num} | 

Моего второй ответ:

FIRST(E1) = {num} 
FIRST(E2) = {num} 

Я хочу поблагодарить вас заранее.

ответ

1

Наиболее часто используемым определением FIRST является то, что FIRST (S) представляет собой набор терминальных символов, которые могут появляться в начале некоторого вывода, начиная с S, plus & epsilon; если пустая строка также может быть получена.

Здесь следует заметить, что FIRST (S1) = FIRST (S2), поскольку любой вывод, начинающийся с S1, обязательно должен начинаться с чего-то, полученного из S2, и S2 не может выводить пустую строку. Затем FIRST (S2) = {num}, поскольку каждое произведение S2 начинается с {num}.

Итак, да, FIRST (S1) = FIRST (S2) = {num}.

Особые средства, с помощью которых вы вычисляли FIRST (S1) и FIRST (S2) - то есть, смотрели на постановки и видели, что получило что - хорошее.

+0

Для уточнения, правильная ли таблица «первый комплект»? @templatetypedef – fs2ly

+1

@ReeLink Да! Это верно. – templatetypedef

Смежные вопросы