Você está na página 1de 34

TEORIA DA COMPUTAÇÃO E

COMPILADORES
Disciplina: Teoria da computação
Discente: Mateus Victor de Lira Lopes

Mossoró, dezembro de 2020.


Sumário:
1. Introdução;

2.
1.INTRODUÇÃO:
O início de tudo:
A teoria da computação teve início nos primeiros
.

anos do século XX;

A vira nos estudos desse campo acontecem após a


palestra do matemático alemão David Hilbert;

Os matemáticos tentavam descobrir quais


problemas matemáticos poderiam ser resolvidos por
um método efetivo, e quais não poderiam;
1. INTRODUÇÃO:
O início de tudo:
Precisava-se de um modelo .

formal da computação;

Diversos modelos diferentes


da computação foram
propostos pelos primeiros
pesquisadores, por exemplo,
a Máquina de Turing;
2.O QUE É TEORIA DA
COMPUTAÇÃO?
Portanto, a teoria da computação é o ramo que surge
para: .

Estudos teóricos acerca da capacidade e resolução de


problemas e maquinas;

Estudo de modelos formais que caracterizam:


1. Em nível conceitual programas e maquinas enfim a
computação;
2. especificam o que é computável ou não;
3. Ajudam na especificação de linguagens artificiais entre
outras aplicações.
2.O QUE É TEORIA DA
COMPUTAÇÃO?
Dessa forma, a teoria esteve e esta por tras
de toda tecnologia ao logo do tempo;
.

Na teoria da computação existem duas linhas de


estudo:
2.1. MAQUINAS UNIVERSAIS E
COMPUTABILIDADE:
Máquinas universais: se um problema algorítmico não
pode ser solucionado por uma máquina universal,
.

então não existe uma solução computável para ele;

Computabilidade: classifica os problemas em solúveis,


parcialmente solúveis e insolúveis, e se forem
problemas de decisão, em problemas decidíveis,
parcialmente decidíveis e indecidíveis.
2.1. MAQUINAS UNIVERSAIS E
COMPUTABILIDADE:
Programa, máquina, computação e função
computada: .
2.1.MAQUINAS UNIVERSAIS E
COMPUTABILIDADE:
Programa: “Conjunto estruturado de instruções que
capacitam uma máquina a aplicar sucessivamente certas
.

operações básicas e testes sobre dados iniciais operações


básicas e testes sobre dados iniciais fornecidos, com o
objetivo de transformar estes dados numa forma desejável;
Um programa deve possuir uma estrutura de controle de
operações e testes.
1. Estruturação Monolítica
2. Estruturação Iterativa
3. Estruturação Recursiva
2.1.MAQUINAS UNIVERSAIS E
COMPUTABILIDADE:
A Máquina: Cabe a ela dar significado aos identificadores
das operações e testes; .

Exemplos: Norma, Post, Turing.

Computação e Função computada:


• Computação: é um histórico do funcionamento da máquina
para o programa, considerando um valor inicial.
•Função computada: é o resultado obtido após o término da
computação (finita).
2.2.LINGUAGENS FORMAIS E
AUTÔMATOS:
Linguagens formais: estudo de modelos
matemáticos que possibilitam a especificação e
.

o reconhecimento de linguagens, suas


classificações, estruturas, propriedades,
características, etc.
O que representa a linguagem?
Regras de implementação de um código
fonte, compilado e transformado em um
programa de computador;
Exemplo:
C++, Ruby, C#, Java...
2.2.LINGUAGENS FORMAIS E
AUTÔMATOS:
Linguagens formais: são mecanismos formais
para representação e especificação de .

linguagens;

As representações podem ser feitas por


reconhecedores e geradores:

Reconhecedores: são os autômatos finitos, e de


pilha e máquina de Turing;
Os geradores: são as gramáticas.
2.2.1.GRAMÁTICAS
O que é uma gramática?
Um conjunto de regras de produção de cadeias .

