Формулировка языка и регулярных выражений - PullRequest
0 голосов
/ 18 декабря 2018

Я не могу понять, что является формальным языком и регулярным выражением этого автомата:

Автомат DFA

Screen Shot

Я знаю, что экземпляр «b» или «a» должен быть четным.Сначала я думал, что язык был:

L = {(a ^ i) (b ^ j) |i (mod2) = j (mod2) = 0, i, j> = 0}

Но автомат может начинаться с 'b', поэтому язык неверен.Кроме того, регулярное выражение, которое я нашел, также не совпадает ((aa) * + (bb) ) -

, например, невозможно получить abab.

1 Ответ

0 голосов
/ 18 декабря 2018

Регулярное выражение, которое я получил, постепенно извлекая узлы (порядок: 3,1,2,0):

(aa|bb|(ab|ba)(bb|aa)*(ab|ba))*

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

Пошаговый процесс

Мы начинаем сдобавление нового начала и принятия состояния.Каждое старое состояние принятия (в данном случае только одно) связывается с новым состоянием принятия с ε-переходом:

step 1—added new start and end states

Далее мы копируемсостояние out 3. Нам нужно сохранить все пути, проходящие через состояние 3. В этом случае мы добавили путь из состояния 0 обратно в себя, пути из состояния 0 в состояние 2 и состояние 2 обратно в себя:

step 2—removed state 3

Мы делаем то же самое с состоянием 1:

step 3—state 1 removed

Мы можем упроститьэто немного: мы будем объединять циклические переходы запятыми.(В конце концов, это превратится в оператор объединения (| или и т. Д. В зависимости от вашей записи).

step 4—simplified

МыЗатем мы удалим состояние 2 и поместим все в один большой цикл:

step 5—state 2 removed

Петли становятся звездами; мы удаляем последнее состояние, поэтому у нас просто естьпереход из начального состояния в конечное состояние, связанное с одним большим регулярным выражением:

step 6—all states removed

И это наше регулярное выражение!

Определение языка

Вы довольно близки с определением языка. Если вы можете позволить что-то более слабое, это будет так:

L = { w | w contains an even number of 'a's and 'b's }

Проблема с вашим определением заключается в том, что вы начинаетестрока w выключается с a каждый раз, тогда как единственным ограничением является соотношение числа a и b.

...