47
6.1 – Modelo de máquina de Turing 6.2 – Representação de máquinas de Turing 6.3 – Máquinas de Turing e linguagens 7.1 – Algoritmos 7.2 – Linguagens decidíveis 7.3 – Linguagens indecidíveis

Modelo de máquina de Turing Máquinas de Turing e linguagens

  • Upload
    others

  • View
    24

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Modelo de máquina de Turing Máquinas de Turing e linguagens

6.1 – Modelo de máquina de Turing

6.2 – Representação de máquinas de Turing

6.3 – Máquinas de Turing e linguagens

7.1 – Algoritmos

7.2 – Linguagens decidíveis

7.3 – Linguagens indecidíveis

Page 2: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A 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) muitos anos antes de existirem os modernos computadores digitais.

• Num sentido preciso, é um modelo abstrato de um computador, que se restringe apenas aos aspetos lógicos do seu funcionamento (memória, estados e transições), e não a sua implementação física.

• Numa máquina de Turing pode-se modelar qualquer computador digital

1-1

Page 3: Modelo de máquina de Turing Máquinas de Turing e linguagens

1-2

Page 4: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Turing também se envolveu na construção de máquinas físicas para quebrar os códigos secretos das comunicações alemãs durante a Segunda Guerra Mundial, tendo utilizado alguns dos conceitos teóricos desenvolvidos para o seu modelo de computador universal.

1-3

Page 5: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Uma máquina de Turing consiste em:– Uma fita que é dividida em células, uma adjacente à outra.

– Cada célula contém um símbolo de algum alfabeto finito. O alfabeto contém um símbolo especial branco (aqui escrito como ¬) e um ou mais símbolos adicionais. Assume-se que a fita é arbitrariamente extensível para a esquerda e para a direita, isto é, a máquina de Turingpossui tanta fita quanto é necessário para a computação. Assume-se também que células que ainda não foram escritas estão preenchidas com o símbolo branco.

– Um cabeçote, que pode ler e escrever símbolos na fita e mover-se para a esquerda ou para a direita

1-4

Page 6: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Um registador de estados, que armazena o estado da máquina de Turing. O número de estados diferentes é sempre finito e há um estado especial denominado estado inicial com o qual o registador de estado é inicializado

• Uma tabela de ação (ou função de transição) que diz à máquina que símbolo escrever, como mover o cabeçote (← para a esquerda e → para a direita) e qual será seu novo estado, dados o símbolo que ele acabou de ler na fita e o estado em que se encontra. Se não houver entrada alguma na tabela para a combinação atual de símbolo e estado então a máquina pára.

• Note que cada parte da máquina é finita;

1-5

Page 7: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A palavra "estado" utilizada em contexto de máquinas de Turing pode ser uma fonte de confusão, como isso pode significar duas coisas.

• A maioria dos comentaristas depois de Turing utilizaram "estado" para denotar o nome/designador da instrução atual para ser realizada — i.e. , os conteúdos do registro de estado.

• Mas Turing (1936) fez uma distinção forte entre um registo do que ele chamou de m-configuração da máquina, (seu estado interno) e o "estado de progresso" da máquina (ou pessoa) através da computação - o estado atual do sistema total. O que Turing chamou "a fórmula do estado" inclui ambos a instrução atual e todos os símbolos sobre a fita:

1-6

Page 8: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Assim o estado de progresso da computação em qualquer estado é completamente determinado pela nota de instruções e os símbolos sobre a fita.

• Isto é, o estado do sistema pode ser descrito por uma única expressão (sequência de símbolos) consistindo dos símbolos sobre a fita seguida por ∆ (os quais supomos não aparecer noutro lugar) e então pela nota de instruções.

• Essa expressão é chamada de 'fórmula de estado'.

1-7

Page 9: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A máquina de Turing a seguir tem um alfabeto {¬,1} onde ¬ representa o símbolo branco.

• Ela espera uma série de 1's na fita, com o cabeçoteinicialmente no 1 mais à esquerda, e duplica os 1's com um ¬ no meio. Por exemplo, "111" torna-se "111¬111". O conjunto dos estados é {s1, s2, s3, s4, s5} e o estado inicial é s1. A tabela de ação é dada a seguir.

