Autômatos finitos possuem diversas aplicações práticas, como na detecção de sequências de caracteres em um texto. A função programa do autômato abaixo apresenta um autômato que reconhece sequências sobre o alfabeto Σ = {a, b, c} e uma gramática livre de contexto que gera um subconjunto de Σ*, em que λ representa a palavra vazia. Autômato: M = (S, Σ, δ, s0, F), onde S = {0, 1, 2, 3, 4, 5}, s0 = 0 (estado inicial), F = {5}, Σ = {a, b, c}. A função δ pode ser representada pela tabela abaixo (Tabela 1). A gramática é apresentada em Gramática 1. Analisando a gramática e o autômato acima, conduz-se que:
Questão
Autômatos finitos possuem diversas aplicações práticas, como na detecção de sequências de caracteres em um texto. A função programa do autômato abaixo apresenta um autômato que reconhece sequências sobre o alfabeto Σ = {a, b, c} e uma gramática livre de contexto que gera um subconjunto de Σ*, em que λ representa a palavra vazia.
Autômato: M = (S, Σ, δ, s0, F), onde S = {0, 1, 2, 3, 4, 5}, s0 = 0 (estado inicial), F = {5}, Σ = {a, b, c}.
A função δ pode ser representada pela tabela abaixo (Tabela 1). A gramática é apresentada em Gramática 1.
Analisando a gramática e o autômato acima, conduz-se que:
Alternativas
A) a linguagem gerada pela gramática é inerentemente ambígua.
B) A gramática é regular e gera uma gramática livre de contexto.
C) A linguagem reconhecida pelo autômato é a mesma gerada pela gramática.
D) O autômato reconhece a linguagem sobre Σ em que os strings possuem o prefixo ababc.
E) A linguagem reconhecida pelo autômato é a mesma que a representada pela expressão regular (a+b+c)*(ab)abc(a+b+c)
Explicação
1) Linguagem reconhecida pelo autômato (pela Tabela 1)
- O estado inicial é e o único estado de aceitação é .
- O estado é sumidouro aceitador (com permanece em ), então basta alcançar uma vez.
- A única forma de chegar em é pela transição . Logo, o autômato aceita exatamente as palavras que conseguem levar o autômato ao estado e, em seguida, ler um .
Vamos ver como chegar ao estado :
- (de , com ou fica em ).
- Para avançar: , depois , depois .
Assim, para chegar a é necessário ler a sequência após algum ponto em que se leu um que colocou o autômato em . Juntando tudo, o caminho completo até aceitar é: [ 0 \xrightarrow{a} 1 \xrightarrow{b} 2 \xrightarrow{b} 3 \xrightarrow{a} 4 \xrightarrow{c} 5 ] Ou seja, o autômato aceita qualquer string que contenha o padrão (como subcadeia), e depois disso qualquer coisa é aceita (por ser estado sumidouro aceitador).
Além disso, note um detalhe importante: em existe laço com () e em existe transição com voltando para (). Isso permite repetir blocos do tipo antes de completar o sufixo do caminho final. De fato, a estrutura permite reconhecer strings que têm algum prefixo qualquer, depois zero ou mais repetições de , depois o trecho (na reta final para chegar em ), e depois qualquer sufixo.
Isso corresponde à expressão regular: [ (a+b+c)^*,(ab)^*,abc,(a+b+c)^* ]
2) Conferindo as alternativas
- D) fala em prefixo ababc. O autômato não exige prefixo fixo, e o padrão que leva ao aceite é associado a chegar em e ler (padrão essencial ligado a ), não a obrigar o início do string.
- C) diz que a linguagem do autômato é a mesma da gramática. A gramática dada gera um subconjunto de (e sua forma não indica diretamente que ela gere exatamente todos os strings contendo esse padrão), então não é a melhor conclusão.
- E) coincide com a caracterização por expressão regular do comportamento do autômato.
Portanto, a conclusão correta é que a linguagem reconhecida pelo autômato é a mesma da expressão regular apresentada em E.
Alternativa correta: (E).