Aspectos Teóricos da
Computação
Prof. Luiz Fernando R B Corrêa
O Professor
Mestre em Engenharia de Software –
CESAR.EDU
Especialista em Planejamento e Gestão
Organizacional – FCAP/UPE
Especialista em TI – CIN/UFPE
Graduado em Ciência da Computação UNICAP
Durante as aulas
Não conversar
Participar das discussões e exercícios
Celulares desligados ou no silencioso
(exceções)
Pontualidade
Assiduidade
Faltas
Máximo 25% das aulas
Justificativa até a aula seguinte ou 7
dias úteis. O que ocorrer primeiro
Depois do prazo de justificativa de
faltas, só com a secretaria/coordenação
Chamada
No fim de cada aula
Cargas Horárias
Semanal: 3 horas-aula
Semestral: 66 horas-aula
Horário
Terças-feiras
Primeira Aula: 19:10h - 20:25h
Intervalo: 20:25h – 20:40h
Segunda Aula: 20:40h - 21:55h
Ementa
Elementos de linguagens formais,
cadeias, alfabetos, linguagens,
gramáticas e reconhecedores.
Hierarquia de Chomsky.
Expressões regulares.
Autômatos finitos determinísticos e
não determinísticos.
Objetivos Gerais
Ao término desta disciplina o aluno
deverá conhecer:
Tipos de linguagens, as gramáticas que
as geram e os autômatos que as
reconhecem. Visando a especificação /
implementação de linguagens de
programação.
Objetivos Específicos
Fornecer ao aluno subsídios para que o
mesmo possa definir linguagens de
programação, isto é, sua sintaxe e
semântica, através do estudo das
gramáticas formais. De tal forma que o
mesmo passe a conhecer o processo de
especificação e implementação de
linguagens de programação, a partir do
estudo dos conceitos, modelos, técnicas
e ferramentas que compõem a Teoria
das Linguagens Formais.
Conteúdo Programático
Fundamentos Matemáticos
Tipos de relações em conjuntos
Fecho de uma relação
Grafos bidirecionais.
Conceitos Básicos de Linguagens
Alfabetos
Palavras sobre um alfabeto
Linguagens
Gramática Irrestrita: definição, regras
de produção e derivação.
Conteúdo Programático
Gramática Sensível ao Contexto.
Gramáticas Livres de Contexto
Linguagens Livres de Contexto.
Árvores de derivação
Ambigüidade.
Conteúdo Programático
Linguagens Regulares
Autômatos finitos determinísticos e nãodeterminísticos
Expressões regulares
Técnicas para identificar e descrever
linguagens regulares
Técnicas para mostrar que uma linguagem
não é regular
Propriedades de tais linguagens.
Estratégia de Trabalho
Aulas expositivas seguidas de
desenvolvimento de exercícios
práticos.
Lista de exercícios/projetos para
serem resolvidas fora da sala de
aula para fixação dos assuntos
abordados nas aulas expositivas.
Avaliação
Média das provas bimestrais com a
nota das listas de exercício/projetos.
O conteúdo das provas será baseado no
que foi visto em sala de aula.
Bibliografia
Básica
LEWIS, Harry R. & PAPADIMITRIOU, Christos H.
Elementos de Teoria da Computação. 2.ed.
Porto Alegre, Bookman, 2000.
MENEZES, Paulo Blauth. Linguagens formais
e autômatos. 2.ed. Porto Alegre, Sagra
Luzzatto, 1998. 165p.
HOPCROFT, JOHN E.; ULLMAN, Jeffrei D.;
MOTWANI, Rajeev; Introdução À Teoria de
Autômatos, Linguagens e Computação; 2002;
Ed Campus.
Bibliografia
Complementar
DIVERIO, T. A. E Menezes, P.B. Teoria da Computação
Máquinas Universais e Computabilidade, Série Livros Didáticos
Número 5, Instituto de Informática, da UFRGS, Editora Sagra
Luzzatto, 1a edição, 1999.
BRAINERD, W. S.; Landweber, L. H. Theory of computation.
New York: John Wiley & Sons, 1974.
SIPSER, Michael; Introdução à Teoria da Computação; 2007;
Ed. Thomson Pioneira.
LEWIS, HARRY ; PAPADIMITRIOU, Christos H.; Elementos de
Teoria da Computação; 2a Ed 2004; Ed BOOKMAN
COMPANHIA.
BLAUTH, Paulo; HAPULER, Edward Hermann; Teoria das
Categorias para Ciência da Computação.
Bibliografia
Suporte
Wikipedia: http://www.wikipedia.org
Scribd: http://www.scribd.com
Aluno
Nome
Expectativa
Trabalha? Com que?
Programa?
Inglês?
Período
Já pagou a disciplina de Grafos?
Já pagou a disciplina de Lógica?
O que é?
Computação
WordNet
the procedure of calculating; determining
something by mathematical or logical
methods
problem solving that involves numbers or
quantities
Houaiss
cômputo, cálculo, contagem; operação
matemática ou lógica realizada por regras
práticas preestabelecidas
O que é?
Computação
Wikipedia
Solução de um problema ou, formalmente,
o cálculo de uma função, através de um
algoritmo
O que é?
Ciência da Computação
Sabha
conhecimento sistematizado relativo à
computação
 O estudo das bases e modelos que
