2014-01-15 8 views
0

Я застрял в написании регулярного выражения для данного языка над алфавитом {a,b}. Строки принимаются, если они начинаются с подстроки «aa» или заканчиваются подстрокой «bb».Конечные автоматы и регулярное выражение

Например, {aab, abb, aaba} принимаются, но {Λ, ab, abaa} - нет.

Попын. Решение: {aa* + ab* + bb*}, но я подумал: что, если строка началась с b? Тогда мое выражение не сработало бы.

Любая помощь была бы замечательной!

ответ

1

Это очень просто:

Регулярное выражение для языка над строкой алфавит {a,b}, начинается с подстроки 'aa' или заканчивается подстроки 'bb'.

Регулярное выражение:

aa(a + b)* + (a + b)*bb

Примечание + является объединение здесь.

0

Я думаю, что это, вероятно, сработает.

^aa[a,b]*|[a,b]*bb$ 
+0

Я так не думаю, ваше решение обеспечивает «aa» и «bb» в конце каждой строки, поэтому «ababb» не будет работать – user3197786

+0

^aa [a, b] * | [a, b] * bb $ означает^aa [a, b] * или [a, b] * bb $. Так ababb будет работать для [a, b] * bb $. Возможно, я не совсем понял ваш вопрос. Является ли | знак разрешен в ваших автоматах? –

Смежные вопросы