Você está na página 1de 20

Srie Fundamentos da Engenharia de Software

Autmatos
PINHEIRO, lvaro Farias
Autor

I
Srie Fundamentos da Engenharia de Software
Autmatos
Publicao 2017

O autor acredita que todas as informaes aqui apresentadas esto corretas e podem ser
utilizadas para qualquer fim legal. Entretanto, no existe qualquer garantia explcita ou implcita,
de que o uso de tais informaes conduzir sempre ao resultado desejado. Os nomes de sites e
empresas, por ventura, mencionados, foram utilizados apenas para ilustrar os exemplos, no
tendo vnculo nenhum com o livro, no garantindo a sua existncia nem divulgao. Eventuais
erratas estaro disponveis para download no site de publicao.

As imagens utilizadas neste livro foram obtidas na Internet.

Dados da Publicao

Pinheiro, lvaro Farias


Srie Fundamentos da Engenharia de Software: Autmatos
Ano II Nmero 5 Recife, Maio de 2017
Selo Editorial: Publicao Independente

1. Introduo
2. Expresso Regular
3. Autmatos
4. Linguagem Formal

II
Srie Fundamentos da Engenharia de Software
Autmatos
Publicao Independente
Revista em portugus com o ttulo
Autmatos
Srie Fundamentos da Engenharia de Software
Ano II Nmero 5
Recife Pernambuco Brasil
Maio de 2017

III
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Introduo

A Engenharia de Software um segmento da Computao que existe


decorrente da necessidade de se construir software com qualidade, buscando
planejar e organizar o desenvolvimento e dentro deste campo a disciplina
Teoria da Computao tem a finalidade de conceituar o funcionamento dos
compiladores, entendendo como as linguagens de programao so
construdas e classificadas.

A finalidade dessa disciplina fomentar os conceitos bsicos para o


conhecimento de compiladores, no qual o seu entendimento essencial para a
construo de um programa de computador que, a partir de um cdigo fonte
escrito em uma linguagem compilada, cria um programa semanticamente
equivalente, porm escrito em outra linguagem, chamado de cdigo final. E
para entender um pouco mais necessrio a elucidao das gramticas:
lxica, sinttica e semntica.

Anlises de um compilador:

Lxica - o processo de analisar a entrada de linhas de caracteres e


produzir uma sequncia de smbolos;
Sinttica - a anlise das regras que regem a construo de frases; e
Semntica - a terceira fase da compilao onde se verifica os erros
semnticos, isto , de lgica.

1.1 Definies

O que computao? Uma forma de defini-la a forma de se estudar a


soluo de um problema, isto , analisar e projetar soluo a um problema.

O que Teoria da Computao? um subcampo da cincia da computao,


que tem por objetivo descobrir quais problemas podem ser computados,
fazendo o uso de um modelo.

1.2 Modelos

Foi no sculo XX que teve incio aos estudos do que iria ser a Teoria da
Computao. O objetivo era (e ainda), descobrir quais problemas
matemticos poderiam ser resolvidos por um mtodo simples.

Diversos modelos a partir desse momento foram propostos, como a Mquina


de Turing, modelo Recursivo, Clculo Lambda, Regras Gramaticais, Cadeias
de Markov, Sistemas de Post, etc.Todos os formalismos propostos acima so
equivalentes em termos computacionais, assim o objetivo atual verificar a
possibilidade de realizar certos tipos de computao em determinados tipos de
mquina.

1.3 Finalidade

A teoria da computao serve para estudar os modelos computacionais, como


tambm os limites dessa computao. Buscando respostas para questes do
tipo: Independente do hardware, quais problemas jamais podero ser
resolvidos por uma mquina? Problema da parada; Problema da
Correspondncia de Post.

http://www.alvarofpinheiro.eti.br/ Pgina 1
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Quais problemas podem ser resolvidos, mas necessitam de um longo perodo


que se torna impraticvel? (Aritmtica de Presburger) Em que situaes
podem ser mais difceis a resoluo de um problema do que verificar cada
uma das solues manualmente? Classes P e NP.

1.4 Classes

A teoria da computao se divide em duas classes. Observando a figura 1.1 se


pode observar as classes azuis que pertencem teoria da computabilidade e
as em vermelho a teoria da complexidade. Assim, com o estudo das
Expresses Regulares, podem se identificar e especificar padres de cadeias
de caracteres, que so utilizados em linguagens de programao.

