Você está na página 1de 18

1

Universidade Católica de Moçambique

Faculdade de Ciências Sociais e Politicas

Curso. Tecnologias de Informação – 1º Ano/Laboral

Cadeira: Fundamentos de Tecnologias de Informação

Tema: Teoria de Computação

Docente:

Eng. Beldo Mário

Quelimane, Abril de 2018


2

Universidade Católica de Moçambique

Faculdade de Ciências Sociais e Politicas

Curso. Tecnologias de Informação – 1º Ano/Laboral

Cadeira: Fundamentos de Tecnologias de Informação

Tema: Teoria de Computação

Discentes:

Clélio João Samo

Patrão Abdul Alberto Docente:

Edson Castelo Eng. Beldo Mário

Abdul Ali Omar

Marion Pedro

Mario Armadina

Quelimane, Abril de 2018


3

Índice
Introdução........................................................................................................................................4

Teoria de Computação.....................................................................................................................5

Linguagem de Programação............................................................................................................5

Linguagens Formais.........................................................................................................................5

Gramáticas e Linguagens Formais...................................................................................................6

Representação de Linguagens Formais...........................................................................................7

Linguagem de Programação............................................................................................................7

Hierarquia de Chomsky...................................................................................................................8

Dispositivo Reconhecedor...............................................................................................................9

Autómato Finito Determinístico (AFD)........................................................................................10

Transformação de AFD em Gramática Regular (GR)...................................................................11

Transformação de Gramática Regular (GR) em AFD...................................................................12

Expressões Regulares (ER)............................................................................................................13

Propriedades das Linguagens Regulares (LR)...............................................................................14

Limitações de AFDs: exemplos de linguagens não regulares.......................................................15

Lema do Bombeamento para LRs.................................................................................................16

Conclusão......................................................................................................................................17

Bibliografia....................................................................................................................................18
4

Introdução

Neste presente trabalho de Fundamentos de Tecnologias de Informação, o grupo vai abordar, o


tema relacionado a Teoria de computação, que vamos começar pela conceituação de teoria de
computação, como são aplicadas, também descreveremos a linguagem de programação,
linguagens simples, e por último iremos definir as declarações simples.

O objetivo deste trabalho é de trazer conhecimentos teóricos e práticos relativos ao tema em


causa.

Para que fosse possível a realização do presente trabalho, o grupo teve como metodologia de
trabalho a consulta bibliográfica
5

Teoria de Computação

Segundo Rómulo Silva (2007), A Teoria da Computação abrange o estudo de modelos de


computadores ou máquinas e o respetivo poder computacional destes modelos. Isto é, que classes
de problemas podem ser resolvidas em cada modelo e comorepresentá-los.

O modelo de computação atual (ano base: 2007) é incapaz de entender a linguagemhumana


direta: seja falada ou escrita, dado o número enorme de possibilidades designificados e/ou
acepções de uma mesma palavra, além das variações deconstruções de frases.

Segundo José Neto, No vasto campo da Ciência da Computação, pode-se dizer com segurança
que a Teoria da Computaçãoocupa um merecido lugar de destaque, devidoà sua importância
como sustentáculo conceitualde todos os conhecimentos da área, tanto dos maisfundamentais e
abrangentes como dos mais particularese específicos.

Linguagem de Programação

Segundo Danielle Casillo, Linguagem:é uma forma precisa de expressar problemas, permitindo
umdesenvolvimento formal adequado ao estudoda computabilidade.

As definições que seguem são construídas_ As definições que seguem são construídas usando
como base a noção de símbolo oucaractere, que é uma entidade abstractabásica, não sendo
definida formalmente. Letrase dígitos são exemplos de símbolosfrequentemente usados.

Linguagens Formais

Segundo Rómulo (2007),Linguagens Formais. Para diminuir este distanciamento entre a língua
humana (por exemplo: o português, o inglês, etc.) e a programação de computadores
foramcriadas as linguagens de programação. Estas são linguagens formais, isto é,procuram
eliminar toda ambiguidade possível, garantindo assim que um comando epalavras reservadas
tenham sempre o mesmo significado independentemente deonde apareçam no programa.

A língua portuguesa é uma linguagem natural, sendo que sua representação escritapossui uma
gramática. Esta indica onde se deve usar preposição ou não; aconcordância verbal e nominal,
entre outras regras.
6

Gramáticas. Da mesma forma, as linguagens de programação possuem umagramática associada,