fundamentam o funcionamento de
processamentos computacionais.
O que é?
Teoria da Computação
Sub-campo da ciência da computação
(CC) e matemática, que busca
determinar quais problemas podem
ser computados em um dado modelo
de computação.
Fundamentação teórica para a CC
Tratamento matemático da CC
O que é?
Teoria da Computação: Contextualização
Questões Centrais
Quais as capacidades e limitações
fundamentais dos computadores?
O que pode e o que não pode (problema)
ser resolvido por computadores?
O que faz alguns problemas serem
computacionalmente mais difíceis que
outros?
O que é?
Teoria da Computação: Contextualização
Áreas Centrais
Teoria dos Autômatos
Teoria da Computabilidade
definição e propriedades de modelos
matemáticos de computação
tese de Church-Turing (algoritmos),
decidibilidade e indecidibilidade
Teoria da Complexidade Computacional
classificação de problemas como fáceis ou
difíceis (polinomiais x exponenciais).
Tipos de Problemas
Não-Tratáveis: Não existe algoritmo
que resolva o problema.
Tratáveis: Existe um algoritmo que
resolve o problema.
Como começou ?
Com as perguntas:
1.
COMO ? (as linguagens são definidas)
Estudo de gramáticas de Noam Chomsky
Fonte: HARA, 2009
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o
que é um algoritmo?)
I.
O algoritmo deve ser completo, finito e
determinístico.
 completo: sempre produz um resultado
 finito: tem uma seqüência finita de
instruções
 determinístico: sempre produz o
mesmo resultado para a mesma
entrada
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o
que é um algoritmo?)
II. necessidade de um modelo formal e
abstrato de computação
III. Exemplo: funções recursivas, cálculo
lambda, máquinas RAM, máquinas de
Turing (provado que são todos
equivalentes)
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o
que é um algoritmo?)
IV. Hipótese de Church-Turing: um problema
tem uma solução algorítmica se, e
somente se, pode ser resolvido por um
dos sistemas computacionais
mencionados na transparência anterior
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o
que é um algoritmo?)
V. Problemas com solução computacional ou
sem solução computacional
IV.
Exemplo de problemas sem solução:
Determinar se um programa termina para
todas as entradas possíveis
Determinar se dois programas computam a
mesma função
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o que
é um algoritmo?)
Um Modelo de Computação: Máquina Abstrata.
Deve capturar aspectos relevantes
O
conj. de símb. para representar dados é finito (fin).
Cada dado é representado de forma fin.
A ação a ser executada em cada momento é
determinada com base no dado que está sendo
observado e no estado interno.
Cada ação é executada mecanicamente, em tempo
fin.
O núm de possíveis estados internos distintos é fin.
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o que
é um algoritmo?)
Um Modelo de Computação: Máquina Abstrata.
E abstrair aspectos irrelevantes
A
velocidade de execução.
A capacidade da memória.
Como começou ?
Continuação
2.
O QUE ? (o que conseguimos computar? o que
é um algoritmo?)
Um Modelo de Computação
Deve ser tão simples quanto possível
Conj.
de símbolos para representar dados: {0; 1}.
Apenas 1 símbolo é observado de cada vez.
Uma ação consiste simplesmente em:
ler um símbolo
Verificar o estado atual
mudar o estado interno
mudar a posição de leitura do próximo símbolo
Um estado interno pode ser um estado de parada.
Como começou ?
3.
QUANTO CUSTA? (computar)
 problemas tratáveis ou intratáveis
 Ex: intratáveis (tem solução com
recursos ilimitados): computar todas
as possíveis jogadas de xadrez com
1000 movimentos
Histórico/Evolução
O que os computadores podem
calcular? (~1930)
~1935
Resposta necessitava de um modelo
formal de computabilidade
Kurt Göedel : funções μ-recursivas
Alonso Church: λ-Calculus
Alan Turing: Máquina de Turing
~1940 - Baseado nessas e em
outras idéias foram construídos os
primeiros computadores
Exemplos de Aplicação
Análise léxica e análise sintática de
linguagens de programação
Modelagem de circuitos lógicos ou
redes lógicas
Modelagem de sistemas biológicos
Sintaxe e Semântica
Linguagens Formais
problemas sintáticos das linguagens
Sintaxe e Semântica
Sintaxe e Semântica
Historicamente, o problema sintático
Mais simples que o semântico
Reconhecido/tratado antes do problema
semântico
Sintaxe e Semântica
Conseqüência
Maior ênfase à sintaxe
Criando a impressão que as questões
relativas às resumiam-se às questões da
sintaxe
Teoria da sintaxe possui construções
matemáticas
Bem definidas e universalmente
reconhecidas
Exemplo: Gramáticas de Chomsky
Sintaxe e Semântica
Linguagem de programação (ou
qualquer modelo matemático) pode ser
vista como uma entidade
livre, sem qualquer significado associado
juntamente com uma interpretação do seu
significado
Sintaxe e Semântica
Sintaxe
 Trata das propriedades livres da