Outro formalismo so os Autmatos Finitos, utilizados em desenho de circuitos


e em alguns sistemas de resoluo de problemas. As gramticas livres de
contexto so utilizadas para especificar a sintaxe das linguagens de
programao; um formalismo equivalente so os autmatos com pilha, ou
pushdown autmato.

Figura 0.1 Classes

Fonte: Prprio Autor

Modelos de computao diferentes podem realizar tarefas distintas. Assim,


uma forma de estudar o poder de um modelo computacional estudar a
classe das linguagens formais que o modelo pode gerar.

http://www.alvarofpinheiro.eti.br/ Pgina 2
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Figura 1.2 Hierarquia Chomsky

Fonte: Internet

1.5 Expresso Regular

Uma regex uma forma flexvel de identificar cadeias de caracteres. Essas


expresses podem ser escritas numa linguagem formal e interpretadas por
programas que servem como analisadores sintticos, examinando o texto e
identificando partes que casam com a especificao dada.
O matemtico Kleene desenvolveu as regex como uma notao ao que ele
chamava de lgebra de conjuntos regulares, servindo como base para os
primeiros algoritmos computacionais de busca e depois para ferramentas de
tratamento de texto.

Atualmente as regex servem para procura e substituio de texto em editores


de texto e linguagens de programao, validao de formatos de texto,
validao de protocolos, validao de formatos digitais, realce de sintaxe e
filtragem de informao.

Como uma regex serve para descrever um conjunto de cadeias de caracteres


sem precisar listar todos os elementos do conjunto, existem alguns caracteres
coringa para isso.

O formalismo padro usa trs operaes bsicas:

(+) unio
(.) concatenao
(*) kleene

Essas construes podem ser combinadas arbitrariamente para formar


expresses complexas, assim como expresses aritmticas com nmeros e
operaes de adio, subtrao, multiplicao e diviso.

1.5.1 Unio

L(E + F) = L(E) U L(F)


E={001,110) F={ ,11,110}
={001,110, ,11}

1.5.2 Concatenao

L(E . F) = L(E) . L(F)


E={001,110) F={ ,11,110}

http://www.alvarofpinheiro.eti.br/ Pgina 3
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

L={001,00111,001110,110,11011,110110}

1.5.3 Klenee

L(E*) = (L(E*))*
E={001,110)
={ ,001,110,001001,001110,...}
F={"ab", "c"}*
={ , "ab", "c", "abab", "abc", "cab", "cc", "ababab", "abcab", ... }

1.6 Teoria dos Autmatos

um subcampo da cincia da computao que estuda as mquinas de


estados finitas, considerando suas representaes matemticas.

Um autmato um modelo matemtico de uma mquina de estados que


funciona como um reconhecedor de uma determinada linguagem. Baseado na
Teoria dos Sistemas, os estados esto sempre em transio, por exemplo:
uma TV pode estar ligada e transitar para desligada, tem ento um sistema
com dois estados.

Uma forma de utilizao dos autmatos no reconhecimento de padres, a


exemplo, editores de textos.

1.7 Classes dos Autmatos

A seguir sero apresentados trs tipos de autmatos finitos:

1.7.1 Autmatos Finitos Determinsticos

Cada estado de um autmato desse tipo tem uma transio para cada smbolo
do alfabeto;

1.7.2 Autmatos Finitos No Determinsticos

Os estados de um autmato desse tipo podem ou no ter uma transio para


cada smbolo do alfabeto, ou podem ter at mesmo mltiplas transies para
cada smbolo; e

1.7.3 Autmatos Finitos No Determinsticos com Transies


(Espontneas)

Alm de ser capaz de pular para mais (ou nenhum) estados com quaisquer
smbolos, esse tipo de autmato pode pular para outros estados sem que haja
nenhum smbolo (String vazia).

1.8 Outros Tipos de Autmatos

Extenses de Autmatos Finitos. A famlia de linguagens aceitas pelos


autmatos descritos acima chamada de famlia de Linguagens regulares.

Autmatos mais poderosos podem aceitar linguagens mais complexas. Tais


autmatos incluem:

http://www.alvarofpinheiro.eti.br/ Pgina 4
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

1.8.1 Autmatos Pilha (ou pushdown)

Tais mquinas so idnticas aos autmatos finitos determinsticos, exceto pelo


fato deles adicionalmente carregarem a memria sob a forma de pilhas. A
funo de transio ir depender agora dos smbolos que esto no topo da
pilha, e especificaro como a pilha deve ser modificada a cada transio. Os
autmatos pilha aceitam linguagens livres de contexto.