que define a formação de programas válidos. Por exemplo: secada comando deve ser seguido de;
(ponto-e-vírgula), se o tipo de uma variável vemantes ou depois de seu nome.

Algoritmos. As resoluções de problemas são representadas através de algoritmos,sendo que


esses são implementados computacionalmente em alguma linguagem deprogramação.

Compiladores. Os compiladores fazem tradução dos programas escritos nasdiversas linguagens


de programação para instruções que o computador é capaz deexecutar. Assim, a Teoria da
Computação está intimamente ligada ao estudo de linguagens: sua representação (gramática); e
sua tradução para instruções damáquina usada (compilador).

Gramáticas e Linguagens Formais

Uma gramática define a estrutura geral de formação de uma sentença válida parauma linguagem.
Suponha o seguinte exemplo simplificado para a Língua Portuguesa:

<Frase>:= <Sujeito><Predicado>

<Sujeito>:= <Artigo><Substantivo>

<Predicado>:= <Verbo><Complemento>

<Complemento>:= <Artigo><Substantivo>

<Artigo>:= “o” | “a”

<Substantivo>:= “livro” | “mente”

<Verbo>:= “abre”

Forma Normal de Backus. A gramática anterior está especificada numa notação conhecida
como Forma Normal de Backus (BNF). Nessa notação, as palavras entreos símbolos <e> são
chamadas variáveis. O símbolo:= indica que a variável à sua esquerda pode ser substituída pelos
valores à direita.
7

Assim, a gramática anterior estabelece que uma frase é formada por um sujeitoseguido de um
predicado, sendo que este por sua vez é formado por um verboseguido de um complemento. E
portanto, a frase “o livro abre a mente” é uma fraseválida segundo a gramática acima.

Em uma linguagem de programação teríamos, por exemplo, uma regra que define umcomando
de atribuição válido:<Atribuição>:= <Variável> “:=” <Valor> “;”onde <Variável> se refere a
qualquer sequência de caracteres começando comalguma letra.

Representação de Linguagens Formais

Uma linguagem formal pode ser representada de 3 maneiras:

Enumeração das cadeias que fazem parte dela.

Gramática, isto é, um conjunto de regras que especifica a formação das cadeias.

Dispositivo reconhecedor (máquina), que possui embutido um conjunto de regras de aceitação de


cadeias.

A primeira só pode ser utilizada para linguagens finitas. As duas últimas são capazesde
representar linguagens com número infinito de cadeias.

Linguagem de Programação

Segundo Rómulo Silva (2007), Linguagens de Programação. A gramática de uma linguagem


de programação representa todos os programas possíveis de serem escritos nela, geralmente
umnúmero potencialmente infinito de programas. Assim, o primeiro trabalho do(s) criador(és) de
uma linguagem de programação é definir sua gramática.

Notação. Usa-se L (G) para denotar a linguagem gerada pela gramática G.

Gramáticas equivalentes. Uma mesma linguagem pode ser gerada por diferentesgramáticas.
Por exemplo, a gramática:

S → Ab

A → aA | a
8

Gera a mesma linguagem descrita pela gramática vista anteriormente. Assim, quandoduas
gramáticas geram a mesma linguagem, elas são ditas gramáticas equivalentes. Formalmente:
G1é equivalente a G2se e somente se L (G).

No estudo das linguagens formais, as gramáticas são classificadas de acordo com asrestrições
que se impõem sobre suas regras de produção. Assim, as linguagensformais podem ser
classificadas em:

Linguagens Regulares (Tipo 3) - LR

Linguagens Livres de Contexto (Tipo 2) - LLC

Linguagens Sensíveis ao Contexto (Tipo 1) - LSC

Linguagens Recursivamente Enumeráveis (Tipo 0) –LRE

Segundo José Neto, Linguagens de Programação; Outro assunto, que se revela de imensa
impor tância teórica e prática na vida do profissional de computação, refere-se às linguagens de
programação. Este artigo procura não se reportar às linguagens específicas propriamente ditas,
atendo-se, por questões de escopo, somente ao aspecto teórico e conceitual do estudo de
linguagens de programação em geral.

Hierarquia de Chomsky

As linguagens livres de contexto (LLC) são menos restritivas que as linguagens regulares (LR).
As linguagens sensíveis ao contexto(LSC) são menos restritivas que linguagens livres de
contexto (LLC) e assim pordiante. A hierarquia assim gerada é chamada de Hierarquia de
Chomsky.

Devido ao fato que um tipo de linguagem com mais restrições é um caso particular deum tipo de
linguagem com menos restrições, então toda LR é uma LLC. Toda LLC éuma LSC, e toda LSC é
uma LRE.

