A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tradutores de Linguagens Junho de 2011 UCPEL/CPOLI Linguagens Formais e Autômatos.

Apresentações semelhantes


Apresentação em tema: "Tradutores de Linguagens Junho de 2011 UCPEL/CPOLI Linguagens Formais e Autômatos."— Transcrição da apresentação:

1

2 Tradutores de Linguagens Junho de 2011 UCPEL/CPOLI Linguagens Formais e Autômatos

3 I. Linguagens de Programação Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador. Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador. A primeira e mais primitiva linguagem de computador é a própria linguagem máquina (0s e 1s). A primeira e mais primitiva linguagem de computador é a própria linguagem máquina (0s e 1s). Um programa era difícil, longo e principalmente caro de o construir. Um programa era difícil, longo e principalmente caro de o construir. Era também difícil de ser entendido por outros programadores. Era também difícil de ser entendido por outros programadores. Essa complexidade levou è necessidade de desenvolver novas técnicas e ferramentas. Essa complexidade levou è necessidade de desenvolver novas técnicas e ferramentas. Programa em Linguagem de Máquina 2 Linguagens Formais e Autômatos - Tradutores de Linguagens

4 A resolução do problema passou pela criação de uma linguagem em que os códigos numéricos foram substituídos por mnemónicos.A resolução do problema passou pela criação de uma linguagem em que os códigos numéricos foram substituídos por mnemónicos. O nome dessa linguagem é ASSEMBLY LANGUAGE.O nome dessa linguagem é ASSEMBLY LANGUAGE. Então será necessário um outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador!!!Então será necessário um outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador!!! O processo de tradução da linguagem de montagem para a linguagem de máquina é realizada por um programa chamado ASSEMBLER.O processo de tradução da linguagem de montagem para a linguagem de máquina é realizada por um programa chamado ASSEMBLER. Linguagem de Montagem 3 Linguagens Formais e Autômatos - Tradutores de Linguagens I. Linguagens de Programação

5 Linguagem Assembly 4 Linguagens Formais e Autômatos - Tradutores de Linguagens I. Linguagens de Programação

6 Foram desenvolvidas diversas linguagens de programação:Foram desenvolvidas diversas linguagens de programação: FORTRAN (1957)FORTRAN (1957) ALGOL (1958)ALGOL (1958) COBOL (1959)COBOL (1959) PASCAL (1963)PASCAL (1963) BASIC (1965)BASIC (1965) ADA (1968)ADA (1968) C (1982) e mais tarde o C++ (1986)C (1982) e mais tarde o C++ (1986) Java (1995) Etc….Java (1995) Etc…. Estas novas linguagens foram afastando cada vez mais o programador do nível de máquina.Estas novas linguagens foram afastando cada vez mais o programador do nível de máquina. Linguagem de Programação 5 Linguagens Formais e Autômatos - Tradutores de Linguagens I. Linguagens de Programação

7 Os programas em linguagem de alto nível também precisam de ser traduzidos para linguagem de máquina.Os programas em linguagem de alto nível também precisam de ser traduzidos para linguagem de máquina. Tradução Código Fonte Código Objeto Tradução 6 Linguagens Formais e Autômatos - Tradutores de Linguagens II. Tradução entre Linguagens

8 O processo de montagem traduz um programa escrito numa LP num programa equivalente em linguagem maquina.O processo de montagem traduz um programa escrito numa LP num programa equivalente em linguagem maquina. Montagem Código Objeto Tradução Linguagem de Máquina Processo de Montagem 7 Linguagens Formais e Autômatos - Tradutores de Linguagens II. Tradução entre Linguagens

9 É realizada por meio de duas classes de programas:É realizada por meio de duas classes de programas: COMPILADORES e COMPILADORES e INTERPRETADORES INTERPRETADORES Linguagens Formais e Autômatos - Tradutores de Linguagens 8 II. Tradução entre Linguagens