1.8.2 Mquina de Turing

Essas so as mais poderosas mquinas computacionais. Elas possuem uma


memria infinita sob a forma de uma fita, uma cabea que pode realizar a
leitura ou alterao da fita, alm de poder movimentar-se ao longo da fita. As
mquinas de Turing so equivalentes a algoritmos e compem a base terica
da computao moderna. Mquinas de Turing aceitam linguagens
recursivamente enumerveis.

1.8.3 Autmato Linearmente Limitado ou Linear Bounded

uma mquina de Turing limitada, ao invs de ser uma fita infinita, a fita tem
uma quantidade de espao proporcional ao tamanho da String de entrada.
Aceitam linguagens sensveis ao contexto.

1.9 Projetos de Linguagens de Programao

Agora que entendemos o bsico, vamos entender o que so linguagens de


programao e como elas so projetadas.

Existem algumas caractersticas bsicas necessrias a serem trabalhadas


para projetarmos uma linguagem. Essas so: a sua arquitetura, a configurao
tcnica, os seus padres e a compatibilidade com o legado.

Ento vamos entender o que arquitetura de uma linguagem. Basicamente


podemos dizer que, projetar uma linguagem levar em considerao seu
hardware, e o modelo que o define, isto , o modelo de von Neumann Eckert,
lembrando, trata-se do modelo, entrada-processamento-sada. Ento, boa
parte, das linguagens, como C, projetada para essa arquitetura de mquina,
mas existem outras que no o so a exemplo o Lisp.

Detalhando um pouco mais a questo de arquitetura, temos que as linguagens


so projetadas para atend-las, e nos dias atuais, so dois os projetos bsicos
de arquiteturas:

Complex Instruction Set Computer (CISC), traduzindo Computador com um


Conjunto Complexo de Instrues.

Explicando basicamente o que , trata-se de um padro de construo de


processadores capazes de executar centenas de instrues complexas. Mas,
o que quer dizer isso? Uma forma simples de explicar, que dizer que, no
processador, so armazenadas instrues chamadas de microcdigo, que se
no o existissem, teriam que ser codificadas pelos programadores nas
linguagens. Esse armazenamento de instrues nos processadores minimiza e
simplifica o trabalho de desenvolvimento, j que muito cdigo comum a
qualquer tipo de programa j est embutido no processador.

http://www.alvarofpinheiro.eti.br/ Pgina 5
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Como consequncia direta as linguagens concebidas para essa arquitetura,


tendem a ter um cdigo executvel bem menor. Mas, a sua desvantagem
que como a microprogramao realizada visa prever uma grande quantidade
de funcionalidades comuns aos aplicativos, torna esse tipo de processador se
torna pesado em relao ao tempo de resposta. E para completar com o
passar do tempo, notou-se que muitas dessas funcionalidades embutidas nos
microcdigos nuca eram usadas na maioria das aplicaes desenvolvidas.
Resumindo temos um melhor cdigo com pior desempenho.

Reduced Instruction Set Computer (RISC), traduzindo Computador com um


Conjunto Reduzido de Instrues.
Trata-se de outro padro de construo de processadores, que como a prpria
sigla j diz, oferece um conjunto simples e pequeno de instrues
armazenadas no processador. Simplificando, os processadores desse padro
no possuem ou possuem muito pouco microcdigo. Consequncia direta
que o esforo de desenvolvimento torna-se maior. Porm, como os
processadores no possuem microcdigo desnecessrio, prevendo
funcionalidades comuns a diversos tipos de programas, que normalmente no
so usadas, o tempo de resposta muito superior. Grandes partes dos
projetos de processadores atuais seguem esse modelo de arquitetura.
Resumindo temos um melhor desempenho com pior cdigo.

Outra preocupao no projeto de uma linguagem de programao em


relao ao nicho que ela pretende atender, para resolver os seus problemas.
Esse objetivo gera uma srie de restries, de natureza tcnica ou de modelo,
que so normalmente observados, durante o projeto de uma linguagem de
programao. Essas restries tecnolgicas esto relacionadas aos seguintes
nveis de abstrao, observadas na figura 1.3.

Figura 1.3 Camadas de Linguagens

Fonte: Prprio Autor

Mais uma preocupao no projeto de desenvolvimento de uma nova