1-8

Page 10: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A primeira linha desta tabela pode ser lida como: "Se a máquina estiver no estado s1 e o símbolo lido pelo cabeçote for 1, então escreva o símbolo ¬ mova uma posição para a direita e mude o estado para s2".

1-9

Page 11: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Frequentemente diz-se que as máquinas de Turing, ao contrário de autómatos mais simples, são tão poderosas quanto máquinas reais, e são capazes de executar qualquer operação que um programa real executa.

• O que está faltando nesta afirmação é que praticamente qualquer programa particular a ser executado numa dada máquina e dada uma entrada finita é, na verdade, nada mais do que um autómato finito determinístico, já que a máquina em que executa pode estar apenas numa quantidade finita de configurações.

• Máquinas de Turing poderiam de facto ser equivalentes a uma máquina que tenha uma quantidade ilimitada de espaço de armazenamento. Podemos questionar então por que as máquinas de Turing são modelos úteis de computadores reais. Há várias maneiras de responder a isto:

1-10

Page 12: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A diferença está apenas na habilidade de uma máquina de Turing de manipular uma quantidade ilimitada de dados. No entanto, dada uma quantidade finita de tempo, uma máquina de Turing (como uma máquina real) pode apenas manipular uma quantidade finita de dados.

• Como uma máquina de Turing, uma máquina real pode ter seu espaço de armazenamento aumentado conforme a necessidade, através da aquisição de mais discos ou outro meio de armazenamento.

• Mas o facto é que nem as máquinas de Turing nem as máquinas reais precisam de quantidades astronómicas de espaço de armazenamento para fazer a maior parte das computações que as pessoas normalmente querem que sejam feitas. Frequentemente o tempo de processamento requerido é o maior problema.

1-11

Page 13: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Máquinas reais são muito mais complexas que uma máquina de Turing. Por exemplo, uma máquina de Turing descrevendo um algoritmo pode ter algumas centenas de estados, enquanto o autómato finito determinístico equivalente em uma dada máquina real tem quadrilhões.

• Máquinas de Turing descrevem algoritmos independentemente de quanta memória eles utilizam.

• Há um limite máximo na quantidade de memória que qualquer máquina que conhecemos tem, mas este limite pode crescer arbitrariamente no tempo.

• As máquinas de Turing permitem-nos fazer enunciados sobre algoritmos que (teoricamente) valerão eternamente, independentemente dos avanços na arquitetura de computadores convencionais.

1-12

Page 14: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Máquinas de Turing simplificam o enunciado de algoritmos. Algoritmos executando em máquinas abstratas equivalentes a Turing são normalmente mais gerais que suas contrapartes executando em máquinas reais, porque elas têm tipos com precisão arbitrária disponíveis e nunca precisam tratar condições inesperadas (incluindo, mas não somente, acabar a memória).

• Uma maneira em que máquinas de Turing são pobres modelos para programas é que muitos programas reais, tais como sistemas operacionais e processadores de texto, são escritos para receber entradas irrestritas através da execução, e portanto não param. Máquinas de Turing não modelam bem tal "computação contínua" (mas ainda podem modelar porções dela, tais como procedimentos individuais)..

1-13

Page 15: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Outra limitação de máquinas de Turing é que elas não modelam a organização estrita de um problema específico.

• Por exemplo, computadores modernos são na verdade instâncias de uma forma mais específica de máquina de computação, conhecido como máquina de acesso aleatório.

• A principal diferença entre esta máquina e a máquina de Turing é que esta utiliza uma fita infinita, enquanto a máquina de acesso aleatório utiliza uma sequência indexada numericamente (tipicamente um campo inteiro).

• O resultado desta distinção é que há otimizações computacionais que podem ser executadas baseadas nos índices em memória, o que não é possível numa máquina de Turing geral.

• Assim, quando máquinas de Turing são utilizadas como base para tempo de execuções restritos, um "falso limite inferior" pode ser provado em determinados tempos de execução de algoritmos (graças à premissa falsa de simplificação da máquina de Turing).

1-14