10 Um compilador tem a finalidade de converter uma linguagem – Linguagem Fonte – de fácil escrita e leitura para os programadores, numa linguagem – Linguagem alvo ou objecto – que possa ser executada pelas máquinas.Um compilador tem a finalidade de converter uma linguagem – Linguagem Fonte – de fácil escrita e leitura para os programadores, numa linguagem – Linguagem alvo ou objecto – que possa ser executada pelas máquinas. O código executável gerado pelo compilador é dependente do sistema operacional e da linguagem de máquina para o qual o código fonte foi traduzido.O código executável gerado pelo compilador é dependente do sistema operacional e da linguagem de máquina para o qual o código fonte foi traduzido. A enorme variedade de compiladores existentes é bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo são também muito variadas.A enorme variedade de compiladores existentes é bem vinda, visto que existem milhares de linguagens fonte, e as linguagens alvo são também muito variadas. O que é um compilador? 9 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

11 Os compiladores são por vezes classificados como uni-passo, multi-passo, otimizador, ou corretor de erros, dependendo da forma como foram construídos ou da funcionalidade para que são pretendidos.Os compiladores são por vezes classificados como uni-passo, multi-passo, otimizador, ou corretor de erros, dependendo da forma como foram construídos ou da funcionalidade para que são pretendidos. Começaram a aparecer no início da década de 50.Começaram a aparecer no início da década de 50. Muito do trabalho inicial dos compiladores resumia-se a tradução de fórmulas aritméticas para código máquina.Muito do trabalho inicial dos compiladores resumia-se a tradução de fórmulas aritméticas para código máquina. O que é um compilador? 10 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

12 O primeiro compilador de FORTRAN, por exemplo, demorou 18 meses para implementar.O primeiro compilador de FORTRAN, por exemplo, demorou 18 meses para implementar. Boas linguagens de implementação, ambientes de programação, e ferramentas de software têm também vindo a ser desenvolvidas.Boas linguagens de implementação, ambientes de programação, e ferramentas de software têm também vindo a ser desenvolvidas. Com estes avanços, um bom compilador pode ser implementado até por alunos!!! num projeto de um semestre de uma disciplina de compiladores.Com estes avanços, um bom compilador pode ser implementado até por alunos!!! num projeto de um semestre de uma disciplina de compiladores. O que é um compilador? 11 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

13 Ilustração do funcionamento de um compilador C/C++: Ilustração do funcionamento de um compilador C/C++: O que é um compilador? 12 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

14 Pode-se dividir o processo de compilação em duas fases:Pode-se dividir o processo de compilação em duas fases: Análise : parte o programa fonte em peças constituintes e cria uma representação intermediária do programa fonte.Análise : parte o programa fonte em peças constituintes e cria uma representação intermediária do programa fonte. Síntese : Constrói o desejado programa alvo (código de máquina) a partir da representação intermediária.Síntese : Constrói o desejado programa alvo (código de máquina) a partir da representação intermediária. A parte da síntese é a que requer técnicas mais especializadas.A parte da síntese é a que requer técnicas mais especializadas. Modelo Análise- síntese da compilação 13 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

15 Modelo Análise-Síntese da compilação 14 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

16 Muitos outros programas podem ser necessários para criar um programa alvo executável. Contexto de um compilador Biblioteca, Arquivos dos Objetos Relocalizados 15 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

17 Pré-processadores: produzem o input para os compiladores;Pré-processadores: produzem o input para os compiladores; Montadores: Alguns compiladores produzem código assembly que é passado para um montador para posterior processamento.Montadores: Alguns compiladores produzem código assembly que é passado para um montador para posterior processamento. Alguns compiladores produzem o trabalho dos montadores;Alguns compiladores produzem o trabalho dos montadores; Primos de um compilador 16 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

18 Na compilação a fase de análise consiste em 3 partes:Na compilação a fase de análise consiste em 3 partes: Análise Léxica ou Linear, Análise Sintática ou Hierárquica, e Análise Semântica Análise do programa fonte 17 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

19 Linguagens Formais e Autômatos - Tradutores de Linguagens 18 III. Compiladores Análise Léxica ou Linear: Análise Léxica ou Linear: Em que a cadeia de caracteres que forma a estrutura do programa fonte é lido da esquerda para a direita e agrupado em tokens que são sequências de caracteres tendo o sentido coletivo. Em que a cadeia de caracteres que forma a estrutura do programa fonte é lido da esquerda para a direita e agrupado em tokens que são sequências de caracteres tendo o sentido coletivo. A sua função básica é o reconhecimento e a classificação das estruturas elementares ou classes sintáticas das linguagens. A sua função básica é o reconhecimento e a classificação das estruturas elementares ou classes sintáticas das linguagens. Análise do programa fonte