linguagem a sua compatibilidade com os seus projetos anteriores, caso
existam. Isso se deve pela necessidade de se poderem manter os cdigos
produzidos pelas verses anteriores com a nova linguagem. Uma tarefa muito
complicada. Mas, a preocupao com o legado na rea de TIC uma
constante.

http://www.alvarofpinheiro.eti.br/ Pgina 6
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Depois, que uma linguagem se torna bem aceita pelo mercado, mais uma
preocupao se passam a ter que a sua padronizao. Essa padronizao
necessria, para uniformizar o uso e a evoluo da linguagem. Normalmente
as entidades que formalizam a padronizao so a ANSI e o ISO, veja os links
para saber mais.

Uma categorizao importantssima nos projetos de linguagens de


programao a Hierarquia de Chomsky, que classifica as linguagens em
tipos, os quais podem ser vistos abaixo.

Tipo 3: Gramtica Regular > Linguagem Regular > Autmato Finito


Tipo 2: Gramtica Livre de Contexto > Linguagem LC > Autmato com Pilha
Tipo 1: Gramtica Sensvel ao Contexto > Linguagem SC > Autmato Linear
Tipo 0: Gramtica Irrestrita > Linguagem Recursiva > Mquina de Turing

Mas para se ter uma ideia dos mesmos, vamos falar sucintamente sobre eles.
Comeando com a explicao de Linguagens Formais e Autmatos.
Basicamente o estudo de modelos matemticos que permitam definir e
reconhecer linguagens, possibilitando a sua classificao, estruturao e
caractereizao. conhecida como Teoria da Cincia da Computao. A
finalidade do estudo dessas teorias fornecer fundamentos para a Cincia da
Computao em relao decidibilidade, computabilidade e complexidade
computacional. Essas teorias fundamentam vrias reas da computao,
como processamento de linguagens, reconhecimento de padres, modelagem
de sistemas.

1.10 Linguagem Formal

Sabemos que linguagem uma forma de comunicao e que com a evoluo


do homem, essas ganharam especializaes, do tipo lxico, sinttico e
semntico. Essas especializaes servem tanto para linguagens naturais ou
idiomas, como tambm para linguagens de programao e dos protocolos de
comunicao. Assim, podemos dizer que as Linguagens Formais consistem de
regras para representao e especificao de linguagens.

As representaes so feitas por reconhecedores e geradores de linguagens,


que nada mais , que um recurso que verificam se uma sentena pertence ou
no a uma determinada linguagem. Esses recursos so chamados de
autmatos, que podem ser: Autmatos Finitos Determinsticos; Autmatos
Finitos No Determinsticos; Autmatos de Pilha; e Mquina de Turing.

J os geradores so recursos que permitem a gerao sistemtica de todas as


sentenas de uma linguagem. Esses recursos so as gramticas, a qual se
destaca a de Chomsky. Resumindo, as linguagens formais podem ser
representadas de maneira finita e precisa atravs de teorias matemticas, o
que caracteriza a Cincia da Computao.

1.10.1 Tipo 3

Das linguagens regulares, que podem ser representados pelos autmatos


finitos determinsticos e no determinsticos. Essas linguagens se baseiam nas
Expresses Regulares. Essas expresses so representadas por trs formas
bsicas: Unio, representada pelo smbolo (+) permitindo unir expresses;
Concatenao, representada pelo smbolo (.) permitindo concatenar

http://www.alvarofpinheiro.eti.br/ Pgina 7
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

expresses; e Klenee, representada pelo smbolo (*) permitindo potencializar


expresses.

Seguem exemplos das Regular Expression (RegEx):

Para L(E + F) = L(E) U L(F), como E={001,110) e F={ ,11,110},


temos ={001,110, ,11}
Para L(E . F) = L(E) . L(F), como E={001,110) e F={ ,11,110},
temos L={001,00111,001110,110,11011,110110}
Para L(E*) = (L(E*))*, como E={001,110),
temos ={ ,001,110,001001,001110,...}

Essas expresses podem ser representadas por Autmatos. E o que so?


So mquinas de estados finitos, isto , um autmato finito. Trata de uma
modelagem de um comportamento, composto por estados, transies e aes.
Um estado armazena informaes sobre o passado, isto , ele reflete as
mudanas desde a entrada num estado, no incio do sistema, at o momento
presente. Uma transio indica uma mudana de estado e descrita por uma
condio que precisa ser realizada para que a transio ocorra. Uma ao a
descrio de uma atividade que deve ser realizada num determinado
momento. Mquinas de estados finitos podem ser representadas por meio de
um diagrama de estados ou diagrama de transio de estados.