Page 16: Modelo de máquina de Turing Máquinas de Turing e linguagens

15

Page 17: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Em lógica, o termo decidível refere-se a um problema de decisão, ou seja, a questão da existência de um método efetivo para determinar a pertinência num conjunto de fórmulas.

• Sistemas lógicos, tais como a lógica proposicional, são decidíveis se a pertinência no seu conjunto de fórmulas logicamente válido pode ser efetivamente determinado.

• Uma teoria (conjunto de fórmulas fechado sob a consequência lógica) num sistema lógico fixo é decidível se existe um algoritmo eficiente para determinar se fórmulas arbitrárias lhe pertencem.

1-16

Page 18: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Tal como acontece com o conceito de um conjunto decidível a definição de uma teoria decidível ou sistema lógico pode ser dada tanto em termos de métodos eficazes ou em termos de funções computáveis

• De facto, a prova de que um sistema lógico ou uma teoria é indecidível usa a definição formal de computabilidade para mostrar que um determinado conjunto não é um conjunto decidível

1-17

Page 19: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Cada sistema lógico possui um componente sintático, que entre outras coisas determina a noção de demonstrabilidade, e um componente semântico, o qual determina a noção de validade lógica.

• Além disso, as fórmulas logicamente válidas de um sistema às vezes são chamadas de teoremas do sistema, especialmente no contexto da lógica de primeira ordem, em que o teorema da completude de Gödel estabelece a equivalência de consequência semântica e sintática.

• Noutros ramos, como na lógica linear a relação consequência sintática pode ser usada para definir os teoremas de um sistema.

• Um sistema lógico é decidível se existe um método eficaz para determinar se fórmulas arbitrárias são teoremas do sistema. Por exemplo, a lógica proposicional é decidível, pois o método da tabela verdade pode ser usado para determinar se uma fórmula arbitrária proposicional é logicamente válida. 1-18

Page 20: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Uma teoria é um conjunto de fórmulas, que aqui se presume ser fechado sob consequência lógica. Ademais, a questão da decidibilidade de uma teoria é se existe um procedimento efetivo que, dada uma fórmula arbitrária na assinatura da teoria, decide se a fórmula é um membro da teoria ou não.

• Este problema surge naturalmente quando uma teoria é definida como o conjunto de consequências lógicas de um conjunto fixo de axiomas.

1-19

Page 21: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Em ciência da computação, um algoritmo é uma sequência finita de ações executáveis que visam obter uma solução para um determinado tipo de problema.

• O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada.

• Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema. 1-20

Page 22: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Um algoritmo não representa, necessariamente, um programa de computador, e sim os passos necessários para realizar uma tarefa.

• Sua implementação pode ser feita por um computador, por outro tipo de autómato ou mesmo por um ser humano.

• Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo.

• Por exemplo, um algoritmo para se vestir pode especificar que se vista primeiro as meias e os sapatos antes de vestir as calças enquanto outro algoritmo especifica que se deve primeiro vestir as calças e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de executar do que o segundo apesar de ambos levarem ao mesmo resultado.

1-21

Page 23: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Os historiadores da palavra algoritmo encontraram a origem no sobrenome, Al-Khwarizmi, do matemático persa do século IX Mohamed ben Musa, cujas obras foram traduzidas no ocidente cristão no século XII, tendo uma delas recebido o nome Algorithmide numero indorum, sobre os algoritmos usando o sistema de numeração decimal (indiano). Outros autores, entretanto, defendem a origem da palavra em Al-goreten (raiz - conceito que se pode aplicar aos cálculos) "Álgebra" e "algorismo" também formam formas corrompidas da palavra, pois as pessoas esqueciam as derivações originais. O dicionário "Vollständiges MathematischesLexicon" (Leipzig, 1747) refere a palavra "Algorithmus"; nesta designação estão combinadas as noções de quatro cálculos aritméticos, nomeadamente a adição, multiplicação, subtração e divisão. A frase "algorithmusinfinitesimalis" foi na altura utilizada para significar; "maneiras de calcular com quantidades infinitésimas" (pequenas), uma invenção de Leibnitz. Também é conhecido no meio financeiro, como "algos".