20 Análise sintática ou hierárquica:Análise sintática ou hierárquica: Na qual caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com sentido coletivo.Na qual caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com sentido coletivo. Verifica se a estrutura geral do texto ou programa fonte está correta.Verifica se a estrutura geral do texto ou programa fonte está correta. Análise do programa fonte 19 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

21 Análise Semântica:Análise Semântica: Na qual são executadas certas paradas para assegurar que os componentes de um programa são juntamente ajustados em sentido absoluto.Na qual são executadas certas paradas para assegurar que os componentes de um programa são juntamente ajustados em sentido absoluto. Verifica se o programa fonte tem erros semânticos e reúne a informação dos tipos para a fase de gerador de código subsequente.Verifica se o programa fonte tem erros semânticos e reúne a informação dos tipos para a fase de gerador de código subsequente. Uma componente importante da análise semântica é a verificação do tipo.Uma componente importante da análise semântica é a verificação do tipo. Análise do programa fonte 20 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

22 Fases de um compilador 21 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

23 Gerenciador da tabela de símbolos:Gerenciador da tabela de símbolos: Uma função essencial de um compilador é registar os identificadores usados no programa fonte e colecionar informação sobre vários atributos de cada identificador.Uma função essencial de um compilador é registar os identificadores usados no programa fonte e colecionar informação sobre vários atributos de cada identificador. Uma tabela de símbolos é uma estrutura de dados contendo o registro de cada identificador, com campos para os atributos do identificador. Uma tabela de símbolos é uma estrutura de dados contendo o registro de cada identificador, com campos para os atributos do identificador. Fases de um compilador 22 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

24 Tabela de códigos:Tabela de códigos: É uma estrutura criada pela análise semântica de um compilador, que mantém registadas as linhas código intermediário geradas por algum tempo.É uma estrutura criada pela análise semântica de um compilador, que mantém registadas as linhas código intermediário geradas por algum tempo. Em geral as linhas de código geradas permanecem nesta tabela enquanto não estão totalmente preenchidas.Em geral as linhas de código geradas permanecem nesta tabela enquanto não estão totalmente preenchidas. Fases de um compilador 23 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

25 Deteção de erros e aviso do erro:Deteção de erros e aviso do erro: Cada fase pode encontrar erros. Porém, depois de descobrir um erro, a fase tem de ocupa-se de alguma maneira com aquele erro, para que a compilação possa prosseguir.Cada fase pode encontrar erros. Porém, depois de descobrir um erro, a fase tem de ocupa-se de alguma maneira com aquele erro, para que a compilação possa prosseguir. As fases de análise sintática e semântica normalmente tratam de uma grande parte dos erros detetáveis pelo compilador.As fases de análise sintática e semântica normalmente tratam de uma grande parte dos erros detetáveis pelo compilador. Fases de um compilador 24 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

26 Geração de código intermediário:Geração de código intermediário: Depois da análise sintática e semântica, alguns compiladores geram uma explícita representação intermediária do programa fonte.Depois da análise sintática e semântica, alguns compiladores geram uma explícita representação intermediária do programa fonte. Pode-se pensar nesta representação intermediária como um programa para uma máquina abstrata; Pode-se pensar nesta representação intermediária como um programa para uma máquina abstrata; Fases de um compilador 25 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

27 Otimização do código:Otimização do código: Esta fase tenta melhorar o código intermediário, de forma a que resulte num código de máquina mais rápido a executar.Esta fase tenta melhorar o código intermediário, de forma a que resulte num código de máquina mais rápido a executar. Geração do código:Geração do código: A fase final do compilador é a geração de código alvo, consistindo normalmente no estabelecimento do código de máquina.A fase final do compilador é a geração de código alvo, consistindo normalmente no estabelecimento do código de máquina. Neste ponto, após o programa fonte ter sido analisado e aprovado, segundo a sua sintaxe, e livre de erros semânticos, o compilador tem condições de escrever um programa equivalente na linguagem alvo.Neste ponto, após o programa fonte ter sido analisado e aprovado, segundo a sua sintaxe, e livre de erros semânticos, o compilador tem condições de escrever um programa equivalente na linguagem alvo. Fases de um compilador 26 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

