Перевод правой рекурсивной грамматики в чамскую нормальную форму

StackOverflow https://stackoverflow.com/questions/4051095

Вопрос

Я пытаюсь сделать упражнение, где я перевожу грамматику в чамскую нормальную форму. Я понимаю, как сделать это в нормальных обстоятельствах, но на этот раз грамматика я работаю, является правильным рекурсивным. (Технически грамматика - это ответ на предыдущий вопрос, поэтому я мог бы просто иметь неправильную гамма.)

Я думаю, что могу сделать это, используя фиксированную последовательность правил вместо ε правил, но я хочу убедиться, что я не направляюсь в неправильном направлении. Проще объяснить с примером:

Для грамматики, которая производит n 'A, где n больше 0 и кратко из трех: (не волнуйтесь, это совершенно отличается от грамматики, которые мои фактические упражнения)

S-> Aaaa
A-> Aaaa
A-> ε

Будет правильный перевод:

S0-> S
S-> A'B
A'-> AA'
A-> A'B
B-> B'C
A'-> a
B'-> a
C-> a
Это было полезно?

Решение

Хотя ваша грамматика направо - рекурсивна, вы можете выполнить преобразование Chomsky Normal Form, как и любая другая (неправая рекурсивная) грамматика. Просто следуйте алгоритму, изложенному в вашей книге, что, вероятно, состоит из двух шагов: (1) Заменить все вхождения клемм а. по правилам A -> A, куда А. не происходит в наборе правила; (2) Преобразовать все правила A -> W, куда лен(w)> 2, по правилам длины 2, содержащие свежие переменные.

Для тебя А. Правило, то построить правило для получения клемм, скажем K -> а, и заменить все вхождения терминала а.:

A -> AKKK

Затем положите грамматику в CNF

A    -> AA'
A'   -> KA''
A''  -> KK
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top