Как преобразовать диаграмму NFA в регулярное выражение? - PullRequest
0 голосов
/ 09 октября 2018

Я просматриваю регулярные выражения и застрял в следующем вопросе:

Укажите регулярное выражение для описания языка следующего NFA: Диаграмма NFA

Я не знаю, как ответить на следующий вопрос, и я не хочу, чтобы кто-нибудь дал мне ответ на него.Если возможно, я был бы очень признателен за некоторые рекомендации о том, как решить такие вопросы или как решить эту конкретную проблему.Спасибо!

Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 10 октября 2018

Базовое преобразование, вы знаете, что.

{q0, x, q0} becomes x*
{q0, x, q1} becomes x
{q0, x, q1}, {q0, y, q1} becomes x+y

Ваша диаграмма - DFA.Ваше самое правое государство не должно быть q1.У вас есть двойной q1.Назовите самое правильное состояние q3 с этого момента.

Я думаю, что самая трудная часть заключается в том, что происходит исходящий переход из q3 обратно в q1 и q2.

Мы начнем с левой части.

{q0, x, q0},{q0, y, q1} => x*y

q0 - начальное состояние, q1 - конечное состояние.Тогда x*y всегда должно происходить.Остальное может случиться или нет, потому что есть переход обратно на q1 с q3.Итак, мы можем написать так:

RE = x*y( ... )*

Мы сейчас работаем в скобках.

{q1, x, q2}, {q1, y, q2} => (x+y)

Поскольку есть переход обратно к q2 из q3, мыможно написать:

RE = x*y((x+y)( ... ))*

Поскольку существует только один переход для достижения конечного состояния, т.е. {q3, y, q1}, тогда мы ставим y в конце.

RE = x*y((x+y)( ... )y)*

Последняя часть исбивающая с толку часть: {q2, y, q2}, {q2, x, q3}, {q3, x, q2} => (y+xx)*x

Объяснение:

Мы находимся на q2, и у нас есть y* или (xx)* один или несколько раз, чтобы вернуться к q2.Мы можем написать (y*+(xx)*)* или просто (y+xx)*.Помните, что мы должны быть на q3, чтобы перейти в конечное состояние, читая y, затем с q2 нам нужно прочитать x, чтобы (y+xx)*x.

Итак, полное регулярное выражение: x*y((x+y)(y+xx)*xy)*

...