A quntupla dos autmatos finitos : M = (Q, , , i, F) onde:


Q um conjunto finito de estados;
o alfabeto de entrada;
a funo de transio de estados;
i o estado inicial; e
F um conjunto de estados finais ou de aceitao.

Segue um exemplo de autmato finito para definio de uma linguagem:

L= {p{0,1} *|111 seja uma subcadeia de p}

L-se: Para uma linguagem, dado uma palavra que pertence ao dialeto 0 e 1
baseado na expresso de klenee, tal que, 111 seja uma subcadeia da palavra.

Temos:

Observe que os valores da quntupla para esse exemplo so:


Para Sigma temos 0 e 1;
Para Q temos q0, q1, q2, q3, q4 e q5;
Para Delta temos a tabela de transies acima;
Para i temos q0; e
Para F temos q3 e q4.

Um detalhe importante para a definio dos autmatos finitos a pequena


diferena entre os determinsticos (AFD) e no determinsticos (AFND). O
primeiro s permite a transio de um estado para outro, j o segundo mais
flexvel, permitindo transies no mesmo estado, at mesmo transies
espontneas, isto , independente de uma leitura. Veja o exemplo, para a
mesma linguagem, sendo o primeiro atendido por um AFD e o segundo por um

http://www.alvarofpinheiro.eti.br/ Pgina 8
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

AFND. Para a mesma linguagem L={p{0,1}*|111 seja uma subcadeia de


p} temos uma representao mais limpa, observe a figura 1.4.

Figura 1.4 Autmato

Fonte: Prprio Autor

1.10.2 Tipo 2

Das linguagens livre de contexto, essas so representadas por autmatos com


pilhas. Que so idnticos aos autmatos finitos determinsticos, exceto pelo
fato eles adicionalmente usam o recurso de memria sob a forma de pilhas. A
funo de transio ir depender agora dos smbolos que esto no topo da
pilha, e especificaro como a pilha deve ser modificada a cada transio.

Os autmatos com pilha determinsticos so definidos com a sxtupla dos


autmatos com pilha : M = (Q, , G, , i, I, F) onde:
Q o conjunto finito de estado;
o alfabeto de entrada;
a funo de transio;
i o estado inicial;
I o smbolo inicial da pilha; e
F o conjunto de estados finais.

Os autmatos com pilha no determinsticos so definidos com a stupla dos


autmatos com pilha : M = (Q, , G, , i, I, F) onde:
Q o conjunto finito de estado;
o alfabeto de entrada;
G o alfabeto da pilha;
a funo de transio;
i o estado inicial;
I o smbolo inicial da pilha; e
F o conjunto de estados finais.

Anlogo s Linguagens Regulares (LR), as Linguagens Livres de Contexto


(LCC) podem ser utilizadas como reconhecedoras. O seu funcionamento e os
componentes de um Autmato com Pilha (AP) so: a) uma fita de entrada, b)
uma cabea de leitura, c) um indicador de estado e d) uma pilha. Veja a figura
1.5.

http://www.alvarofpinheiro.eti.br/ Pgina 9
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Figura 1.5 Autmato

Fonte: Internet

O funcionamento de um AP consiste em posicionar a cabea de leitura em um


smbolo de entrada e em seguida posicionar a outra cabea de leitura no topo
da pilha obtendo os valores contidos na fita e na pilha e, com base nesses
valores os seguintes passos devem ser realizados:

Remover o item no topo da Pilha;


Colocar um novo item na Pilha;
Transitar para outro estado; e
Avanar para o prximo smbolo na entrada.

Para entender melhor esse mecanismo, veja a figura 1.6 e observe os passos
para reconhecimento da linguagem: L = {a*b* | *>=0}. Para cada lido, deve-se
inseri-lo na pilha, e para cada b lido deve-se remover um a da pilha, no trmino
uma palavra p ser reconhecida se no final do processo a pilha estiver vazia.

Figura 1.6 Elementos da Transio

Fonte: Internet

A figura 1.7 representa a transio, onde temos (a) o smbolo lido da fita, (A)
representa o smbolo lido da pilha, e (beta) a palavra gravada na pilha.
Resumindo temos:

Figura 1.7 Transio

Fonte: Internet

Vamos entender o AP com o exemplo:

http://www.alvarofpinheiro.eti.br/ Pgina 10
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