Estudaremos inicialmente apenas as linguagens regulares (LR).

Gramática Regular (GR). Uma gramática G é regular se todas suas produções sãotais que
podem ser colocada em alguma das seguintes formas:
9

A→ a

A→ aB

A→ e

Isto é, do lado esquerdo da regra sempre há somente um não-terminal. Do ladodireito há um


terminal sozinho (acompanhado no máximo de um não-terminal), ou háapenas a palavra vazia
(e).

Às vezes, inicialmente a gramática não possui todas suas regras em alguma dasformas segundo a
definição de gramática regular. No entanto, fazendo-se pequenas alterações é possível obter uma
gramática equivalente onde todas as regras estejamde acordo com a definição de gramática
regular. Exemplo: seja Ga gramática aseguir:

S → AB

A → aA | a

B→b

G1 é regular. Para ver isto, basta observar que ela é equivalente a G, definida por:

S → aA

A → aA | b

Linguagem Regular (LR). Uma linguagem é regular se ela pode ser descrita usandouma
gramática regular (GR).

Modelos de Máquinas

Dispositivo Reconhecedor

Uma outra maneira de definir uma linguagem é através da utilização de um dispositivo


reconhecedor, que permite submeter uma palavra oucadeia a um teste de aceitação capaz de
determinar se tal palavra pertence ou não àlinguagem em questão.
10

O dispositivo reconhecedor é na verdade um modelo matemático que descreve ofuncionamento


de uma máquina, onde as cadeias são submetidas para aceitação ourejeição.

Cada tipo de linguagem da Hierarquia de Chomsky possui um reconhecer distinto.

Linguagem Reconhecedor

Linguagens Regulares (LR) Autômatos Finitos

Linguagens Livres de Contexto (LLC) Autômatos com Pilha

Linguagens Sensíveis ao Contexto Máquina de Turing com memória


(LSC) limitada

Linguagens Recursivamente Máquina de Turing


Enumeráveis (LRE)

Inicialmente estudarão os autómatos finitos, capazes de reconhecer linguagens regulares


(LR).

Autómato Finito Determinístico (AFD)

Definição. Um Autómato Finito Determinístico (AFD) é um modelo de máquina definido


formalmente por uma quíntupla M = (_ , Q, _, q0, F), onde:

_ : alfabeto de símbolos de entrada

Q: conjunto finito de estados possíveis para M

_: função transição ou função programa definida em Q x _ _ Q

q0: estado inicial de M, sendo q0 ÎQ

F: conjunto de estados finais, tal que FÍ Q

Um AFD pode ser representado esquematicamente conforme a Figura 3: os símbolos

Que compõem a palavra a ser testada encontram-se escritos numa fita de entrada,dividida em
células, onde cada símbolo ocupa exactamente uma célula. Há um controlefinito composto pelos
11

estados possíveis para o autómato, sendo que existe ummarcador que indica o estado actual.
Além disso, há uma cabeça de leitura que lê umsímbolo por vez da fita.

Finito. O autómato é dito finito porque o conjunto de estados possíveis (Q) é finito.

Determinístico. O autómato é determinístico quando dado o estado actual de M, ao lerum


determinado símbolo na finita de entrada existe apenas um próximo estadopossível.

Estado Inicial. O estado inicial q0 indica que ao “ligarmos” o AFD, o marcador


automaticamente se posiciona no estado q0, antes de ler qualquer símbolo da fita de entrada. Só
pode existir um único estado inicial.

Aceitação. Uma palavra é reconhecida (ou aceita) quando o AFD após ler todos os símbolos
contidos na fita de entrada, o marcador se encontrar em um estado final. Ao contrário do estado
inicial, podem existir vários estados finais.

Rejeição. Uma palavra é rejeitada quando após ler todos os símbolos da fita de entrada, o
marcador não se encontrar em um estado final ou quando não existe uma transição definida para
um símbolo a ser lido, estando o autómato num determinado estado.

Máquina de Estados Finitos. Alguns autores denominam os AFDs de máquinas de estados


finitos.

Transformação de AFD em Gramática Regular (GR)

É possível escrever uma gramática regular para todo AFD. Para tal basta seguir o algoritmo a
seguir:
12

A cada estado é associado um não-terminal da gramática, sendo o estado inicial q0 associado ao


símbolo inicial (S).