em uma linguagem formal;


Uma gramatica formal é uma conjunto de regras
para se reescrever cadeias, tomando como
partida um símbolo inicial, do qual se começa a
reescrita, por esse motivo é um gerador de
linguagem;
Gramáticas de livre-contexto, gramáticas
regulares e gramáticas analíticas.
2.2.2.AUTÔMATOS:
O que é uma autômato?
É uma máquina de reconhecer .

estados;
2.2.3.AUTÔMATO FINITO
O que é uma autômato finito ou máquina de estados
finitos?
.

é uma Máquina de estados finita que aceita ou


rejeita cadeias de símbolos gerando um único ramo
de computação para cada cadeia de entrada.
Podem ser Autômatos finitos determinísticos ou
não-determinísticos.
2.2.3.AUTÔMATOS DE PILHA
O que é uma autômato de pilha?
É um autômato finito com uma memória auxiliar em forma
.

de pilha;

Autômatos com pilha diferem da definição normal de


máquinas de estados finitos de duas maneiras:
1. Eles podem fazer uso da informação que está no topo
da pilha para decidir qual transição deve ser efetuada;
2. Eles podem manipular a pilha ao efetuar uma
transição.
2.2.3.AUTÔMATOS DE PILHA

Exemplo de autômato de .

pilha:
Muito Utilizado em
compiladores;
Validar expressões
Matemáticas;
Verifica espelhamento;
2.2.4.MÁQUINA DE TURING
Um dispositivo teórico conhecido como
.

máquina universal, que foi concebido pelo


matemático britânico Alan Turing (1912-
1954);

Um modelo abstrato de um computador, que


se restringe apenas aos aspectos lógicos do
seu funcionamento (memória, estados e
transições), e não a sua implementação física.
2.2.4.MÁQUINA DE TURING
Numa máquina de Turing pode-
.

se modelar qualquer
computador digital;
Em que consiste o
funcionamento da Máquina de
Turing?
3.COMPILADORES:
Um compilador é um programa
.

de computador (ou um grupo de


programas) que, a partir de um
código fonte escrito em uma
linguagem compilada, cria um
programa semanticamente
equivalente, porém escrito em
outra linguagem, código objeto.
COMPILADORES:
.

Em outras palavras, traduz um programa de uma


linguagem textual facilmente entendida por um ser
humano para uma linguagem de máquina, específica
para um processador e sistema operacional;
COMPILADORES:
.
COMPILADORES:
3.1. Características: .

O código fonte é escrito em uma linguagem de


programação de alto nível;
o código objeto é escrito em uma linguagem de baixo
nível;
Sequência de instruções a ser executada pelo
microprocessador;
Composto de análise e síntese: a análise tem como
objetivo entender o código fonte e representá-lo em uma
estrutura intermediária. A síntese constrói o código
objecto a partir desta representação intermediária;
COMPILADORES:
3.1.Características: .

A análise pode ser


subdividida ainda em análise
léxica, análise sintática,
análise semântica e geração
de código intermediário;
A síntese posta em
optimização de código e
geração de código final (ou
código de máquina);
COMPILADORES:
3.2.Fases da compilação: .

Análise léxica
A primeira fase do compilador, também denominada de scanner,
sua função é ler o código-fonte, caractere a caractere, buscando a
separação e identificação dos elementos componentes do
programa-fonte, denominados símbolos léxicos ou tokens.
COMPILADORES:
3.2. Fases da compilação: .

Análise léxica
Eliminação de elementos "decorativos" do programa, tais
como espaços em branco, marcas de formatação de texto e
comentários;
Existem disponíveis uma série de geradores automáticos de
analisadores léxicos. O objetivo dos geradores automáticos é
limitar o esforço de programação de um analisador léxico
especificando-se apenas os tokens a ser reconhecidos.
COMPILADORES:
3.2.Fases da compilação: .