L1 = {a*b* | * >= 0}

1 = ({a,b},{q1,q2,q3}, ,q1,{B})

1(q1,a,?) = {(q1,B)}
1(q1,b,B) = {(q2,?)}
1(q1,?,?) = {(q3,?)}
1(q2,b,B) = {(q2,?)}
1(q2,?,?) = {(q3,?)}

A mquina M1 para representar a linguagem L1 iniciada no estado q1 e para


cada smbolo (a) lido da fita armazenado um smbolo (B) na pilha, no estado
q2 realizado a verificao se cada smbolo (b) da fita existe um
correspondente (B) na pilha. O algoritmo somente aceitar a palavra se ao
terminar de ler toda ela pilha estiver vazia.

A representao desse autmato em grafo pode ser observado na figura 1.8 e


essa mquina aceita palavras como: ab, aabb, aaabbb,...

Para explicar melhor, a mquina M1 possui o estado q1 com trs smbolos, os


quais o primeiro da esquerda para direita o smbolo a ser reconhecido que
ser lido na fita (a), o segundo o smbolo a ser lido da pilha (?=vazio) e o
terceiro o smbolo a ser gravado na pilha (B). Para cada (a) lido na fita um
(B) foi gravado na pilha, podendo ser repetido quantas vezes for desejado. A
transio do estado q1 para o q2 consiste em uma leitura de trs smbolos, o
qual tem o smbolo que ser lido da fita (b), em seguida o smbolo que ser
lido da pilha (B), e o terceiro o smbolo que ser gravado na pilha (?) assim
sendo um vazio. No estado q2 com os mesmos trs smbolos, temos o
smbolo que ser lido da fita (b), em seguida o smbolo que ser lido da pilha
(B), e o terceiro o smbolo que ser gravado na pilha (?) assim sendo um
vazio, podendo ser repetido quantas vezes for desejado. Quando no existir
mais smbolos para serem lidos na fita e da pilha, chega-se ao final.

Figura 1.8 Gerado pela ferramenta Simulador

Fonte: Prprio Autor

Mais um exemplo. Fazer uma mquina para: M2 = {anbman+m | n >=0 e m >= 0}


Esta mquina aceita palavras como: abaa, aabbaaaa, aaabbbaaaaaa,... como
pode ser observado na figura 1.9.

http://www.alvarofpinheiro.eti.br/ Pgina 11
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Figura 1.9 Autmato gerado pela ferramenta Simulador

Fonte: Prprio Autor

1.10.3 Tipo 1

Das linguagens sensveis ao contexto, essas so representadas por uma


forma restrita de uma mquina de Turing no determinstica que satisfaa as
duas condies seguintes: Seu alfabeto de entrada inclui dois smbolos
especiais, servindo como marcadores de direo da esquerda e direita; e
Necessitam de um ponteiro que se move para a esquerda levando alm do
marcador.

1.10.4 Tipo 0

Das linguagens recursivas, essas so representadas por mquinas como as


de Turing, Moore e Mealy. A Mquina de Turing um recurso terico
conhecido tambm como mquina universal, que foi concebido pelo
matemtico britnico Alan Turing, antes do surgimento dos modernos
computadores digitais. um modelo abstrato de computador, que trata apenas
dos aspectos lgicos de funcionamento da memria, estados e transies.
Porm com essa abstrao pode-se modelar qualquer computador digital.
A Mquina de Moore outro recurso que utiliza apenas aes de entrada e a
sada depende somente do estado. A vantagem do modelo de Moore a
simplificao do comportamento. Por exemplo, modelar um elevador com
quatro estados possveis para sua porta "Aberta", "Fechada", "Abrindo",
"Fechando". A mquina de estados reconhece dois comandos:
"comando_abrir" e "comando_fechar" que disparam a alterao de estado. A
ao de entrada no estado "Abrindo" liga o motor que abre a porta, a ao de
entrada no estado "Fechando" liga o motor na outra direo, fechando a porta.
Os estados "Aberta" e "Fechada" no desempenham nenhuma ao. E
a Mquina de Mealy mais um recurso onde sada depende da entrada e do
estado. O uso de uma mquina Mealy normalmente leva a uma reduo no
nmero de estados. O exemplo anterior nessa mquina seria: inicie o motor
para fechar a porta se o comando_fechar chegar e inicie o motor na direo
oposta para abrir a porta se o comando_abrir chegar.

1.10.5 Mquina de Turing