Para cada transição de estado representada no grafo cria-se uma regra de produção na gramática,
tal que o estado de origem torna-se o não-terminal à esquerda da regra e o estado destino torna-se
um não-terminal do lado direita da regra após o terminal lido na transição.

Cria-se uma regra para cada não-terminal associado a um estado final onde o lado direito da
regra é formado apenas pela palavra vazia (_).

Como exemplo considere o AFD da Figura 5. Fazendo-se q0 = S, q1 = A e q2 = B, a gramática


equivalente ao AFD é:

S _ aA

A _ bA | cB | _

B _ cB | _

Transformação de Gramática Regular (GR) em AFD

O algoritmo a seguir mostra como encontrar um AFD equivalente a uma dada gramática regular.
Todas as regras da gramática devem ser do tipo A _ aB (não-terminal levando a um terminal
seguido de um único não-terminal) ou A _ a (não-terminal levando a um terminal sozinho) ou A
_ _ (não-terminal levando à palavra vazia).

Para cada não-terminal crie um estado para o AFD, sendo que o símbolo inicial seja o estado
inicial ( S = q0 ).

Para cada regra do tipo A _ aB crie uma transição que parta do estado A com destino ao estado B
através da leitura do terminal a.

Para cada regra do tipo A _ a crie uma transição que parta do estado A com destino a um estado
Ax, através da leitura do terminal a. Além disso, marque o estado como final

Para cada regra do tipo A _ _, faça do estado associado ao não-terminal A um estado final.
13

Expressões Regulares (ER)

As linguagens regulares podem ser representadas usando uma notação denominada expressão
regular. Uma expressão regular utiliza apenas símbolos terminais e alguns caracteres especiais
(meta caracteres), sendo que estes têm a função de especificar a quantidade de vezes que um
terminal ou grupo de símbolos terminais se repetem dentro da formação de uma palavra
pertencente à linguagem.

Definição. A definição formal de uma expressão regular pode ser feita recursivamente da
seguinte maneira:

Se x é um terminal, x é expressão regular.

Se r e s são expressões regulares, então r+sé expressão regular. O sinal + indica que tanto r ou s
formam palavras válidas

Se r e s são expressões regulares, então rsé expressão regular, onde as palavras são formadas
pela concatenação de r e s.

Se r é expressão regular, r* denota a expressão regular onde r é repetida zero ou mais vezes.

Se r é expressão regular, r+ denota a expressão regular onde r é repetida uma ou mais vezes.
Portanto r+ = rr*.

Utilizam-se parêntesis para agrupar símbolos que se repetem conjuntamente.

Exemplos:

001(0+1) denota L = {0010, 0011};

01(10+11) denota L = { 0110, 0111};

(0 + 01)1 denota L = { 01, 011};

ab*a denota L = {aa, aba, abba, abbba, ...}, isto é, L = { w | w inicia com um a seguido de zero ou
mais b’s e termina com um a}

a(bc)*a denota L = {aa, abca, abcbca, abcbcbca, ...}, isto é, L = { w | w inicia-se com um seguido
de zero ou mais sequências de bce termina com a}
14

ab+a denota L = {aba, abba, abbba, ...}, isto é, L = { w | w inicia-se com um a seguido de um ou
mais b’s e termina com a}

(ab + bc)a denota L = {aba, bca}

(a+b)* denota L = {a,b}*, isto é todas as palavras possíveis de serem formadas a partir do
símbolos a e b, inclusive a palavra vazia.

(a+b)*c(a+b)* denota L = { w | w possui exactamente um c sobre Ʃ= {a,b,c}* }

Unix. O comando grep do sistema operacional Unix permite o uso de expressões regulares para
busca de padrões.

Exemplos:

grep “Mar*” arq: listará todas as linhas do arquivo arq que contêm palavras contendo a string
Mar.

grep Maria arq* : listará todas as linhas de arquivos cujo nome comece com arq e que contenha a
string Maria.

grep –i maria arq : listará todas as linhas do arquivo arq que contenham a string maria (ignorando
maiúsculas e minúsculas).

grep –v maria arq : listará todas as linhas do arquivo arq que não contenham a string maria.

grep “[a-z]”arq: listará todas as linhas do arquivo arq que comecem com as letras minúsculas de
a a z.

Propriedades das Linguagens Regulares (LR)

Algumas observações sobre linguagens regulares (LR), autómatos finitos determinísticos (AFD),
gramáticas regulares (GR) e expressões regulares (ER):

Toda LR possui GR equivalente

Toda LR possui AFD que a reconhece.

