Introdução. Tradutores de Linguagens de Programação

Tamanho: px
Começar a partir da página:

Download "Introdução. Tradutores de Linguagens de Programação"

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 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 mais

Compiladores. Introdução à Compiladores

Compiladores. 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 mais

Universidade 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. 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 mais

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores 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 mais

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Compiladores. 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 mais

II.1 Conceitos Fundamentais. Uma delas é programar o =>

II.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 mais

Autômatos e Linguagens

Autô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 mais

Introdução parte II. Compiladores. Mariella Berger

Introduçã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 mais

Projeto de Compiladores

Projeto 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 mais

Projeto de Compiladores

Projeto 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 mais

Introdução à Programação

Introduçã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 mais

Introdução aos Compiladores

Introduçã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 mais

Conceitos de Linguagens de Programação

Conceitos 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 mais

Compiladores e Computabilidade

Compiladores 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 mais

Conteúdo. Introdução a compiladores Tradução x Interpretação Processo de Compilação

Conteú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 mais

Linguagens de Programação Classificação

Linguagens 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 mais

Linguagens de Programação Aula 3

Linguagens 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 mais

Interfaces de Vanguarda do Compilador

Interfaces 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 mais

Compiladores. Introdução

Compiladores. 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 mais

INE5421 LINGUAGENS FORMAIS E COMPILADORES

INE5421 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 mais

Conversõ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 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 mais

Linguagens de Programação

Linguagens 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 mais

Compiladores Aula 1. Celso Olivete Júnior.

Compiladores 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 mais

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Programaçã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 mais

COMPILAÇÃO. Ricardo José Cabeça de Souza

COMPILAÇÃ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 mais

Universidade 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. 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 mais

Linguagens e Compiladores

Linguagens 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 mais

Organização e Arquitetura de Computadores I

Organizaçã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 mais

CP Compiladores I Prof. Msc.. Carlos de Salles

CP 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 mais

Programaçã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 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 mais

Apresentaçã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. !! 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 mais

Paradigmas de Programação

Paradigmas 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 mais

Universidade 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 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 mais

Infraestrutura de Hardware. Funcionamento de um Computador

Infraestrutura 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 mais

Sistema Computacional

Sistema 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 mais

Programação de Computadores:

Programaçã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 mais

FERRAMENTA 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 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 mais

Aná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. 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 mais

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

DESENVOLVIMENTO 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 mais

Construçã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. 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 mais

Noções de compilação

Noçõ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 mais

Noções de compilação

Noçõ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 mais

CAP. VII GERAÇÃO DE CÓDIGO

CAP. 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 mais

Informática I. Aula 9. Aula 9-17/05/2006 1

Informá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 mais

Universidade 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 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 mais

Desenvolvimento de Aplicações Desktop

Desenvolvimento 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 mais

Introdução à Computação

Introduçã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 mais

Introdução à Computação

Introduçã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 mais

INE5318 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: 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 mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade 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 mais

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introduçã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 mais

Informática I. Aula 9. Aula 9-27/09/2006 1

Informá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 mais

EA876 - Introdução a Software de Sistema

EA876 - 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 mais

Compiladores. Análise Léxica

Compiladores. 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 mais

Linguagens de Programação

Linguagens 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 mais

Algoritmos e Programação

Algoritmos 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 mais

CONJUNTO DE INSTRUÇÕES

CONJUNTO 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 mais

Aula 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 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 mais

PROGRAMAÇÃO I. Introdução

PROGRAMAÇÃ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 mais

Aná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. 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 mais

Slides trabalhados durante a quinta aula

Slides 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 mais

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

AULA 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 mais

CAP. VII GERAÇÃO DE CÓDIGO

CAP. 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 mais

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

Programaçã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 mais

Introdução a Ciência da Computação

Introduçã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 mais

Paradigmas de Linguagem de Programação. Aspectos Básicos

Paradigmas 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 mais

Especificações Gerais do Compilador e Definição de FRANKIE

Especificaçõ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 mais

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Existem 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 mais

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Compiladores. 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 mais

FACULDADE LEÃO SAMPAIO

FACULDADE 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 mais

Conceitos básicos sobre computadores (continuação)

Conceitos 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 mais

Prof. Adriano Maranhão COMPILADORES

Prof. 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 mais

Aula teórica 7. Preparado por eng.tatiana Kovalenko

Aula 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 mais

Informática I. Aula Aula 18-29/10/2007 1

Informá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 mais

Aná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. 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 mais

Métodos de implementação de linguagens. Kellen Pinagé

Mé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 mais

Compiladores. Fabio Mascarenhas

Compiladores. 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 mais

Analisador Léxico parte II

Analisador 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 mais

Compiladores. Geração de Código Objeto

Compiladores. 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 mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programaçã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 mais

Capítulo 6: Linguagens de Programação

Capí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 mais

Linguagens de Programação

Linguagens 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 mais

Prof. Sandro Wambier

Prof. 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 mais

Compiladores. Análise Semântica

Compiladores. 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 mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉ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 mais

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Prof. 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 mais

9. Software de Sistema - Montadores (capítulo 9 do livro texto)

9. 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 mais

Instruções. Maicon A. Sartin

Instruçõ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 mais

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

PROGRAMAÇÃ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 mais

1. 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 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 mais

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

Linguagem 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 mais

Lembrando 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. 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 mais

William Stallings Arquitetura e Organização de Computadores 8 a Edição

William 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 mais

3. Linguagem de Programação C

3. 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 mais

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Um 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 mais

COMPUTADORES 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 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 mais

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

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 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 mais

Compiladores. Análise Léxica

Compiladores. 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