28 Dividir o processo de compilação em diversas fases "lógicas" permite um melhor entendimento do processo como um todo e leva a uma implementação mais estruturada.Dividir o processo de compilação em diversas fases "lógicas" permite um melhor entendimento do processo como um todo e leva a uma implementação mais estruturada. A eficiência e os recursos disponíveis na máquina hospedeira do compilador influenciam de maneira decisiva um item importantíssimo na implementação de um compilador: o número de passos de compilação, para poder optimizar o tempo de compilação.A eficiência e os recursos disponíveis na máquina hospedeira do compilador influenciam de maneira decisiva um item importantíssimo na implementação de um compilador: o número de passos de compilação, para poder optimizar o tempo de compilação. Fatores condicionantes da organização física dos compiladores 27 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

29 Os compiladores têm como base os autômatos.Os compiladores têm como base os autômatos. Dentro da área de Teoria das Linguagens Formais, encontram-se os conceitos de gramática e autómatos, que dão base para a maioria das técnicas utilizadas hoje para se implementar compiladores. Daqui vêm os principais conceitos utilizados pelos compiladores modernos.Dentro da área de Teoria das Linguagens Formais, encontram-se os conceitos de gramática e autómatos, que dão base para a maioria das técnicas utilizadas hoje para se implementar compiladores. Daqui vêm os principais conceitos utilizados pelos compiladores modernos. Um léxico deve reconhecer tokens, não produzi-los.Um léxico deve reconhecer tokens, não produzi-los. A descrição de tokens de maneira a que estes possam ser reconhecidos é feita através de aceitadores finitos (autômato finito).A descrição de tokens de maneira a que estes possam ser reconhecidos é feita através de aceitadores finitos (autômato finito). Os Compiladores e os Autômatos 28 Linguagens Formais e Autômatos - Tradutores de Linguagens III. Compiladores

30 O funcionamento dos interpretadores é muito parecido ao dos compiladores, mas...O funcionamento dos interpretadores é muito parecido ao dos compiladores, mas... O interpretador traduz o código linha a linha.O interpretador traduz o código linha a linha. O código fonte não é totalmente traduzido antes de ser executado.O código fonte não é totalmente traduzido antes de ser executado. Não existem fases distintas nem se produz código intermediário.Não existem fases distintas nem se produz código intermediário. Passa o tempo todo lendo e traduzindo código.Passa o tempo todo lendo e traduzindo código. Como funcionam os interpretadores? 29 Linguagens Formais e Autômatos - Tradutores de Linguagens IV. Interpretadores

31 Navegadores;Navegadores; Excel, Word, Basic, Access,... ;Excel, Word, Basic, Access,... ; SmallTalk;SmallTalk; AutoLisp;AutoLisp; Prolog (algumas versões);Prolog (algumas versões); Matlab;Matlab; Lisp.Lisp. Exemplos de Interpretadores Exemplos de Interpretadores 30 Linguagens Formais e Autômatos - Tradutores de Linguagens IV. Interpretadores

32 VantagensDesvantagens Compiladores Execução mais rápida Várias etapas de tradução Permite estruturas de programação mais completas Programação final é maior, necessitando mais memória para a sua execução Permite a optimização do código fonte Processo de correcção de erros e depuração é mais demorado Interpretadores Depuração do programa é mais simples Execução do programa é mais lenta Consome menos memória Estruturas de dados demasiado simples Resultado imediato do programa ou rotina desenvolvida Necessário fornecer o programa fonte ao utilizador 31 Linguagens Formais e Autômatos - Tradutores de Linguagens V. Comparação


Carregar ppt "Tradutores de Linguagens Junho de 2011 UCPEL/CPOLI Linguagens Formais e Autômatos."

Apresentações semelhantes


Anúncios Google