Análise sintática:
A análise sintática, ou análise gramatical é o processo de se
determinar se uma cadeia de símbolos léxicos pode ser
gerada por uma gramática. O analisador sintático é o cerne do
compilador, responsável por verificar se os símbolos contidos
no programa fonte formam um programa válido, ou não.
Existem disponíveis uma série de geradores automáticos de
analisadores sintáticos, como por exemplo, o Yacc, o Bison e o
JavaCC.
COMPILADORES:
3.2. Fases da compilação: .

Análise semântica:
O papel do analisador semântico é prover métodos pelos
quais as estruturas construídas pelo analisador sintático
possam ser avaliadas ou executadas;
É papel do analisador semântico assegurar que todas as
regras sensíveis ao contexto da linguagem estejam analisadas
e verificadas quanto à sua validade. Um exemplo de tarefa
própria do analisador semântico é a checagem de tipos de
variáveis em expressões.
COMPILADORES:
3.2. Fases da compilação: .

Geração de código intermediário


Na fase de geração de código intermediário, ocorre a
transformação da árvore sintática em uma representação
intermediária do código fonte. Esta linguagem intermediária é
mais próxima da linguagem objeto do que o código fonte, mas
ainda permite uma manipulação mais fácil do que se código
assembly ou código de máquina fosse utilizado;
Um tipo popular de linguagem intermediária é conhecido
como código de três endereços.
COMPILADORES:
3.2. Fases da compilação: .

Otimização de código
A otimização de código é a estratégia de examinar o código
intermediário, produzido durante a fase de geração de código
com objetivo de produzir, através de algumas técnicas, um
código que execute com bastante eficiência.
Não se pode criar um programa que leia um programa P e
gere um programa P´ equivalente sendo melhor possível
segundo o critério adotado;
Técnicas e tarefas de otimização.
COMPILADORES:
3.2. Fases da compilação: .

Geração de código final


O resultado final de todos os processos realizados;
O código produzido pelo compilador deve se aproveitar dos
recursos especiais de cada máquina-alvo;
O código objeto pode ser uma sequência de instruções
absolutas de máquina, uma sequência de instruções de
máquina relocáveis, um programa em linguagem assembly ou
um programa em outra linguagem.
COMPILADORES:
3.2. Tratamento de erros: .

O tratamento de erros está voltado a falhas devido a muitas


causas: erros no compilador, erros na elaboração do
programa a ser compilado, erros no ambiente (hardware,
sistema operacional), dados incorretos, etc.

Fases de tratamento: detectar cada erro, reportá-lo ao


usuário e possivelmente fazer algum reparo para que o
processamento possa continuar;
Erros léxicos, erros sintáticos, erros não independentes
de contexto (semânticos), erros de execução e erros de
limite;
REFERÊNCIAS:
ACIÓLY, BENEDITO MELO; BEDREGAL, BENJAMÍN RENÉ CALLEJAS; LYRA,

AARÃO. INTRODUÇÃO À TEORIA DAS LINGUAGENS FORMAIS, DOS

AUTÔMATOS E DA COMPUTABILIDADE. NATAL: EDITORA CAMPUS, 2002.

MENEZES, PAULO BLAUTH. LINGUAGENS FORMAIS E AUTÔMATOS. 6. ED. PORTO


ALEGRE: BOOKMAN, 2010.
•DIVERIO, T. A.; MENEZES, P. B. TEORIA DA COMPUTAÇÃO: MÁQUINAS
UNIVERSAIS E
COMPUTABILIDADE. PORTO ALEGRE: SAGRA-LUZZATTO, 2000.

•HOPCROFT, J. E.; ULLMAN, J. D.; MOTWANI, R. INTRODUÇÃO À TEORIA DE

AUTÔMATOS, LINGUAGENS E COMPUTAÇÃO. RIO DE JANEIRO: ELSEVIER, 2002.


OBRIGADO!

Você também pode gostar