Toda ER possui AFD equivalente


15

Toda GR possui AFD equivalente

Além das observações anteriores, as linguagens regulares possuem as seguintes propriedades:

Concatenação: a concatenação de LRs resulta em LR

União: a união de LRs resulta em LR

Fecho: o fecho (repetição de zero ou mais vezes) de LR resulta em LR

Intersecção: a intersecção entre LRs resulta em LR

Complemento: o complemento (Ʃ* - L) de uma LR resulta em LR.

Fechamento. Pelas propriedades anteriores, diz-se que a classe das linguagens regulares (LR) é
fechada quanto às operações de concatenação, união, fecho, intersecção e complemento. Pois, o
resultado dessas operações recai dentro da própria classe de linguagens regulares (LR).

As operações de concatenação, união e fecho podem ser melhor visualizadas quando as


linguagens regulares são representadas através de expressões regulares. Assim, sejam r e s
expressões regulares para as linguagens L1 e L2.

rsrepresenta a concatenação de L1 e L2.

srrepresenta a concatenação de L2 e L1.

r+srepresenta a união de L1 e L2.

r*representa o fecho de L1

Limitações de AFDs: exemplos de linguagens não regulares

Conforme visto anteriormente, toda LR possui um AFD que a reconheça. Portanto, uma forma
de saber se uma linguagem é regular, é construindo um AFD que a reconheça.

Problema. Inversamente, se não for possível a construção do AFD, então a linguagem não é
regular. Porém, como provar a impossibilidade de construir um AFD para uma dada linguagem?

A seguir apresentamos o Lema do Bombeamento para LRs, usado para responder à pergunta
anterior.
16

Lema do Bombeamento para LRs.

Se L é uma linguagem regular, logo existe AFD para L com n estados, sendo n finito. Se uma
palavra w ∈L têm comprimento maior ou igual a n, isto é, |w| ≥ n, então o AFD assume algum
estado mais de uma vez e portanto existe um ciclo no autómato.

wpode ser dividida em w = uvztal que |uv| ≤ n e |v| ≥ 1, onde v é a parte de w reconhecida pelo
ciclo. Portanto uviz∈L para i ≥ 0.

Exemplo de linguagem não regular: L = {anbn | n ≥ 0}.

Demonstração por absurdo: suponha que L seja regular, então pelo Lema do

Bombeamento para LRs, w = anbn pode ser reescrita como w = uvz onde |uv| ≤ n e |v|

≥ 1. Além disso, uviz∈ L para i ≥ 0. Tem-se um absurdo, pois |uv| ≤ n, uv é composto

só por a’s. Por exemplo, uv2z ∉ L, pois não possui o mesmo número de a’s e b’s. Logo

L não é linguagem regular.

Outros exemplos de linguagens não regulares:

L = {anbm | n ≤ m}

L = {anb2n | n ≥ 1}

L = {an | n é primo}

Dependência. Observando os exemplos de linguagens não regulares apresentados, é possível


notar que a quantidade de um determinado símbolo depende da quantidade de outro símbolo, ou
ainda depende de um algoritmo que não pode ser representado usando um número finito de
estados.

Memória. Os AFDs não possuem memória. Isto é, são incapazes de armazenar a quantidade lida
de um determinado símbolo. Nisto, reside sua principal limitação para reconhecer linguagens
como L = {anbn | n ≥ 0} e L = {anbm | n ≤ m}.
17

Conclusão

Chegado ao do presente trabalho de Fundamentos de Tecnologias de informação, o grupo


conclui que no vasto campo da ciência da computação, pode-se dizer com segurança que a
Teoria da Computaçãoocupa um merecido lugar de destaque, devidoà sua importância como
sustentáculo conceitualde todos os conhecimentos da área, tanto dos maisfundamentais e
abrangentes como dos mais particularese específicos.

O grupo também conclui que a linguagem de programação é um Outro assunto, que se revela de
imensa importância teórica e prática na vida do profissionalde computação, refere-se às
linguagens de programação.Este artigo procura não se reportaràs linguagens específicas
propriamente ditas,atendo-se, por questões de escopo, somente ao aspectoteórico e conceitual do
estudo de linguagensde programação em geral.
18

Bibliografia

Silva, R, (2007). Teoria da Computação.(3ª. ed.).São Paulo, Brasil: Editora Erica Ltda.

Neto, J, (2002).Teoria da Computação: Máquinas Universais e Computabilidade, (2ª.


ed.).EditoraSagraLuzzatto.

Você também pode gostar