1-22

Page 24: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequência de operações que podem ser simuladas por uma máquina de Turing completa.

• Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informação é lida de uma fonte de entrada, processada e retornada sob novo valor após processamento, o que geralmente é realizado com o auxílio de uma ou mais estrutura de dados.

1-23

Page 25: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira como se comportará em todas as circunstâncias.

• A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade assintótica de tempo e espaço (complexidade) necessários para a sua execução.

• Estes aspetos dos algoritmos são alvo da análise de algoritmos.

• A maneira mais simples de se pensar um algoritmo é por uma lista de procedimentos bem definida, na qual as instruções são executadas passo a passo a partir do começo da lista, uma ideia que pode ser facilmente visualizada através de um fluxograma. Tal formalização adota as premissas da programação imperativa, que é uma forma mecânica para visualizar e desenvolver um algoritmo. Concepções alternativas para algoritmos variam em programação funcional e programação lógica.

1-24

Page 26: Modelo de máquina de Turing Máquinas de Turing e linguagens

1-25

Page 27: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A análise de algoritmos é um ramo da ciência da computação que estuda as técnicas de projeto de algoritmos e os algoritmos de forma abstrata, sem estarem implementados numa linguagem de programação em particular ou implementadas de algum outro modo.

• Ela preocupa-se com os recursos necessários para a execução do algoritmo tais como o tempo de execução e o espaço de armazenamento de dados.

• Deve-se perceber que para um dado algoritmo pode-se ter diferentes quantidades de recursos atribuidos de acordo com os parâmetros passados na entrada.

• Um meio de exibir um algoritmo a fim de analisá-lo é através da implementação por pseudocódigo em português estruturado

1-26

Page 28: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Português Estruturado:

Programa soma-de-números

início

ler (A)

ler (B)

R<- A + B

escrever (R)

fim

1-27

Page 29: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Pode-se classificar algoritmos pela maneira pelo qual foram implementados:– Recursivo ou iterativo - um algoritmo recursivo possui a característica

de invocar a si mesmo repetidamente até que certa condição seja satisfeita e ele é terminado, que é um método comum em programação funcional. Algoritmos iterativos usam estruturas de repetição tais como laços, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice-versa, mas que pode ter mais ou menos complexidade em sua construção.

– Lógico - um algoritmo pode ser visto como uma dedução lógica controlada. O componente lógico expressa os axiomas usados na computação e o componente de controle determina a maneira como a dedução é aplicada aos axiomas. Tal conceito é base para a programação lógica.

1-28

Page 30: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Pode-se classificar algoritmos pela maneira pelo qual foram implementados (cont.):– Em série ou paralelo - algoritmos são geralmente assumidos por

serem executados instrução a instrução individualmente, como uma lista de execução, o que constitui um algoritmo serial. Tal conceito é base para a programação imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta as arquiteturas de computadores com mais de um processador para executar mais de uma instrução ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponíveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito é base para a programação paralela. De forma geral, algoritmos iterativos são paralelizáveis; por outro lado existem algoritmos que não são paralelizáveis, chamados então problemas inerentemente seriais.

1-29

Page 31: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Pode-se classificar algoritmos pela maneira pelo qual foram implementados (cont.):– Determinístico ou não-determinístico - algoritmos determinísticos

resolvem o problema com uma decisão exata a cada passo enquanto algoritmos não-determinísticos resolvem o problema ao deduzir os melhores passos através de estimativas sob forma de heurísticas.

– Exato ou aproximado - enquanto alguns algoritmos encontram uma resposta exata, algoritmos de aproximação procuram uma resposta próxima a verdadeira solução, seja através de estratégia determinística ou aleatória. Possuem aplicações práticas sobretudo para problemas muito complexos, do qual uma resposta correta é inviável devido à sua complexidade computacional.

1-30

Page 32: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como:– Divisão e conquista - algoritmos de divisão e conquista reduzem