A Mquina de Turing (MT) bastante simples, baseia-se em uma fita de


comprimento infinito que pode se mover para direita ou para esquerda clula-
a-clula e cada clula pode conter um caractere ou estar vazio. A cabea
chamada de C fixa e pode ler e escrever contedo em uma clula, deixando-
o cheio ou vazio.

A MT composta por uma fita que como j dito infinita e pode se mover. Por
um registrador de estados que armazena o estado da mquina, isto , um
dispositivo que armazena os estados, incluindo o estado inicial com o qual o
registrador inicializado. A MT tambm composta por uma tabela de

http://www.alvarofpinheiro.eti.br/ Pgina 12
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

transio, que determina o caractere a ser escrito, como tambm o sentido da


navegao da fita, se para esquerda e ou para direita, e qual o novo estado,
isto , caractere que foi lido na fita e o estado em que se encontra. E caso no
exista entrada de dados a mquina para.

A sptupla que define a MT = (Q,,,s,b,F, ) onde:


Q um conjunto finito de estados;
um alfabeto finito de caracteres;
o conjunto finito de caracteres;
s o estado inicial;
b o smbolo branco; e
o conjunto dos estados finais.

Para entender o funcionamento da MT vamos verificar a figura 1.10 com o


exemplo utilizando o alfabeto {b, 0}, no qual o b (b) representa o caractere
branco e o 0 (zero) o caractere a ser lido e escrito. O comportamento dessa
mquina ser o seguinte: Ela espera uma srie de 0's na fita, com a cabea
posicionada inicialmente no 0 mais esquerda, e repete os 0's com um b no
meio. Representando, temos "000" que se torna "000b000". Nesse exemplo o
conjunto de estados {s1, s2, s3, s4, s5} e o estado inicial s1. Para
visualizar o exemplo, segue a tabela de ao

Figura 1.10 Mquina de Turing


Estado Caractere Caractere
Estado
Ao Lido Escrito Sentido
Novo
------ -------- -------- ------- ------
s1 0 b s2
s2 0 0 s2
s2 b b s3
s3 b 0 s4
s3 0 0 s3
s4 0 0 s4
s4 b b s5
s5 0 0 s5
s5 b 0 s1
Fonte: Prprio Autor

A leitura dessa tabela pode ser feita da seguinte forma como mostra a figura
1.11: Estando a MT no estado s1 e o caractere lido pela cabea for zero, ento
se escreve o caractere b e move-se uma posio para a direita, alm de
mudar o estado para s2.

Figura 1.11 MT
Passo Estado
Fita
----- ------ ----
1 s1 00
2 s2 b0
3 s2 b0b
4 s3 b0bb
5 s4 b0b0

http://www.alvarofpinheiro.eti.br/ Pgina 13
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

6 s5 b0b0
7 s5 b0b0
8 s1 00b0
9 s2 0bb0
10 s3 0bb0
11 s3 0bb0b
12 s4 0bb00
13 s4 0bb00
14 s5 0bb00
15 s1 00b00
Fonte: Prprio
Autor

O comportamento dessa mquina pode ser descrito como um lao, que


iniciado em s1, substitui o primeiro zero por um b, ento usa o s2 para mover
para a direita, passando pelos 0's e pelo primeiro b encontrado, s3 ento
passa pela prxima sequncia de 0's e substitui o primeiro b que encontrar por
um 0, s4 move de volta para a esquerda, passando pelos 0's at encontrar um
b e passando para o estado s5. O s5 ento move para a esquerda, passando
pelos 0's at achar o b escrito inicialmente em por s1. Substitui o b por 0, move
uma posio para a direita e entra no estado s1 para realizar outra passada
pelo lao, repetindo o processo at s1 encontrar um b que fique entre duas
cadeias de 0's.

Finalizando, os principais objetivos de um projeto de linguagem de


programao so a obteno da:

Abstrao; Clareza;
Confiabilidade;
Eficincia;
Legibilidade;
Ortogonalidade;
Simplicidade; e
Suporte

http://www.alvarofpinheiro.eti.br/ Pgina 14
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Livros da srie Fundamentos da Engenharia de Software