linguagem
 Ex: verificação gramatical de
programas
Semântica
 objetiva dar uma interpretação para a
linguagem
 Ex: significado ou valor para um
determinado programa
Sintaxe e Semântica
Ou seja, a sintaxe:
manipula símbolos
Não considera os seus significados
Para problemas reais
Necessário interpretar semanticamente os
símbolos
exemplo: estes símbolos representam os
inteiros
Sintaxe e Semântica
Sintaticamente "errado“
não existe tal noção de programa
simplesmente não é um programa da
linguagem
Sintaticamente válido ("correto")
pode não ser o programa que o
programador esperava escrever
Sintaxe e Semântica
Programa "correto" ou "errado“
se o mesmo modela adequadamente o
comportamento desejado
Limites entre a sintaxe e a semântica
nem sempre são claros
exemplo: ocorrência de um nome em um
programa pode ser tratado facilmente com
um problema sintático ou semântico
entretanto, em linguagens artificiais
distinção entre sintaxe e semântica é (em
geral) óbvia para a maioria dos problemas
relevantes
Sintaxe e Semântica
Análise Léxica
tipo especial de análise sintática
centrada nas componentes básicas da
linguagem
portanto, também é ênfase das Linguagens
Formais
Processo de converter uma sequência de
caracteres em uma sequência de tokens
(símbolos léxicos)
Verifica determinado alfabeto
Vem antes da análise sintática
propriamente dita
Ferramentas
JFLAP
SCTMF
http://www.jflap.org/
http://www.din.uem.br/~yandre/sctmf/
Visual Automata Simulator
http://www.cs.usfca.edu/~jbovet/vas.html
Instalação do JFlap
Ferramenta visual usada para criar e
simular diversos tipos de autômatos, e
converter diferentes representações de
linguagens.
JFLAP JAVA Formal Language and
Automata Package http://homepages.dcc.ufmg.br/~nvieir
a/cursos/tl/a05s2/relatorio_curso.doc
Instalação do JFlap
JFLAP 7.0 Tutorial:
http://www.cs.duke.edu/csed/jflap/tutorial/
Referências
Aula
WordNet - http://wordnet.princeton.edu/
Dicionário Houaiss da Lingua Portuguesa http://houaiss.uol.com.br
Wikipedia – http://www.wikipedia.org
http://en.wikipedia.org/wiki/Theory_of_computation
CI059 - Introdução a Teoria da Computação - Segundo
Semestre de 2009 - Profa. Carmem Hara .
http://www.inf.ufpr.br/carmem/ci059/
Teoria da Computação. Prof. Fabiano Sabha.
http://www.fabianosabha.com.br
Linguagens Formais e Automatos. Prof. Eduardo Araujo
Oliveira. http://sites.google.com/site/eaoufpe/