Он может генерировать все не палиндромы
ужен CFG, который будет генерировать строки, отличные от палиндромов. Решение было предоставлено и выглядит следующим образом. (Введение в теорию вычислений - Sipser)
R -> XRX | S
S -> aTb | bTa
T -> XTX | X | <epsilon>
X -> a | b
Я получил общее представление о том, как работает эта грамматика. Это требует вставки подстроки, которая имеет соответствующие неравные алфавиты на своей половине, через производствоS -> aTb | bTa
, таким образом гарантируя, что палиндром никогда не может быть создан.
Я запишу семантику первых двух произведений, как я ее понял,
S
генерирует строки, которые не могут быть палиндромами, потому что их первый и последний алфавиты не равныR
состоит по крайней мере из одногоS
как подстрока, гарантирующая, что это никогда не палиндром.Я не совсем понимаю семантику третьего производства, т.е.
T -> XTX | X | <epsilon>
X -> a | b
На мой взгляд, T может генерировать любую комбинацию a и b, т. Е. {A, b} *. Почему это не могло быть как
T -> XT | <epsilon>
X -> a | b
Разве эти два эквивалента не являются? Поскольку последний более интуитивно понятен, почему он не используется?