Introdução. Tradutores de Linguagens de Programação
|
|
- Heitor Graça Valgueiro
- 7 Há anos
- Visualizações:
Transcrição
1 Introdução Compiladores 1 Linguagens de programação são notações para se descrever computações para pessoas e para máquinas. Todo software executado em todos os computadores foi escrito em alguma linguagem de programação. As linguagens de programação podem ser classificadas em cinco gerações: 1ª) Linguagens de máquina: permitem a comunicação direta com o computador em termos de bits, registradores e operações de máquina bastante primitivas. 2ª) Linguagens simbólicas (Assembly): projetadas para minimizar as dificuldades da programação em notação binária.utiliza mnemônicos. 3ª) Linguagens orientadas ao usuário (Fortran, Pascal, Basic, etc): linguagens procedurais, isto é, um programa especifica uma sequência de passos a serem seguidos para solucionar o problema, e linguagens declarativas que se baseiam na teoria das funções recursivas (funcionais) e de lógica matemática (lógicas). 4ª) Linguagens orientadas à aplicação (Excel, SQL, Framework, etc): visam facilitar a programação de computadores, apressar o processo de desenvolvimento de aplicações, facilitar a manutenção de aplicações, reduzindo custos, minimizar problemas de depuração e gerar códigos sem erros a partir de requisitos de expressões de alto nível. 5ª) Linguagens de conhecimento: usadas principalmente na área de Inteligência Artificial. Facilitam a representação do conhecimento que é essencial para a simulação de comportamentos inteligentes. Mas, antes que possa rodar, um programa primeiro precisa ser traduzido para um formato que lhe permita ser executado por um computador. Os sistemas de software que fazem essa tradução são denominados compiladores. Compiladores são programas de computador que traduzem de uma linguagem para outra. Um programa recebe como entrada um programa escrito na linguagem-fonte e produz um programa equivalente na linguagem-alvo. Geralmente, a linguagem-fonte é uma linguagem de alto nível, como C ou C++, e a linguagem-alvo é um código-objeto (código de máquina) para a máquina-alvo. Programa fonte COMPILADOR Programa objeto Tradutores de Linguagens de Programação Os tradutores de linguagens de programação podem ser classificados em: Montadores (assemblers): é um tradutor para a linguagem de montagem (Assembly) de um computador em particular. Geralmente uma instrução de linguagem simbólica (de montagem) para uma instrução de máquina. Por vezes um compilador irá gerar uma linguagem de montagem como sua linguagem-alvo e, em seguida, contar com um montador para concluir a tradução para o código-objeto. Compiladores: são tradutores que mapeiam programas escritos em linguagem de alto nível para programas equivalentes em linguagem simbólica ou de máquina.
2 2 Introdução Pré-compiladores (pré-processadores): são processadores que mapeiam instruções escritas numa linguagem de alto nível estendida para instruções da linguagem de programação original, ou seja, são tradutores que efetuam conversões entre duas linguagens de alto-nível. É um programa separado, ativado pelo compilador antes do início da tradução. Ele pode apagar comentários, incluir outros arquivos e executar substituições de macros. Interpretadores: é um tradutor de linguagens, assim como um compilador. A diferença é que o interpretador executa o programa-fonte de imediato, em vez de gerar um código-objeto que seja executado após o término da tradução. Os interpretadores processam uma forma intermediária do programa fonte e dados ao mesmo tempo. A interpretação da forma interna do fonte ocorre em tempo de execução, não sendo gerado um programa objeto. O intervalo de tempo no qual ocorre a conversão de um programa fonte para um programa objeto é chamado de tempo de compilação. O programa objeto é executado no intervalo de tempo chamado tempo de execução. O programa fonte e os dados são processados em momentos distintos, respectivamente, tempo de compilação e tempo de execução. Os interpretadores são, geralmente, menores que os compiladores e facilitam a implementação de construções complexas de linguagens de programação. O tempo de execução de um programa interpretado é maior que o tempo necessário para executar um programa compilado equivalente. O código objeto compilado é dez ou mais vezes mais rápido que o código fonte interpretado. A estrutura de um tradutor Os tradutores de linguagens de programação (compiladores, interpretadores) são constituídos internamento por passos (fases) para operações lógicas distintas. No processo de tradução existem duas partes: análise e síntese. A análise (front-end) subdivide o programa fonte em partes constituintes e impõe uma estrutura gramatical sobre elas. Depois, usa essa estrutura para criar uma representação intermediária do programa fonte. A análise detecta má formação sintática e erros semânticos, oferecendo mensagens esclarecedoras, para que o usuário possa tomar a ação corretiva. A análise também coleta informações sobre o programa fonte e as armazena em uma estrutura de dados chamada tabela de símbolos. A síntese (back-end) constrói o programa objeto a partir da representação intermediária e das informações na tabela de símbolos. Análise Léxica O objetivo desta fase é identificar sequências de caracteres que constituem unidades léxicas (tokens, lexemas). O analisador léxico lê o fluxo de caracteres que compõem o programa fonte e os agrupa em sequências significativas (lexemas). O analisador léxico verifica se os caracteres lidos pertencem ao alfabeto da linguagem, identificando tokens e desprezando comentários e brandos desnecessários. Os tokens constituem classes de símbolos tais como palavras reservadas, delimitadores, identificadores, etc. Para cada lexema, o analisador léxico produz como saída um token no formato: <nome-token, valor-atributo> que ele passa para a fase de análise sintática. Palavras reservadas, operadores e delimitadores são representados pelos próprios símbolos.
3 Compiladores 3 O analisador léxico, em geral, inicia a construção da tabela de símbolos e envia mensagens de erro caso identifique unidades léxicas não aceitas pela linguagem em questão. Exemplo 1: Suponha que um programa fonte contenha o comando de atribuição Os caracteres nessa atribuição poderiam ser agrupados nos seguintes lexemas e mapeados para os seguintes tokens passados ao analisador sintático: Lexema Símbolo Significado Entrada Token position id identificador 1 <id, 1> = <=> initial id identificador 2 <id, 2> + <+> rate id identificador 3 <id, 3> * <*> 60 número inteiro 4 <número, 4> Após a análise léxica a representação do comando de atribuição fica como uma sequência de tokens: <id, 1> <=> <id, 2> <+> <id, 3> <*> <número, 4> Exemplo 2: Considere a linha de código a seguir, que poderia pertencer a um programa em C. a [index] = Esse código contém 12 caracteres diferentes de espaço, mas somente 8 marcas: Lexema Símbolo Significado Entrada Token a id identificador 1 <id, 1> [ <[> index id identificador 2 <id, 2> ] <]>
4 4 Introdução Lexema Símbolo Significado Entrada Token = <=> 4 número inteiro 3 <número, 3> + <+> 2 número inteiro 4 <número, 4> Os caracteres nessa atribuição poderiam ser mapeados para os seguintes tokens passados para o analisador sintático: <id, 1> <[> <id, 2> <]> <=> <número, 3> <+> <número, 4> Exemplo 3: Seja o seguinte texto fonte em Pascal. while i < 100 do i := j + i ; Os caracteres nessa atribuição poderiam ser mapeados para os seguintes tokens passados para o analisador sintático: Lexema Símbolo Significado Entrada Token while <while> i id identificador 1 <id, 1> < <<> 100 número inteiro 1 <número, 1> do <do> i id identificador 1 <id, 1> := <:=> j id identificador 2 <id, 2> + <+> i id identificador 1 <id, 1> ; <;> Após a análise léxica da instrução ter-se ia a seguinte cadeia de tokens: <while> <id, 1> <<> <número, 1> <do> <id, 1> <:=> <id, 2> <+> <id, 1> <;> Análise sintática Essa fase tem por função verificar se a estrutura gramatical do programa está correta. O analisador sintático utiliza os primeiros componentes dos tokens produzidos pelo analisador léxico para criar uma representação intermediária tipo árvore (árvore de derivação), que mostra a estrutura gramatical da sequência de tokens. Outra função dos reconhecedores sintáticos é a detecção de erros de sintaxe identificando clara e objetivamente a posição e o tipo de erro percorrido. O analisador sintático deve tentar recuperar os erros encontrados, prosseguindo a análise do texto restante. Exemplo 1: Essa árvore mostra a ordem em que as operações do comando de atribuição deve ser realizada. = id, 1 id, 2 id, 3 + = Número, 4
5 Compiladores 5 Exemplo 2: Considere a linha de código em C a [index] = que representa um elemento estrutural denominado expressão (uma expressão de atribuição), composta por uma expressão indexada à esquerda e uma expressão aritmética de inteiros à direita. Esta estrutura pode ser representada em uma árvore de análise sintática (árvore sintática) da seguinte forma: expressão expressão de atribuição expressão = expressão expressão indexada Expressão aritmética expressão [ expressão ] expressão + expressão id, 1 id, 2 Número, 3 Número, 4 Exemplo 3: Considere o seguinte comando Pascal. while <expressão> do <comando>; Nesse caso, a estrutura <expressão> deve apresentar-se sintaticamente correta, e sua avaliação deve retornar um valor do tipo lógico. Considerando o comando while do exemplo, o analisador sintático produzirá a árvore de derivação a partir da sequência de tokens liberada pelo analisador léxico. <while> <expressão> <do> <comando> <id, 1> <<> <número, 1> <id, 1> <:=> <+> <id, 3> <id, 2> Análise semântica É o significado de um programa, contrastando com sua sintaxe ou estrutura. O analisador semântico utiliza a árvore de sintaxe e as informações na tabela de símbolos para verificar a consistência semântica do programa fonte com a definição da linguagem. Ele também reúne informações sobre os tipos e as salva na árvore de sintaxe ou tabela de símbolos, para uso subsequente durante a geração de código intermediário. Na verificação de tipo o compilador verifica se cada operador possui operandos compatíveis. A especificação da linguagem pode permitir algumas conversões de tipos chamada coerções. Por exemplo, se um operador for aplicado a um número de ponto
6 6 Introdução flutuante e a um inteiro, o compilador pode converter ou coagir o inteiro para um número de ponto flutuante. Exemplo 1: No exemplo da expressão em C a[index] = 4+2 as informações de tipos típicas que poderiam ser obtidas antes de analisar essa linha seriam: a é um vetor de valores inteiros com índices de um intervalo de inteiros index é uma variável de inteiros O analisador semântico anota na árvore sintática com os tipos de todas as subexpressões e verifica se as atribuições fazem sentido para esses tipos, caso contrário declara um erro de divergência entre tipos. expressão de atribuição expressão indexada inteiro expressão de adição inteiro identificador a vetor de inteiros identificador index inteiro número 4 inteiro número 2 inteiro Exemplo 2: Suponha: que position, initial e rate foram declaradas como números de ponto flutuante, e que o lexema 60 tenha a forma de um inteiro. O verificador de tipos no analisador semântico descobre que o operador * é aplicado a um número de ponto flutuante rate e a um inteiro 60. Nesse caso, o inteiro pode ser convertido em um número de ponto flutuante. = id, 1 + id, 2 id, 3 = intfloat 60 Geração de código intermediário No processo de traduzir um programa fonte para um código objeto, um compilador pode produzir uma ou mais representações intermediárias. As árvores de sintaxe denotam uma forma de representação intermediária. Esta fase gera como saída uma sequência de código, que pode, eventualmente, ser o código objeto final, mas, na maioria das vezes, constitui-se num código intermediário. A representação intermediária explícita de baixo nível (linguagem de máquina) é um programa para uma máquina abstrata. Essa representação intermediária deve ter duas propriedades importantes:
7 Compiladores 7 ser facilmente produzida e ser facilmente traduzida para a máquina alvo. A tradução de código fonte para objeto em mais de um passo apresenta algumas vantagens: possibilita a otimização de código intermediário, de modo a obter-se o código objeto final mais eficiente; resolve, gradualmente, as dificuldades da passagem de código fonte para código objeto (alto nível para baixo nível), já que o código fonte pode ser visto como um texto condensado que explode em inúmeras instruções elementares de baixo nível. Exemplo 1: Para o comando de atribuição o gerador de código intermediário, recebendo a árvore de derivação, produziria a seguinte sequência de instruções: t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1 = t3 Consideramos uma forma intermediária, chamada código de três endereços, que consiste em uma sequência de instruções do tipo assembler com três operandos por instrução. Cada operando pode atuar como um registrador. A saída do gerador de código intermediário consiste em uma sequência de instruções ou código de três endereços. Exemplo 2: Para o comando while apresentado anteriormente, o gerador de código intermediário, recebendo a árvore de derivação, poderia produzir a seguinte sequência de instruções: L0 if i < 100 goto L1 L1 goto L2 t := j + i i := t goto L0 L2... Há vários tipos de código intermediário: quádruplas, triplas, notação polonesa pós-fixada, etc. A linguagem intermediária do exemplo acima é chamada código de três endereços (cada instrução tem no máximo três operandos). Exemplo 3: Um código de três endereços para a expressão a[index] = 4+2 em C poderia ficar assim: t = a[index] = t Observe o uso de uma variável temporária adicional t para armazenar o resultado intermediário. Vários pontos precisam ser observados em relação aos códigos de três endereços: 1º) Cada instrução de atribuição de três endereços possui no máximo um operador do lado direito. Assim, essas instruções determinam a ordem em que as operações devem ser realizadas. 2º) O compilador precisa gerar um nome temporário para guardar o valor computador por uma instrução de três endereços. 3º) Algumas instruções de três endereços possuem menos de três operandos.
8 8 Introdução Otimização de código Tem por objetivo otimizar o código intermediário em termos de velocidade de execução e espaço de memória. Esta fase independente das arquiteturas de máquina faz algumas transformações no código intermediário com o objetivo de produzir um código objeto melhor. Melhor significa mais rápido, código menor, que consuma menos energia. Exemplo 1: O otimizador de código melhoraria o código a[index] = em dois passos, inicialmente computando o resultado da adição t = 6 a[index] = t e depois substituindo t por seu valor, para obter a declaração de três endereços a[index] = 6 Exemplo 2: Na atribuição o otimizador pode deduzir que a conversão do valor inteiro para ponto flutuante pode ser feita de uma vez por todas durante a compilação. Além do mais, t3 é usado apenas uma vez na atribuição de seu valor para id1, portanto o otimizador pode eliminá-lo transformando em uma sequência de código menor. t1 = id3 * 60.0 id1 = id2 + t1 Exemplo 3: Considerando o código intermediário do exemplo do comando while, o código otimizado poderia ser: L0 if i 100 goto L2 i := j + i goto L0 L2... O número de otimizações de código realizadas por diferentes compiladores varia muito. Quanto mais otimizações, mais tempo é gasto nessa faze. Existem otimizações simples que melhoram significativamente o tempo de execução do programa objeto sem atrasar muito a compilação. Geração de código Tem como objetivos: produção de código objeto, reserva de memória para constantes e variáveis, seleção de registradores, etc. Um aspecto crítico da geração de código está relacionado à cuidadosa atribuição dos registradores às variáveis do programa. Nessa fase da compilação as propriedades da máquina-alvo tornam-se o fator principal. Exemplo 1: Para a expressão em C, a [index] = precisamos decidir como armazenar inteiros para gerar o código de indexação de matrizes. Uma sequência de código possível para a expressão dada poderia ser: MOV R0, index // valor de índex R0 MUL R0, 2 // dobra valor em R0 MOV R1, &a // endereço de a R1 ADD R1, R0 // adiciona R0 a R1 MOV *R1, 6 // constante 6 endereço em R1
9 Compiladores 9 &a é o endereço de a, o endereço inicial da matriz. *R1 significa o endereçamento indireto de registro, a última instrução armazena o valor 6 no endereço contido em R1. Nesse código assumimos que a máquina efetua endereçamento de bytes e que inteiros ocupam dois bytes de memória. No código alvo são possíveis diversas melhorias. Usar a instrução de deslocamento para substituir a multiplicação na segunda instrução Usar um modo de endereçamento indexado para armazenar a matriz. Com essas duas otimizações o código-alvo fica assim: MOV R0, index // valor de índex R0 SHL R0 // dobra valor em R0 MOV &a [R0], 6 // constante 6 endereço a + R0 Exemplo 2: Na atribuição usando os registradores R1 e R2, o código intermediário poderia ser traduzido para o código de máquina LDF R2, id3 // carrega o conteúdo do endereço id3 no registrador R2 MULF R2, R2, #60.0 // multiplica pela constante de ponto flutuante 60.0 LDF R1, id2 // move id2 para o registrador R1 ADDF R1, R1, R2 // soma o valor contido no registrador R1 com o valor previamente calculado no registrador R2 STF id1, R1 // o valor no registrador R1 é armazenado no endereço id1 O F diz que a instrução manipula números de ponto flutuante. O # significa que o valor 60.0 deve ser tratado como uma constante imediata. A geração de código ignorou a questão relativa à alocação de espaço na memória para os identificadores do programa fonte. A organização de memória em tempo de execução depende da linguagem sendo compilada. Decisões sobre a alocação de espaço podem ser tomadas em dois momentos: durante a geração de código intermediário ou durante a geração do código. Exemplo 3: A partir do código intermediário otimizado para o comando while apresentando como exemplo, obter-se-ia o código objeto final baseado na linguagem simbólica de um microprocessador PC L0 MOV AX, i // move o conteúdo do endereço i para o registrador AX CMP AX, 100 // compara 100 com o conteúdo do registrador AX JGE L2 // faz um salto condicional para L2 MOV AX, j // move o conteúdo do endereço j para o registrador AX MOV BX, i // move o conteúdo do endereço i para o registrador BX ADD BX // adiciona o conteúdo do registrador BX MOV i, AX // move o conteúdo do registrador AX para o endereço i JMP L0 // faz um salto incondicional para L0 L2... Exercícios 1. No contexto de implementação de linguagem de programação, dê o significado dos seguintes termos: compilador, interpretador, montador e pré-compilador. 2. Aponte vantagens e desvantagens dos interpretadores em relação aos compiladores. 3. Explique o processo de compilação: fases e seu inter-relacionamento. 4. Dada a declaração em C a[i+1] = a[i] + 2
10 10 Introdução desenhe uma árvore de análise sintática e uma árvore sintática para a expressão. 5. Por exemplo, o código em C x = 4; y = x + 2; faça a otimização. Bibliografia Compiladores: princípios, técnicas e ferramentas Aho, Alfred. Lam, Monica. Sethi, Ravi. Ullman, Jeffrey D. São Paulo: Pearson Addison-Wesley, Compiladores: princípios e práticas Louden, Kenneth C. São Paulo: Pioneira Thomson Learning, 2004 Implementação de linguagens de programação: Compiladores Price, Ana. Toscani, Simão Porto Alegre: Bookman: Instituto de Informática da UFRGS, 2008.
Compiladores. Conceitos Básicos
Compiladores Conceitos Básicos Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz
Leia maisCompiladores. Introdução à Compiladores
Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc. Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem
Leia maisUniversidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever
Leia maisCompiladores I Prof. Ricardo Santos (cap 1)
Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve
Leia maisCompiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores
Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente
Leia maisII.1 Conceitos Fundamentais. Uma delas é programar o =>
II.1 Conceitos Fundamentais II.2 Gerações das Linguagens de Programação II.3 Linguagem de Programação II.4 Sistema Operacional II.5 Tradutores II.5.1 Estrutura de um tradutor II.5.1.1 Análise Léxica II.5.1.3
Leia maisAutômatos e Linguagens
Autômatos e Linguagens Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Agosto, 2016 1 / 41 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores
Leia maisIntrodução parte II. Compiladores. Mariella Berger
Introdução parte II Compiladores Mariella Berger Sumário Partes de um compilador Gerador da Tabela de Símbolos Detecção de erros As fases da análise As fases de um compilador Montadores O que é um Compilador?
Leia maisProjeto de Compiladores
Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 12 e 13 de fevereiro de 2007 Questionário 1. Em quais linguagens de programação você já programou? 2. O que você sabe sobre compiladores?
Leia maisProjeto de Compiladores
Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 26 e 27 de fevereiro de 2007 Agenda da Aula Revisão Linguagem de Programação Tradutores Compilador As Fases de Um Compilador Linguagem
Leia maisIntrodução à Programação
Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira
Leia maisIntrodução aos Compiladores
Universidade Católica de Pelotas Introdução aos Compiladores André Rauber Du Bois dubois@ucpel.tche.br 1 MOTIVAÇÃO Entender os algor ıtmos e estruturas usados para se implementar linguagens de programação
Leia maisConceitos de Linguagens de Programação
Conceitos de Linguagens de Programação Aula 03 Processo de Compilação Edirlei Soares de Lima Métodos de Implementação Arquitetura de Von Neumann: A linguagem de máquina de um computador
Leia maisCompiladores e Computabilidade
Compiladores e Computabilidade Prof. Leandro C. Fernandes UNIP Universidade Paulista, 2013 GERAÇÃO DE CÓDIGO INTERMEDIÁRIO Geração de Código Intermediário Corresponde a 1ª etapa do processo de Síntese
Leia maisConteúdo. Introdução a compiladores Tradução x Interpretação Processo de Compilação
Compiladores Conteúdo Introdução a compiladores Tradução x Interpretação Processo de Compilação Quando se inventou o computador criou se uma máquina a mais, quando se criou o compilador criou se uma nova
Leia maisLinguagens de Programação Classificação
Classificação Classificação A proximidade que a linguagem de programação tem com a humana determina sua classe (o nível): Linguagem de máquina (primeira geração) Linguagem assembly - de montagem (segunda
Leia maisLinguagens de Programação Aula 3
Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...
Leia maisInterfaces de Vanguarda do Compilador
Interfaces de Vanguarda do Compilador Stefani Henrique Ramalho¹, Prof Mário Rubens Welerson Sott¹ ¹DCC Departamento de Ciência da Computação Universidade Presidente Antônio Carlos (UNIPAC) Barbacena MG
Leia maisCompiladores. Introdução
Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios
Leia maisINE5421 LINGUAGENS FORMAIS E COMPILADORES
INE5421 LINGUAGENS FORMAIS E COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer a teoria das linguagens formais visando sua aplicação na especificação de linguagens de programação e na construção de
Leia maisConversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação
Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer. Uma seqüência adequada
Leia maisLinguagens de Programação
O estudante estuda muito. Regras: 7 9 12 14. . Regras: 2 4 . Regras: 1 Representar através de uma árvore de derivação. 77 O estudante estuda muito.
Leia maisCompiladores Aula 1. Celso Olivete Júnior.
Aula 1 Celso Olivete Júnior olivete@fct.unesp.br Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração
Leia maisProgramação de Sistemas (Sistemas de Programação) Semana 10, Aula 17
PCS3616 Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17 Linguagens e Compiladores Programação em linguagem de alto nível Escola Politécnica da Universidade de São Paulo Roteiro 1.
Leia maisCOMPILAÇÃO. Ricardo José Cabeça de Souza
COMPILAÇÃO Ricardo José Cabeça de Souza www.ricardojcsouza.com.br Programas Código-fonte escrito em linguagem de programação de alto nível, ou seja, com um nível de abstração muito grande, mais próximo
Leia maisUniversidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Síntese Prof. geovanegriesang@unisc.br Data 18/11/2013 Análise sintática Parte 01 25/11/2013 Análise sintática Parte 02
Leia maisLinguagens e Compiladores
Linguagens e Compiladores Aula 1: a) Critérios b) Noções de Compiladores e Interpretadores c) Usos da tecnologia de compilação d) Compiladores, filtros e pré-processadores e) Estruturação lógica de compiladores
Leia maisOrganização e Arquitetura de Computadores I
Organização e Arquitetura de Computadores I Conjunto de Instruções Slide 1 Sumário Características de Instruções de Máquina Tipos de Operandos Tipos de Operações Linguagem de Montagem Slide 2 Características
Leia maisCP Compiladores I Prof. Msc.. Carlos de Salles
CP 5017.9 Prof. Msc.. Carlos de Salles 1 - EMENTA O Processo de Compilação. Deteção e Recuperação de Erros. Introdução à geração de Código Intermediário. Geração de Código de Máquina. Otimização. Uma visão
Leia maisProgramação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1
Programação de Computadores IV Introdução a Linguagens de Programação Simone Martins simone@ic.uff.br SLIDES CEDIDOS POR BRUNO MARQUES 1 Arquitetura de programação 2 O Que é um Dado? Dado é o elemento
Leia maisApresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.
Apresentação Universidade dos Açores Departamento de Matemática www.uac.pt/~hguerra/!! Aquisição de conceitos sobre a definição de linguagens de programação.!! Familiarização com os métodos de construção
Leia maisParadigmas de Programação
Paradigmas de Programação Prof.: Edilberto M. Silva http://www.edilms.eti.br Aula 2 Linguagens de Programação Desenvolvimento e execução de programas Características de linguagens Execução de programas
Leia maisUniversidade Católica de Pelotas Bacharelado em Ciência da Computação Linguagens Formais e Autômatos TEXTO 6 Introdução à Compilação
Universidade Católica de Pelotas Bacharelado em Ciência da Computação 364018 Linguagens Formais e Autômatos TEXTO 6 Introdução à Compilação Prof. Luiz A M Palazzo Maio de 2011 Um COMPILADOR é um programa
Leia maisInfraestrutura de Hardware. Funcionamento de um Computador
Infraestrutura de Hardware Funcionamento de um Computador Computador: Hardware + Software Perguntas que Devem ser Respondidas ao Final do Curso Como um programa escrito em uma linguagem de alto nível é
Leia maisSistema Computacional
Algoritmos e Lógica de Programação Conceitos Básicos Abstração Reinaldo Gomes reinaldo@cefet-al.br O que é um? Integração de componentes atuando como uma entidade, com o propósito de processar dados, i.e.
Leia maisProgramação de Computadores:
Instituto de C Programação de Computadores: Introdução a Linguagens de Programação Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Seis Camadas Problema
Leia maisFERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS
FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS Acadêmico: Roger Anderson Schmidt Orientador : Marcel Hugo Supervisor : Ricardo de Freitas Becker Empresa
Leia maisAnálise Léxica I. Eduardo Ferreira dos Santos. Março, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 31
Análise Léxica I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Março, 2017 1 / 31 Sumário 1 A estrutura de um compilador 2 Analisador Léxico 2 / 31 A estrutura
Leia maisDESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE
DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE Jeferson MENEGAZZO 1, Fernando SCHULZ 2, Munyque MITTELMANN 3, Fábio ALEXANDRINI 4. 1 Aluno 5ª fase do Curso de Ciência da Computação do Instituto
Leia maisConstrução de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.
Construção de Compiladores Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/22 1 Linguagens de programação 2 Compilação 2/22 Tópicos 1
Leia maisNoções de compilação
Noções de compilação Compilador: o que é, para que serve e estrutura geral Parentes do compilador e programas correlatos Prof. Thiago A. S. Pardo 1 Compilação: por que estudar? (parte 1) Compiladores:
Leia maisNoções de compilação
Noções de compilação Compilador: o que é, para que serve e estrutura geral Parentes do compilador e programas correlatos Prof. Thiago A. S. Pardo 1 Exercício em duplas Para esquentar... 2 1 Compilação:
Leia maisCAP. VII GERAÇÃO DE CÓDIGO
CAP. VII GERAÇÃO DE CÓDIGO VII. 1 - INTRODUÇÃO Léxica Análise Sintática Semântica Compilação G.C. intermediário Síntese Otimização de código Geração de código Síntese Tradução do programa fonte (léxica,
Leia maisInformática I. Aula 9. Aula 9-17/05/2006 1
Informática I Aula 9 http://www.ic.uff.br/~bianca/informatica1/ Aula 9-17/05/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação
Leia maisUniversidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise
Leia maisDesenvolvimento de Aplicações Desktop
Desenvolvimento de Aplicações Desktop Conceitos Básicos de Programação Professor: Charles Leite O Desenvolvimento de Programas A programação consiste em indicar como o computador (hardware) deve trabalhar
Leia maisIntrodução à Computação
UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Introdução à Computação Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Histórico da Computação Prof. Yandre
Leia maisIntrodução à Computação
UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Introdução à Computação Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Histórico da Computação Prof. Yandre
Leia maisINE5318 Construção de Compiladores. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:
INE5318 Construção de Compiladores Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Identificação da disciplina Código: INE 5426 Nome: Construção de Compiladores
Leia maisUniversidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação
Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador
Leia maisIntrodução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação
Aula 03 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga
Leia maisInformática I. Aula 9. Aula 9-27/09/2006 1
Informática I Aula 9 http://www.ic.uff.br/~bianca/informatica1/ Aula 9-27/09/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação
Leia maisEA876 - Introdução a Software de Sistema
A876 - Introdução a Software de Sistema Software de Sistema: conjunto de programas utilizados para tornar o hardware transparente para o desenvolvedor ou usuário. Preenche um gap de abstração. algoritmos
Leia maisCompiladores. Análise Léxica
Compiladores Análise Léxica Regras Léxicas Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem como a maneira que eles podem ser combinados; Exemplo Pascal: letras maiúsculas
Leia maisLinguagens de Programação
Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Linguagens de Programação DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Tópicos da aula
Leia maisAlgoritmos e Programação
Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Parte 04 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav
Leia maisCONJUNTO DE INSTRUÇÕES
CONJUNTO DE INSTRUÇÕES 1 CARACTERÍSTICAS DE INSTRUÇÕES DE MÁQUINA Quando um programador usa uma linguagem de alto-nível, como C, muito pouco da arquitetura da máquina é visível. O usuário que deseja programar
Leia maisAula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU
Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito
Leia maisPROGRAMAÇÃO I. Introdução
PROGRAMAÇÃO I Introdução Introdução 2 Princípios da Solução de Problemas Problema 1 Fase de Resolução do Problema Solução na forma de Algoritmo Solução como um programa de computador 2 Fase de Implementação
Leia maisAnálise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18
Análise Sintática Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 18 Sumário 1 Introdução 2 Derivações 2 / 18 1 Introdução 2 Derivações 3 /
Leia maisSlides trabalhados durante a quinta aula
Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um
Leia maisAULA 03: FUNCIONAMENTO DE UM COMPUTADOR
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 03: FUNCIONAMENTO DE UM COMPUTADOR Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE É UM COMPUTADOR?
Leia maisCAP. VII GERAÇÃO DE CÓDIGO
CAP. VII GERAÇÃO DE CÓDIGO VII. 1 - INTRODUÇÃO Léxica Análise Sintática Semântica Compilação G.C. intermediário Síntese Otimização de código Geração de código Síntese Tradução do programa fonte (léxica,
Leia maisProgramação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR
Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR Introdução Compiladores e interpretadores são formas de tradução de um código geralmente de alto nível (escrito em uma linguagem de
Leia maisIntrodução a Ciência da Computação
Ministério da Educação Universidade Tecnológica Federal do Paraná Câmpus Santa Helena Introdução a Ciência da Computação Bacharelado em Ciência da Computação Professor : Agnaldo da Costa 1 Camadas do Usuário
Leia maisParadigmas de Linguagem de Programação. Aspectos Básicos
Paradigmas de Linguagem de Programação Aspectos Básicos Introdução Nesta segunda etapa de nossos estudos, veremos: aspectos básicos de programa e linguagem de programação; revisão de conceitos de compilador
Leia maisEspecificações Gerais do Compilador e Definição de FRANKIE
Especificações Gerais do Compilador e Definição de FRANKIE 1. Especificações Gerais do Compilador (Decisões de projeto) 2. Especificações da Linguagem Fonte Definição Informal Considerações Léxicas Considerações
Leia maisExistem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.
Aula 3 SOFTWARE (programas) Um programa (software) consiste em uma sequência de instruções escritas numa linguagem precisa chamada linguagem de programação. Estas instruções são traduzidas em um compilador,
Leia maisCompiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38
Compiladores Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Fevereiro, 2017 1 / 38 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores
Leia maisFACULDADE LEÃO SAMPAIO
FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS
Leia maisConceitos básicos sobre computadores (continuação)
SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Conceitos básicos sobre computadores (continuação) Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário O que é um computador e
Leia maisProf. Adriano Maranhão COMPILADORES
Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então
Leia maisAula teórica 7. Preparado por eng.tatiana Kovalenko
Aula teórica 7 Tema 7. Introdução a Programação Ø Linguagens de Programação Ø LP Java ØEstrutura de um programa em Java ØIdentificadores, variáveis e constantes. ØTipos de dados básicos Preparado por eng.tatiana
Leia maisInformática I. Aula Aula 18-29/10/2007 1
Informática I Aula 18 http://www.ic.uff.br/~bianca/informatica1/ Aula 18-29/10/2007 1 Ementa Noções Básicas de Computação (Hardware, Software e Internet) HTML e Páginas Web Internet e a Web Javascript
Leia maisAnálise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42
Análise Sintática I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2017 1 / 42 Sumário 1 Introdução 2 Derivações 3 Ambiguidade 4 Análise sintática descendente
Leia maisMétodos de implementação de linguagens. Kellen Pinagé
Métodos de implementação de linguagens Kellen Pinagé Sumário Métodos de implementação de linguagens Compilação Interpretação pura Híbrido Métodos de implementação de linguagens Principais componentes de
Leia maisCompiladores. Fabio Mascarenhas
Compiladores Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Compiladores x Interpretadores Offline x Online Um compilador transforma um programa executável de uma linguagem fonte
Leia maisAnalisador Léxico parte II
Analisador Léxico parte II Compiladores Mariella Berger Sumário Definições Regulares Gerador de Analisador Léxico Flex Exemplos As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise
Leia maisCompiladores. Geração de Código Objeto
Compiladores Geração de Código Objeto Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Arquivo de destino Análise Otimização Geração de Código Intermediário Geração de Código Final Síntese
Leia maisProgramação I A Linguagem C. Prof. Carlos Alberto
Programação I A Linguagem C Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada
Leia maisCapítulo 6: Linguagens de Programação
Capítulo 6: Linguagens de Programação Ciência da Computação: Uma Visão Abrangente 11a Edição by J. Glenn Brookshear Copyright 2012 Pearson Education, Inc. Capítulo 6: Linguagens de programação 6.1 Perspectiva
Leia maisLinguagens de Programação
Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas
Leia maisProf. Sandro Wambier
Prof. Sandro Wambier São elementos da Arquitetura de um computador: conjunto de instruções de um processador, os modos de endereçamentos, o tipo e tamanho dos dados manipulados pelo processador, ex.: Intel
Leia maisCompiladores. Análise Semântica
Compiladores Análise Semântica Análise semântica A semântica define o significado dos programas sintaticamente corretos; Por exemplo, em C, a instrução if(a>b) max = a; else max = b; Diz que a expressão
Leia maisTÉCNICO DE INFORMÁTICA - SISTEMAS
782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar
Leia maisProf. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior
Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior Meio pelo qual se pode indicar os passos que devem ser realizados pelo computador para resolver problemas; Através da linguagem,
Leia mais9. Software de Sistema - Montadores (capítulo 9 do livro texto)
9. Software de Sistema - Montadores (capítulo 9 do livro texto) Compiladores Programas de Aplicação Depuradores Usuário Processador de Macro Montador Programas Utilitários Ligadores Carregadores Sistema
Leia maisInstruções. Maicon A. Sartin
Instruções Maicon A. Sartin SUMÁRIO Introdução Instruções Formatos de instruções Conjuntos de instruções Execução de instruções Introdução a Linguagem de Montagem Introdução a Linguagem de Montagem Níveis
Leia maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia mais1. A pastilha do processador Intel possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é
1. A pastilha do processador Intel 80486 possui uma memória cache única para dados e instruções. Esse processador tem capacidade de 8 Kbytes e é organizado com mapeamento associativo por conjuntos de quatro
Leia maisLinguagem de Programação I Prof. Tiago Eugenio de Melo.
Linguagem de Programação I Prof. Tiago Eugenio de Melo tmelo@uea.edu.br www.tiagodemelo.info 1 Sumário Introdução Conceitos preliminares Introdução Variáveis Comandos Condicionais 2 Por que aprender a
Leia maisLembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)
Lembrando análise semântica Compiladores Geração de código intermediário (1) Parser Bottom-up: squema S-atribuído sem problema Apenas atributos sintetizados squema L-atribuído: ok, mas deve-se usar variáveis
Leia maisWilliam Stallings Arquitetura e Organização de Computadores 8 a Edição
William Stallings Arquitetura e Organização de Computadores 8 a Edição Capítulo 11 Conjuntos de instruções: Modos de endereçamento e formatos slide 1 Diagrama do endereçamento imediato Instrução Opcode
Leia mais3. Linguagem de Programação C
Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos
Leia maisUm Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1
Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,
Leia maisCOMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES. Adão de Melo Neto
COMPUTADORES COM UM CONJUNTO REDUZIDO DE INSTRUÇÕES Adão de Melo Neto 1 INTRODUÇÃO Desde 1950, houveram poucas inovações significativas nas áreas de arquitetura e organização de computadores. As principais
Leia maisCurso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 1ª Parte Prof. Sandra Pais Soares
Curso Profissional de Gestão e Programação de Sistemas Informáticos Programação e Sistemas de Informação Módulo 1 1ª Parte Prof. Sandra Pais Soares Linguagens de Programação Linguagens de Programação Uma
Leia maisCompiladores. Análise Léxica
Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa
Leia mais