Conversão de expressões regulares para AFD/AFN

Fonte: testwiki
Saltar para a navegação Saltar para a pesquisa

Conversão de expressões regulares para AFD/AFN é um procedimento utilizado para, dada uma expressão regular (ER), transformá-la em um autômato finito não determinístico(AFN), e deste para um autômato finito determinístico(AFD).

De ER para AFN

Para converter uma ER R para um AFN N, devemos considerar 6 casos, sendo os três primeiros casos considerados casos-base e os três últimos casos "recursivos":

Caso 1: R = a

Seja R = a, para algum a em Σ. Então basta construirmos o seguinte AFN que reconhece L(R):

Q={q1,q2}
q0=q1
qacc={q2}
δ(q1,a)=q2

Caso 2: R = ε

Se R = ε, o seguinte AFN reconhece L(R):

Q={q1}
q0=q1
qacc={q1}
δ(q,a)=,qQ,aΣ

Caso 3: R = {}

Se R = , o seguinte AFN reconhece L(R):

Q={q1}
q0=q1
qacc=
δ(q,a)=,qQ,aΣ

Caso 4: R = A U B

Se R = A U B, e A e B são expressões regulares, construa o seguinte AFN N para reconhecer L(R), a partir dos AFNs J e K para A e B, respectivamente: Sejam

J=(Q1,Σ,δ1,q1,F1)
K=(Q2,Σ,δ2,q2,F2)

Então,

N=(Q1×Q2,Σ,δ,(q1,q2),F)

Tal que

δ((r1,r2),a)=(δ1(r1,a),δ2(r2,a))

e

F={(r1,r2)|r1F1r2F2}

Caso 5: R = A o B

Se R = A o B(concetenação entre A e B), e A e B são expressões regulares, construa o seguinte AFN N para reconhecer L(R), a partir dos AFNs J e K para A e B, respectivamente: Sejam

J=(Q1,Σ,δ1,q1,F1)
K=(Q2,Σ,δ2,q2,F2)

Então,

N=(Q1Q2,Σ,δ,q1,F2)

Tal que δ é:

qQ1qF1δ(q,a)=δ1(q,a)
aϵqF1δ(q,a)=δ1(q,a)
a=ϵqF1δ(q,a)=δ1(q,a){q2}
qQ2δ(q,a)=δ2(q,a)

Caso 6: R = A*

Se R = A*, e A é uma expressão regular, construa o seguinte AFN N para reconhecer L(R), a partir do AFN J que reconhece A, respectivamente: Sejam

J=(Q1,Σ,δ1,q1,F1)

Então,

N=(Q1{q0}2,Σ,δ,q0,F1{q0})

Tal que δ é:

qQ1qF1δ(q,a)=δ1(q,a)
aϵqF1δ(q,a)=δ1(q,a)
a=ϵqF1δ(q,a)=δ1(q,a){q1}
q=q0a=ϵδ(q,a)={q1}
q=q0aϵδ(q,a)=

De AFN para AFD

Seja o AFN N=(Q,Σ,δ,q0,F) e o AFD D=(Q,Σ,δ'1,q0,F). Para convertermos o AFN N para o AFD D, temos quatro casos mais simples, onde setas varϵ não são levadas em consideração:

Q=P(Q)

Todo estado de D é um conjunto de estados de N, sendo P(Q) o conjunto de subconjuntos de Q.


δ(R,a)=rRδ(r,a)

Ou seja, δ é a união dos conjuntos δ(r,a) para todo r pertencente a R.


q0=q0

D começa no estado correspondente à coleção contendo somente o estado inicial de N.


F' = {R ϵ Q' | R contém um estado de aceitação de N} A máquina D aceita se um dos possíveis estados nos quais N poderia estar nesse ponto é um estado de aceitação.


Para considerar as setas ε, é preciso fixar um pouco mais de notação. Para qualquer estado R de D, definimos E(R) como a coleção de estados que podem ser atingidos a partir de R indo somente ao longo de setas ε, incluindo os próprios membros de R. Formalmente, para R Q seja E(R) = {q | q pode ser atingido a partir de R viajando-se ao longo de 0 ou mais setas ε}. Então modificamos a função de transição de D para colocar dedos adicionais sobre todos os estados que podem ser atingidos indo ao longo de setas ε após cada passo. Substituindo δ(r,a) por E(δ(r,a)) dá esse efeito. Consequentemente, δ(R,a) = {q Q | qE(σ(r,a)) para algum r R}.


Adicionalmente, precisamos modificar o estado inicial de D para mover os dedos inicialmente para todos os estados possíveis que podem ser atingidos a partir do estado inicial de N ao longo das setas ε. Mundando q0 para E({q0}) dá esse efeito. Agora completamos a construção do AFD D que simula o AFN N.

Referências

  • Predefinição:Citar livro. Section 1.1: Finite Automata, pp. 31–47. Subsection "Decidable Problems Concerning Regular Languages" of section 4.1: Decidable Languages, pp. 152–155.4.4 DFA can accept only regular language