Fundamentos da Introduo Este livro sobre
Engenharia de Banco de Dados. processos de
Software: Neste so desenvolvimento
Conceitos abordados os de software,
Bsicos uma conceitos bsicos evidenciando a
coletnea de de bancos de necessidade de
disciplinas que dados e seus qualidade na
integradas sistemas construo de
servem para gerenciadores, sistemas,
fundamentar o mas com o foco conceituando a
entendimento da construo de na arquitetura relacional, porque diferena entre desenvolvimento
projetos de software com qualidade, ainda hoje o mercado faz uso em Adhoc e com processo. Para isso
isto , baseado em processos larga escala desses bancos de realizado a introduo engenharia
maduros e reconhecidos pela dados, mesmo que o paradigma de requisitos abordando as tcnicas
comunidade tecnolgica. O objetivo predominante seja o orientado a para a elicitao de requisitos que
deste livro fornecer ao leitor as objetos e que, j existam a um bom forneam subsdios necessrios para
bases necessrias para o tempo bancos orientados a objeto, uma construo de software com
desenvolvimento de aplicaes at mesmo os bancos objetos- maior qualidade, enfatizando a
sejam Desktop, Web ou Mobile. relacionais que so um hibrido entre necessidade de se aplicar na
Iniciando a leitura na Teoria da essas duas arquiteturas, o que construo de qualquer sistema as
Computao, passando por predomina ainda o relacional, tcnicas de anlise e modelagem,
Processos, Linguagens, Bancos de assim, este material focado na evidenciando o uso da linguagem da
Dados e finalizando com Sistemas linguagem de consulta estruturada Linguagem de Modelagem Unificada
de Informao e Colaborao. para os SGBD-Rs do mercado, com (UML) para diagramar um projeto de
Este livro pode ser lido captulo a foco na comparao de cinco dos software, explicando a necessidade
captulo ou somente a disciplina mais utilizados bancos relacionais, do uso de modelos na construo,
desejada, pois sua elaborao os quais so: Oracle, SQLServer, entrando com detalhes na anlise
consiste na compilao das MySQL, SQLBase e Interbase. orientada a objetos, com o objetivo
disciplinas fundamentais da de explorar os seus conceitos de
Engenharia de Software que so requisitos e modelagem integrados.
independentes, mas ao mesmo Este material finalizado com a
tempo se integram objetivando o introduo medidas de esforo de
desenvolvimento de aplicaes. desenvolvimento, tcnica necessria
parar responder as perguntas
bsicas de qualquer
desenvolvimento: Qual o prazo e
custo? E para responder a essas
questes abordado o uso da
mtrica anlise de ponto de funo.

Este livro aborda A motivao Este livro o


os sistemas que deste livro resultado do uso
so classificados exemplificar os da ferramenta MS
como informao, conceitos de Project da
a exemplo, Padres de Microsoft utilizada
sistemas de apoio Projetos utilizando na aplicao dos
a deciso, a linguagem de conceitos de
sistemas programao gesto de projetos
estratgicos, Java, sendo a do PMBOK com
sistemas construo uma as premissas da
gerenciais e sistemas transacionais. compilao das aulas produzidas engenharia de testes para aquisio
A produo deste material que com o intudo de facilitar o de qualidade nos produtos de
compe o volume 4 da coleo entendimento do assunto abordando software.
Fundamentos da Engenharia de os seguintes temas: Paradigma
Software resultado da compilao Orientado a Objetos que introduz o
das aulas produzidas nas disciplinas leitor nos conceitos do POO;
que compem os captulos deste Linguagem de Modelagem Unificada
livro. para apresentar a simbologia UML
dos conceitos de POO; Linguagem
de Programao Java apresentando
essa poderosa linguagem de
programao orientada a objetos
para exemplificar os padres de
projeto; e Padres de Projetos que
neste livro aborda os mais
referenciados nas academias, sendo
eles o GRASP e GoF.

http://www.alvarofpinheiro.eti.br/ Pgina 15
Srie Fundamentos da Engenharia de Software Ano II Nmero 5 Autmatos

Este livro aborda Este livro introduz


basicamente os nas tecnologias
conceitos bsicos Web abordando
de programao os conceitos
como autmatos, bsicos para
tipos de desenvolvimento
linguagens, para Internet com
princpios dos a apresentao
compiladores, da plataforma Dot
paradigmas de Net e exibindo
desenvolvimento e lgica de dicas de codificao para a
programao. linguagem de marcao ASPX, para
a linguagem de script mais utilizada
pelos navegadores o JavaScript com
exemplos de CSS e principalmente
dicas de cdigo para a linguagem de
programao CSharp e de banco de
dados SQL com foco no SQLServer.
.

http://www.alvarofpinheiro.eti.br/ Pgina 16