repetidamente o problema em sub-problemas, geralmente de forma recursiva, até que o sub-problema é pequeno o suficiente para ser resolvido. Um exemplo prático é o algoritmo de ordenação merge sort. Uma variante dessa metodologia é o decremento e conquista, que resolve um sub-problema e utiliza a solução para resolver um problema maior. Um exemplo prático é o algoritmo para pesquisa binária.

– Programação dinâmica - pode-se utilizar a programação dinâmica para evitar o re-cálculo de soluções já resolvidas anteriormente.

– Algoritmo ganancioso - um algoritmo ganancioso é similar à programação dinâmica, mas difere na medida em que as soluções dos sub-problemas não precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que até então parece ser mais adequado.

1-31

Page 33: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como (cont.):– Programação linear - A resolução de um problema através de

programação linear envolve a maximização / minimização das entradas de um conjunto de desigualdades lineares.

– Redução - a redução resolve o problema ao transformá-lo em outro problema. É chamado também transformação e conquista.

– Busca e enumeração - vários problemas podem ser modelados através de grafos. Um algoritmo de exploração de grafo pode ser usado para caminhar pela estrutura e retornam informações úteis para a resolução do problema. Esta categoria inclui algoritmos de busca e backtracking.

– Paradigma heurístico e probabilístico - algoritmos probabilísticos realizam escolhas aleatoriamente. Algoritmos genéticos tentam encontrar a solução através de ciclos de mutações evolucionárias entre gerações de passos, tendendo para a solução exata do problema. Algoritmos heurísticos encontram uma solução aproximada para o problema 1-32

Page 34: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Ada Lovelace escreveu o primeiro algoritmo para ser processado por uma máquina, a máquina analítica de Charles Babbage.

• Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem eles devem ser executados usando o Pseudocódigo(uma linguagem simples, nativa a quem o escreve, de forma a ser entendida por qualquer pessoa) ou um Fluxograma que é uma forma genérica de escrever o algoritmo, sem necessidade de conhecer a sintaxe de nenhuma linguagem de programação.

1-33

Page 35: Modelo de máquina de Turing Máquinas de Turing e linguagens

• É importante observar a diferença entre tradução e interpretação.

• Na tradução, o programa original, expresso na linguagem fonte, não é executado diretamente. – Em vez da execução direta, esse programa precisa ser convertido para

um programa equivalente, conhecido como programa objeto ou programa binário executável, que será executado após o término do processo de tradução.

• Logo, a tradução envolve dois passos distintos:– Geração de um programa equivalente na linguagem alvo;

– Execução do programa obtido

• No processo de interpretação existe apenas um único passo: a execução do programa original na linguagem fonte

1-34

Page 36: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Os tradutores podem ser divididos em dois grupos, dependendo da relação existente entre a linguagem fonte e a linguagem alvo.

• Quando a linguagem fonte for essencialmente uma representação simbólica para uma linguagem de máquina numérica, o tradutor é chamado de montador e a linguagem fonte é chamada de linguagem de montagem.

• Quando a linguagem fonte for uma linguagem de alto nível, como é o caso do Pascal, Java, C, C++ etc, e a linguagem alvo for uma linguagem de máquina numérica ou uma representação simbólica desta linguagem (linguagem de montagem), o tradutor é chamado de compilador.

1-35

Page 37: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Diferente do processo de montagem de um programa em linguagem de montagem para um programa em linguagem de máquina, que é bastante simples, pois existe um mapeamento direto de um para um entre os comandos em linguagem de montagem e os equivalentes em código binário, o processo de compilação de linguagens é muito mais complexo.

1-36

Page 38: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Considere o comando simples abaixo:

A = B + 4;

• O compilador tem que resolver um número grande de tarefas na conversão deste comando em um ou mais comandos em linguagem de montagem:

• 1.Reduzir o texto do programa para símbolos básicos da linguagem, como identificadores tais como A e B, demarcações como o valor constante 4 e delimitadores do programa tais como = e +. Esta parte da compilação é chamada de análise léxica.

1-37

Page 39: Modelo de máquina de Turing Máquinas de Turing e linguagens

• 2. Descodificar os símbolos para reconhecer a estrutura do programa. No comando usado acima, por exemplo, um programa chamado parser deve reconhecer o comando como sendo uma atribuição de valores da forma:

1-38

Esta tarefa é chamada de análise sintática.

Page 40: Modelo de máquina de Turing Máquinas de Turing e linguagens

• 3. Análise de nomes: associar os nomes A e B com variáveis do programa, e associá-los também a posições de memória específicas onde essas variáveis serão armazenadas durante a execução.

• 4. Análise de tipos: determinar os tipos de todos os dados. No caso anterior, as variáveis A e B e a constante 4 seriam reconhecidas como sendo do tipo int em algumas linguagens. As análises de nome e tipo são também conhecidas como análise semântica: determina o significado dos componentes do programa.

Copyright © 2010 Pearson Education, Inc. Publishing as Prentice Hall

1-39

Page 41: Modelo de máquina de Turing Máquinas de Turing e linguagens

5. Mapeamento de ações e geração de código: associar comandos do programa com uma sequência em linguagem de montagem apropriada. No caso anterior, a sequência em linguagem de montagem poderia ser:

1-40

Page 42: Modelo de máquina de Turing Máquinas de Turing e linguagens

6.Existem passos adicionais que o compilador deve tomar, tais como:

atribuir variáveis a registadores, usar registadores e, quando o programador desejar, otimizar o programa.

O otimizador de código (independente de máquina) é um módulo opcional (presente na grande maioria dos compiladores) que objetiva melhorar o código intermediário de modo que o programa objeto produzido ao fim da compilação seja menor (ocupe menos espaço de memória) e/ou mais rápido (tenha tempo de execução menor).

A saída do otimizador de código é um novo código intermediário.

1-41

Page 43: Modelo de máquina de Turing Máquinas de Turing e linguagens

• O software interpretador é um programa de computador que executa instruções escritas em uma linguagem de programação.

• Por exemplo, as linguagens Basic, Prolog, Python e Java, são frequentemente interpretados.

• Um interpretador geralmente usa uma das seguintes estratégias para a execução do programa: – executar o código fonte diretamente ou

– traduzir o código fonte em alguma eficiente representação intermediária e depois executar este código.

Copyright © 2010 Pearson Education, Inc. Publishing as Prentice Hall

1-42

Page 44: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Para isso, certos tipos de tradutores transformam uma linguagem fonte em uma linguagem simplificada, chamada de código intermediário, que pode ser diretamente “executado” por um programa chamado interpretador. Nós podemos imaginar o código intermediário como uma linguagem de máquina de um computador abstrato projetado para executar o código fonte.

• Interpretadores são, em geral, menores que compiladores e facilitam a implementação de construções complexas em linguagens de programação. Entretanto, o tempo de execução de um programa interpretado é geralmente maior que o tempo de execução deste mesmo programa compilado, pois o interpretador deve analisar cada declaração no programa a cada vez que é executado e depois executar a ação desejada, enquanto que o código compilado apenas executa a ação dentro de um contexto fixo, anteriormente determinado pela compilação. Este tempo no processo de análise é conhecido como "overhead interpretativa".

1-43

Page 45: Modelo de máquina de Turing Máquinas de Turing e linguagens

• Programação é o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito em uma linguagem de programação, embora seja possível, com alguma dificuldade, escrevê-lo diretamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens.

• Diferentes linguagens de programação funcionam de diferentes modos. Por esse motivo, os programadores podem criar programas muito diferentes para diferentes linguagens; muito embora, teoricamente, a maioria das linguagens possa ser usada para criar qualquer programa.

1-44

Page 46: Modelo de máquina de Turing Máquinas de Turing e linguagens

• A criação de um programa de computador consiste de cinco passos principais:

1. Reconhecer a necessidade de um programa para resolver um problema ou fazer alguma coisa

2. Planificar o programa e selecionar as ferramentas necessárias para resolver o problema

3. Escrever o programa na linguagem de programação escolhida

4. Compilação: tradução do código fonte legível pelo homem em código executável pela máquina, o que é feito através de compiladores e outras ferramentas

5. Testar o programa para ter a certeza de que funciona; se não, regressar ao passo 3

1-45

Page 47: Modelo de máquina de Turing Máquinas de Turing e linguagens

46