Ybadoo - Soluções em Software Livre
Tutoriais
Linguagens Formais e Autômatos

Desenvolva uma expressão regular sobre o alfabeto Σ = {x, y, z} que produza a linguagem L = {w | w possui xyz como prefixo e zyx como subpalavra}.

 

Para a classe de problemas abordado no enunciado do exercício, a elaboração da expressão regular que produza a linguagem L, segue o esquema composto por dois casos, como segue:

ER = (((prefixos)(alfabeto)(subpalavras)(alfabeto)) +
((sobreposições prefixos/subpalavras)(alfabeto))

O primeiro caso considera que não existem sobreposições entre os elementos que definem os prefixos e as subpalavras da linguagem L, como segue:

ER = ((prefixos)(alfabeto)(subpalavras)(alfabeto))
ER = (xyz (x + y + z)* zyx (x + y + z)*)

O segundo caso considera a existência de sobreposições entre os elementos que definem os prefixos e as subpalavras da linguagem L, como segue:

ER = ((sobreposições prefixos/subpalavras)(alfabeto))

1. A sobreposição do prefixo xyz com a subpalavra zyx resulta na palavra xyzyx:

ER = (xyzyx (x + y + z)*)

Desta forma, a expressão regular que produza a linguagem L é:

ER = ((xyz (x + y + z)* zyx (x + y + z)*) +
(xyzyx (x + y + z)*))

É possível apresentar uma expressão regular mais concisa que produza a linguagem L, agrupando o primeiro caso e o segundo caso numa única expressão, como segue:

ER = (xyz (ε + ((x + y + z)* z)) yx (x + y + z)*)