Полагаю, вы имеете в виду преобразовать ее в формальную грамматику с правилами вида V-> w, где V - нетерминал, а w - строка терминалов / нетерминалов. Для начала вы можете просто сказать (смешивая синтаксис CFG и регулярное выражение):
S -> 01+10(11)*
Где S - начальный символ. Теперь давайте разберем его немного (и добавим пробел для ясности):
S -> 0 A 1 0 B
A -> 1+
B -> (11)*
Ключ должен преобразовать *
es и +
es в рекурсию. Сначала мы преобразуем звезду Клини в плюс, вставив промежуточное правило, которое принимает пустую строку:
S -> 0 A 1 0 B
A -> 1+
B -> (empty)
B -> C
C -> (11)+
Наконец, мы преобразуем нотацию +
в рекурсию:
S -> 0 A 1 0 B
A -> 1
A -> A 1
B -> (empty)
B -> C
C -> 11
C -> C 11
Чтобы обработать x?
, просто разбейте его на правило, создающее пустое, и правило, создающее x.