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

Desenvolva uma expressão regular sobre o alfabeto Σ = {w, x, y, z} que produza a linguagem L = {w | w possui wxyz ou wxz ou zw como prefixo, xzy ou yzw ou zxzw como subpalavra e wwx ou yzy ou zwz como sufixo}.

 

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 quatro casos, como segue:

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

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

ER = ((prefixos)(alfabeto)(subpalavras)(alfabeto)(sufixos))
ER = ((wxyz + wxz + zw) (w + x + y + z)* (xzy + yzw + zxzw) (w + x + y + z)* (wwx + yzy + zwz))

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)(sufixos))

1. A sobreposição do prefixo wxyz com a subpalavra yzw resulta na palavra wxyzw:

ER = (wxyzw (w + x + y + z)* (wwx + yzy + zwz))

2. A sobreposição do prefixo wxyz com a subpalavra zxzw resulta na palavra wxyzxzw:

ER = (wxyzxzw (w + x + y + z)* (wwx + yzy + zwz))

3. A sobreposição do prefixo wxz com a subpalavra xzy resulta na palavra wxzy:

ER = (wxzy (w + x + y + z)* (wwx + yzy + zwz))

4. A sobreposição do prefixo wxz com a subpalavra zxzw resulta na palavra wxzxzw:

ER = (wxzxzw (w + x + y + z)* (wwx + yzy + zwz))

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

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

1. A sobreposição da subpalavra xzy com o sufixo yzy resulta na palavra xzyzy:

ER = ((wxyz + wxz + zw) (w + x + y + z)* xzyzy)

2. A sobreposição da subpalavra yzw com o sufixo wwx resulta na palavra yzwwx:

ER = ((wxyz + wxz + zw) (w + x + y + z)* yzwwx)

3. A sobreposição da subpalavra yzw com o sufixo zwz resulta na palavra yzwz:

ER = ((wxyz + wxz + zw) (w + x + y + z)* yzwz)

4. A sobreposição da subpalavra zxzw com o sufixo wwx resulta na palavra zxzwwx:

ER = ((wxyz + wxz + zw) (w + x + y + z)* zxzwwx)

5. A sobreposição da subpalavra zxzw com o sufixo zwz resulta na palavra zxzwz:

ER = ((wxyz + wxz + zw) (w + x + y + z)* zxzwz)

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

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

1. A sobreposição do prefixo/subpalavra wxyzw com a sobreposição da subpalavra/sufixo yzwwx resulta na palavra wxyzwwx:

ER = (wxyzwwx)

2. A sobreposição do prefixo/subpalavra wxyzw com a sobreposição da subpalavra/sufixo yzwz resulta na palavra wxyzwz:

ER = (wxyzwz)

3. A sobreposição do prefixo/subpalavra wxyzxzw com a sobreposição da subpalavra/sufixo zxzwwx resulta na palavra wxyzxzwwx:

ER = (wxyzxzwwx)

4. A sobreposição do prefixo/subpalavra wxyzxzw com a sobreposição da subpalavra/sufixo zxzwz resulta na palavra wxyzxzwz:

ER = (wxyzxzwz)

5. A sobreposição do prefixo/subpalavra wxzxzw com a sobreposição da subpalavra/sufixo zxzwwx resulta na palavra wxzxzwwx:

ER = (wxzxzwwx)

6. A sobreposição do prefixo/subpalavra wxzxzw com a sobreposição da subpalavra/sufixo zxzwz resulta na palavra wxzxzwz:

ER = (wxzxzwz)

7. A sobreposição do prefixo/subpalavra wxzy com a sobreposição da subpalavra/sufixo xzyzy resulta na palavra wxzyzy:

ER = (wxzyzy)

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

ER = (((wxyz + wxz + zw) (w + x + y + z)* (xzy + yzw + zxzw) (w + x + y + z)* (wwx + yzy + zwz)) +
(wxyzw (w + x + y + z)* (wwx + yzy + zwz)) +
(wxyzxzw (w + x + y + z)* (wwx + yzy + zwz)) +
(wxzxzw (w + x + y + z)* (wwx + yzy + zwz)) +
(wxzy (w + x + y + z)* (wwx + yzy + zwz)) +
((wxyz + wxz + zw) (w + x + y + z)* xzyzy) +
((wxyz + wxz + zw) (w + x + y + z)* yzwwx) +
((wxyz + wxz + zw) (w + x + y + z)* yzwz) +
((wxyz + wxz + zw) (w + x + y + z)* zxzwwx) +
((wxyz + wxz + zw) (w + x + y + z)* zxzwz) +
(wxyzwwx) +
(wxyzwz) +
(wxyzxzwwx) +
(wxyzxzwz) +
(wxzxzwwx) +
(wxzxzwz) +
(wxzyzy))

É possível apresentar uma expressão regular mais concisa que produza a linguagem L, agrupando as ocorrências dos casos idênticos numa única expressão, como segue:

ER = (((wxyz + wxz + zw) (w + x + y + z)* (xzy + yzw + zxzw) (w + x + y + z)* (wwx + yzy + zwz)) +
((wxyzw + wxyzxzw + wxzxzw + wxzy) (w + x + y + z)* (wwx + yzy + zwz)) +
((wxyz + wxz + zw) (w + x + y + z)* (xzyzy + yzwwx + yzwz + zxzwwx + zxzwz)) +
(wxyzwwx + wxyzwz + wxyzxzwwx + wxyzxzwz + wxzxzwwx + wxzxzwz + wxzyzy))