·
Engenharia da Computação ·
Compiladores
Send your question to AI and receive an answer instantly
Recommended for you
27
Teoria da Computação e Compiladores - Ementa e Bibliografia
Compiladores
UMESP
38
Teoria da Computação e Compiladores: Conceitos e Aplicações de Linguagens em Autômatos
Compiladores
UMESP
20
Teoria da Computação e Compiladores - Ementa e Bibliografia
Compiladores
UMESP
23
Teoria da Computação e Compiladores - Máquina de Turing
Compiladores
UMESP
44
Teoria da Computação e Compiladores: Linguagens Formais e Autômatos
Compiladores
UMESP
1
Linguagens Formais e Autômatos - Documentacao e Tabela de Palavras Reservadas
Compiladores
UNIJORGE
Preview text
COMPILADORES PARTE 2 Prof Renato Matroniani EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO 19401950 não existiam linguagens de programação de alto nível e nem linguagens e montagem A programação nessa época era feita em código de máquina Códigos de difícil leitura A maioria dos problemas de programação da época era numérica e requeria operações aritméticas de ponto flutuante e de indexação de algum tipo para permitir a conveniência do uso de vetores EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO Nenhuma dessas capacidades entretanto estava incluída na arquitetura dos computadores do final dos anos 1940 e início dos anos 1950 Essas deficiências levaram ao desenvolvimento de linguagens de um nível mais alto SHORT CODE A primeira das novas linguagens chamada de Short Code foi desenvolvida por John Mauchly em 1949 para o BINAC um dos primeiros computadores eletrônicos com programas armazenados bemsucedidos Short Code foi posteriormente transferida para um UNIVAC I o primeiro computador eletrônico comercial vendido nos Estados Unidos e por diversos anos era uma das principais maneiras de programar essas máquinas Apesar de pouco ser conhecido sobre a linguagem Short Code original já que sua descrição completa nunca foi publicada um manual de programação para o UNIVAC I sobreviveu Remington Rand 1952 SHORT CODE As palavras da memória do UNIVAC I tinham 72 bits agrupados como 12 bytes de seis bits cada A linguagem Short Code era composta de versões codificadas de expressões matemáticas que seriam avaliadas Os códigos eram valores de pares de bytes e muitas equações podiam ser codificadas em uma palavra SHORT CODE Os programas em Short Code não eram traduzidos para código de máquina Em vez disso a linguagem era implementada com um interpretador puro Na época esse processo era chamado de programação automática Ele simplificou a programação mas ao custo do tempo de execução a interpretação de programas em Short Code era aproximadamente 50 vezes mais lenta do que a execução de código de máquina SPEEDCODING O sistema Speedcoding desenvolvido por John Backus para o IBM701 é um exemplo Backus 1954 O interpretador Speedcoding efetivamente convertia o 701 para uma calculadora virtual de ponto flutuante de três endereços O sistema incluía pseudoinstruções para as quatro operações aritméticas em dados de ponto flutuante assim como operações como a raiz quadrada seno arco tangente exponenciação e logaritmo SPEEDCODING Uma das limitações de tais sistemas da época é que a memória usável restante após carregar o interpretador era de apenas 700 palavras e que a instrução de adição levava 42 milissegundos para ser executada Em contrapartida a linguagem Speedcoding incluía a inédita facilidade para incrementar os registradores de endereço automaticamente Essa facilidade não apareceu em hardware até os computadores UNIVAC 1107 em 1962 Por causa desses recursos a multiplicação de matrizes poderia ser feita em 12 instruções Speedcoding Backus afirmava que problemas que levariam duas semanas para serem programados em código de máquina poderiam ser programados em poucas horas usando Speedcoding IBM 704 E FORTRAN Uma das principais razões pelas quais a lentidão dos sistemas de interpretação era tolerada no final da década de 1940 e até meados da década de 1950 era a falta de hardware de ponto flutuante nos computadores disponíveis Todas as operações de ponto flutuante teriam de ser simuladas em software um processo que consumia muito tempo Como muito tempo do processador era gasto no processamento de software para ponto flutuante a sobrecarga da interpretação e a simulação de indexação eram relativamente insignificantes IBM 704 E FORTRAN Muitos programadores da época nunca usaram sistemas de interpretação preferindo a eficiência do código de linguagem máquina ou de montagem escrito à mão O anúncio do sistema IBM 704 contendo tanto indexação quanto instruções de ponto flutuante em hardware decretaram o fim da era de interpretação ao menos para a computação científica A inclusão de hardware de ponto flutuante removeu o esconderijo para o custo da interpretação Apesar de trabalhos anteriores a primeira linguagem de alto nível compilada de ampla aceitação foi o Fortran VISÃO GERAL DO FORTRAN I O Fortran 0 foi modificado durante o período de implementação que começou em janeiro de 1955 e continuou até o lançamento do compilador em abril de 1957 A linguagem implementada que chamamos de Fortran I é descrita no primeiro Manual de Referência do Programador Fortran publicado em outubro de 1956 IBM 1956 VISÃO GERAL DO FORTRAN I O Fortran I incluía formatação de entrada e saída nomes de variáveis até seis caracteres eram apenas dois no Fortran 0 subrotinas definidas pelos usuários apesar de elas não poderem ser compiladas separadamente a sentença de seleção if e a sentença de repetição do Não existiam sentenças para tipagem de dados na linguagem Fortran I Variáveis cujos nomes começassem com I J K L M e N eram implicitamente do tipo inteiro e todas as outras eram de ponto flutuante VISÃO GERAL DO FORTRAN I A escolha das letras para essa convenção foi baseada no fato de que na época os cientistas e engenheiros usavam inteiros como índices normalmente i j e k Os projetistas do Fortran inseriram mais três letras O código de máquina produzido pelo compilador teria cerca da metade da eficiência que poderia ser produzida à mão o que à época faria o Fortran não ser adotada como linguagem de programação Fortrans IV 77 90 95 e 2003 Outras versões do Fortran foram criadas como a II III IV 77 90 etc O Fortran 95 INCITSISOIEC 1997 continuou a evolução da linguagem mas apenas algumas mudanças foram feitas Dentre outras uma nova construção de iteração forall foi adicionada para facilitar a tarefa de paralelizar os programas Fortran CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Observe CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Um algoritmo que gera posteriormente um programa recebe dados Tais dados precisam ser armazenados no computador para serem utilizados no processamento Esse armazenamento é feito na memória CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Todos os computadores trabalham com sistema numérico binário Nesse sistema numérico os dados são transformados em zeros e uns para então serem armazenados na memória Cada dígito binário 0 ou 1 ocupa porções de memória chamadas bytes 8 bits em que cada byte é identificado e acessado por meio de um endereço CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Todos os caracteres existentes possuem um caractere numérico correspondente na tabela ASC II e esse caractere numérico é transformado em binário pelo método da divisão para então ser armazenado na memória Dessa maneira uma variável representa uma posição de memória possuindo nome e tipo cujo conteúdo pode variar ao longo do tempo durante a execução de um programa CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Embora uma variável possa assumir diferentes valores ela só pode armazenar um valor a cada instante Todo computador possui uma tabela de alocação que contém o nome da variável o tipo da variável para saber quantos bytes ocupará e seu endereço inicial de armazenamento Assim quando queremos buscar um dado na memória basta sabermos o nome da variável que através de uma tabela de alocação no computador vai buscálo automaticamente CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Os principais tipos são numérico lógico e literal ou caractere Dados numéricos podem ser inteiros ou reais CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Os principais tipos são numérico lógico e literal ou caractere Dados lógicos são também chamados de dados booleanos ou da lógica de Boole e podem assumir os valores verdadeiro ou falso CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Números literais ou caracteres São dados formados por um único caractere ou por uma cadeia de caracteres Esses caracteres podem ser as letras maiúsculas as letras minúsculas e os números que não podem ser utilizados para cálculos além dos caracteres especiais como CRIAÇÃO DE PROGRAMAS FORMAÇÃO DE IDENTIFICADORES Os identificadores são os nomes das variáveis dos programas das constantes das rotinas das unidades etc As regras básicas para a formação dos identificadores são Os caracteres que você pode utilizar são os números as letras maiúsculas e minúsculas e o caractere sublinhado underline Não são permitidos espaços em branco e caracteres especiais Não podemos usar palavras reservadas nos identificadores ou seja palavras que pertençam a uma linguagem de programação CRIAÇÃO DE PROGRAMAS EXEMPLOS DE IDENTIFICADORES CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL A linguagem PASCAL foi desenvolvida em 1968 e era destinada principalmente à programação científica mas sua grande evolução permitiu nos dias de hoje que ela seja utilizada para outros fins Por se tratar de uma linguagem estruturada ou seja uma linguagem que possui regras para a escrita é ainda empregada nas universidades CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL A linguagem PASCAL possui um ambiente integrado de desenvolvimento chamado de Turbo Pascal com as características Apresenta um editor que permite ao desenvolvedor digitar salvar e modificar o código dos seus programas Possui um compilador que converte os códigos dos seus programas em instruções de máquina Também permite compilar ou seja verificar a existência de erros de sintaxe em programas sem retornar ao sistema operacional CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL Dispõe de um depurador que permite inspecionar um programa durante sua execução facilitando a localização de erros Conta com um sistema de ajuda ativo que oferece diferentes níveis de informações Possui o ambiente de execução propriamente dito que permite executar os programas sem sair do Turbo Pascal arquivos com extensão pas ou se preferir podem gerar arquivos executáveis exe CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL Portanto para fazer um programa em PASCAL devemos Analisar o enunciado do problema algoritmo e codificação através do ambiente editor Compilar utilizando o compilador do ambiente de desenvolvimento Executar CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL palavras reservadas CRIAÇÃO DE PROGRAMAS LINGUAGEM CC A linguagem C foi inventada por Dennis Ritchie e foi o primeiro a implementála usando um computador DEC PDP11 com sistema operacional UNIX Essa linguagem é resultante de um processo evolutivo de linguagens O marco inicial foi uma linguagem chamada BCPL desenvolvida por Martin Richards que influenciou a linguagem B e que levou na década de 1970 ao desenvolvimento da linguagem C CRIAÇÃO DE PROGRAMAS LINGUAGEM CC Durante alguns anos o padrão da linguagem C foi aquele fornecido com a versão 5 do UNIX Com a popularização dos PCs várias implementações de C forma criadas gerando muitas discrepâncias Em 1983 o ANSI estabeleceu um comitê para definir um padrão que guiasse todas as implementações da linguagem C A linguagem C é uma extensão da linguagem C As instruções que fazem parte desta última representam um subconjunto da primeira CRIAÇÃO DE PROGRAMAS LINGUAGEM CC palavras reservadas CRIAÇÃO DE PROGRAMAS LINGUAGEM CC Os incrementos encontrados em C foram feitos para dar suporte à programação orientada a objetos A sintaxe dessa linguagem é basicamente a mesma da linguagem C CRIAÇÃO DE PROGRAMAS LINGUAGEM C DECLARAÇÃO DE VARIÁVEIS CRIAÇÃO DE PROGRAMAS LINGUAGEM JAVA COMPILAÇÃO ASPECTOS IMPORTANTES As linguagens de programação podem ser implementadas por um de três métodos gerais Em um extremo os programas podem ser traduzidos para linguagem de máquina a qual pode ser executada diretamente no computador Esse método é chamado de implementação baseada em compilação com a vantagem de ter uma execução de programas muito rápida uma vez que o processo de tradução estiver completo A maioria das implementações de produção das linguagens como C COBOL e Ada é feita por meio de compiladores COMPILAÇÃO ASPECTOS IMPORTANTES A linguagem que um compilador traduz é chamada de linguagem fonte O processo de compilação e a execução do programa ocorrem em fases diferentes O analisador léxico agrupa os caracteres do programa fonte em unidades léxicas que são identificadores palavras especiais operadores e símbolos de pontuação O analisador léxico ignora comentários no programa fonte pois o compilador não tem uso para eles COMPILAÇÃO ASPECTOS IMPORTANTES O analisador sintático obtém as unidades léxicas do analisador léxico e as utiliza para construir estruturas hierárquicas chamadas de árvores de análise sintática parse trees que representam a estrutura sintática do programa Em muitos casos nenhuma estrutura de árvore de análise sintática é realmente construída em vez disso a informação que seria necessária para construir a árvore é gerada e usada diretamente COMPILAÇÃO ASPECTOS IMPORTANTES O gerador de código intermediário produz um programa em uma linguagem diferente em um nível intermediário entre o programa fonte e a saída final do compilador o programa em linguagem de máquina Linguagens intermediárias algumas vezes se parecem muito com as de montagem e de fato algumas vezes são linguagens de montagem propriamente ditas Em outros casos o código intermediário está a um nível um pouco mais alto do que uma linguagem de montagem O analisador semântico é parte do gerador de código intermediário que verifica erros difíceis ou impossíveis de ser detectados durante a análise sintática como erros de tipos COMPILAÇÃO ASPECTOS IMPORTANTES A otimização que melhora os programas normalmente em sua versão de código intermediário tornandoos menores mais rápidos ou ambos é uma parte opcional da compilação Na verdade alguns compiladores são incapazes de fazer quaisquer otimizações significativas Esse tipo de compilador seria usado em situações nas quais a velocidade de execução do programa traduzido é bem menos importante do que a velocidade de compilação Um exemplo de tal situação é um laboratório de computação para programadores iniciantes COMPILAÇÃO ASPECTOS IMPORTANTES O gerador de código traduz a versão de código intermediário otimizado do programa em um programa equivalente em linguagem de máquina A tabela de símbolos serve como uma base de dados para o processo de compilação O conteúdo primário na tabela de símbolos são informações de tipo e atributos de cada um dos nomes definidos pelo usuário no programa Essa informação é colocada na tabela pelos analisadores léxico e sintático e é usada pelo analisador semântico e pelo gerador de código COMPILAÇÃO ASPECTOS IMPORTANTES Conforme mencionado apesar de a linguagem de máquina gerada por um compilador poder ser executada diretamente no hardware ela praticamente sempre precisa rodar com algum outro código A maioria dos programas de usuário também necessita de programas do sistema operacional Dentre os mais comuns estão os programas para entrada e saída COMPILAÇÃO ASPECTOS IMPORTANTES O compilador constrói chamadas para os programas de sistema requeridos quando eles são necessitados pelo programa de usuário Antes de os programas em linguagem de máquina produzidos por um computador poderem ser executados aqueles requeridos do sistema operacional devem ser encontrados e ligados com o programa de usuário A operação de ligação conecta o programa de usuário aos de sistema colocando os endereços dos pontos de entrada dos programas de sistema nas chamadas a esses no programa de usuário COMPILAÇÃO ASPECTOS IMPORTANTES O código de usuário e de sistema juntos são chamados um módulo de carga ou uma imagem executável O processo de coletar programas de sistema e ligálos aos programas de usuário é chamado de ligação e carga ou apenas de ligação Tal tarefa é realizada por um programa de sistema chamado de ligador linker COMPILAÇÃO ASPECTOS IMPORTANTES Além dos programas de sistema os programas de usuário normalmente precisam ser ligados a outros programas de usuários previamente compilados que residem em bibliotecas Logo o ligador não apenas liga um programa a programas de sistemas mas também pode ligálo a outros de usuário COMPILAÇÃO ASPECTOS IMPORTANTES A velocidade de conexão entre a memória de um computador e seu processador normalmente determina a velocidade do computador As instruções normalmente podem ser executadas mais rapidamente do que movidas para o processador de forma que possam ser executadas Essa conexão é chamada de gargalo de von Neumann é o fator limitante primário na velocidade dos computadores que seguem a arquitetura de von Neumann e tem sido uma das motivações primárias para a pesquisa e o desenvolvimento de computadores paralelos COMPILAÇÃO ASPECTOS IMPORTANTES Em um computador von Neumann tanto os dados quanto os programas são armazenados na mesma memória A unidade central de processamento CPU que executa instruções é separada da memória Logo instruções e dados devem ser transmitidos da memória para a CPU Resultados de operações na CPU devem ser retornados para a memória Praticamente todos os computadores digitais construídos desde os anos 1940 têm sido baseados nessa arquitetura COMPILAÇÃO ASPECTOS IMPORTANTES A velocidade de conexão entre a memória de um computador e seu processador normalmente determina a velocidade do computador As instruções normalmente podem ser executadas mais rapidamente do que movidas para o processador de forma que possam ser executadas Essa conexão é chamada de gargalo de von Neumann é o fator limitante primário na velocidade dos computadores que seguem a arquitetura de von Neumann e tem sido uma das motivações primárias para a pesquisa e o desenvolvimento de computadores paralelos
Send your question to AI and receive an answer instantly
Recommended for you
27
Teoria da Computação e Compiladores - Ementa e Bibliografia
Compiladores
UMESP
38
Teoria da Computação e Compiladores: Conceitos e Aplicações de Linguagens em Autômatos
Compiladores
UMESP
20
Teoria da Computação e Compiladores - Ementa e Bibliografia
Compiladores
UMESP
23
Teoria da Computação e Compiladores - Máquina de Turing
Compiladores
UMESP
44
Teoria da Computação e Compiladores: Linguagens Formais e Autômatos
Compiladores
UMESP
1
Linguagens Formais e Autômatos - Documentacao e Tabela de Palavras Reservadas
Compiladores
UNIJORGE
Preview text
COMPILADORES PARTE 2 Prof Renato Matroniani EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO 19401950 não existiam linguagens de programação de alto nível e nem linguagens e montagem A programação nessa época era feita em código de máquina Códigos de difícil leitura A maioria dos problemas de programação da época era numérica e requeria operações aritméticas de ponto flutuante e de indexação de algum tipo para permitir a conveniência do uso de vetores EVOLUÇÃO DAS PRINCIPAIS LINGUAGENS DE PROGRAMAÇÃO Nenhuma dessas capacidades entretanto estava incluída na arquitetura dos computadores do final dos anos 1940 e início dos anos 1950 Essas deficiências levaram ao desenvolvimento de linguagens de um nível mais alto SHORT CODE A primeira das novas linguagens chamada de Short Code foi desenvolvida por John Mauchly em 1949 para o BINAC um dos primeiros computadores eletrônicos com programas armazenados bemsucedidos Short Code foi posteriormente transferida para um UNIVAC I o primeiro computador eletrônico comercial vendido nos Estados Unidos e por diversos anos era uma das principais maneiras de programar essas máquinas Apesar de pouco ser conhecido sobre a linguagem Short Code original já que sua descrição completa nunca foi publicada um manual de programação para o UNIVAC I sobreviveu Remington Rand 1952 SHORT CODE As palavras da memória do UNIVAC I tinham 72 bits agrupados como 12 bytes de seis bits cada A linguagem Short Code era composta de versões codificadas de expressões matemáticas que seriam avaliadas Os códigos eram valores de pares de bytes e muitas equações podiam ser codificadas em uma palavra SHORT CODE Os programas em Short Code não eram traduzidos para código de máquina Em vez disso a linguagem era implementada com um interpretador puro Na época esse processo era chamado de programação automática Ele simplificou a programação mas ao custo do tempo de execução a interpretação de programas em Short Code era aproximadamente 50 vezes mais lenta do que a execução de código de máquina SPEEDCODING O sistema Speedcoding desenvolvido por John Backus para o IBM701 é um exemplo Backus 1954 O interpretador Speedcoding efetivamente convertia o 701 para uma calculadora virtual de ponto flutuante de três endereços O sistema incluía pseudoinstruções para as quatro operações aritméticas em dados de ponto flutuante assim como operações como a raiz quadrada seno arco tangente exponenciação e logaritmo SPEEDCODING Uma das limitações de tais sistemas da época é que a memória usável restante após carregar o interpretador era de apenas 700 palavras e que a instrução de adição levava 42 milissegundos para ser executada Em contrapartida a linguagem Speedcoding incluía a inédita facilidade para incrementar os registradores de endereço automaticamente Essa facilidade não apareceu em hardware até os computadores UNIVAC 1107 em 1962 Por causa desses recursos a multiplicação de matrizes poderia ser feita em 12 instruções Speedcoding Backus afirmava que problemas que levariam duas semanas para serem programados em código de máquina poderiam ser programados em poucas horas usando Speedcoding IBM 704 E FORTRAN Uma das principais razões pelas quais a lentidão dos sistemas de interpretação era tolerada no final da década de 1940 e até meados da década de 1950 era a falta de hardware de ponto flutuante nos computadores disponíveis Todas as operações de ponto flutuante teriam de ser simuladas em software um processo que consumia muito tempo Como muito tempo do processador era gasto no processamento de software para ponto flutuante a sobrecarga da interpretação e a simulação de indexação eram relativamente insignificantes IBM 704 E FORTRAN Muitos programadores da época nunca usaram sistemas de interpretação preferindo a eficiência do código de linguagem máquina ou de montagem escrito à mão O anúncio do sistema IBM 704 contendo tanto indexação quanto instruções de ponto flutuante em hardware decretaram o fim da era de interpretação ao menos para a computação científica A inclusão de hardware de ponto flutuante removeu o esconderijo para o custo da interpretação Apesar de trabalhos anteriores a primeira linguagem de alto nível compilada de ampla aceitação foi o Fortran VISÃO GERAL DO FORTRAN I O Fortran 0 foi modificado durante o período de implementação que começou em janeiro de 1955 e continuou até o lançamento do compilador em abril de 1957 A linguagem implementada que chamamos de Fortran I é descrita no primeiro Manual de Referência do Programador Fortran publicado em outubro de 1956 IBM 1956 VISÃO GERAL DO FORTRAN I O Fortran I incluía formatação de entrada e saída nomes de variáveis até seis caracteres eram apenas dois no Fortran 0 subrotinas definidas pelos usuários apesar de elas não poderem ser compiladas separadamente a sentença de seleção if e a sentença de repetição do Não existiam sentenças para tipagem de dados na linguagem Fortran I Variáveis cujos nomes começassem com I J K L M e N eram implicitamente do tipo inteiro e todas as outras eram de ponto flutuante VISÃO GERAL DO FORTRAN I A escolha das letras para essa convenção foi baseada no fato de que na época os cientistas e engenheiros usavam inteiros como índices normalmente i j e k Os projetistas do Fortran inseriram mais três letras O código de máquina produzido pelo compilador teria cerca da metade da eficiência que poderia ser produzida à mão o que à época faria o Fortran não ser adotada como linguagem de programação Fortrans IV 77 90 95 e 2003 Outras versões do Fortran foram criadas como a II III IV 77 90 etc O Fortran 95 INCITSISOIEC 1997 continuou a evolução da linguagem mas apenas algumas mudanças foram feitas Dentre outras uma nova construção de iteração forall foi adicionada para facilitar a tarefa de paralelizar os programas Fortran CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Observe CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Um algoritmo que gera posteriormente um programa recebe dados Tais dados precisam ser armazenados no computador para serem utilizados no processamento Esse armazenamento é feito na memória CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Todos os computadores trabalham com sistema numérico binário Nesse sistema numérico os dados são transformados em zeros e uns para então serem armazenados na memória Cada dígito binário 0 ou 1 ocupa porções de memória chamadas bytes 8 bits em que cada byte é identificado e acessado por meio de um endereço CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Todos os caracteres existentes possuem um caractere numérico correspondente na tabela ASC II e esse caractere numérico é transformado em binário pelo método da divisão para então ser armazenado na memória Dessa maneira uma variável representa uma posição de memória possuindo nome e tipo cujo conteúdo pode variar ao longo do tempo durante a execução de um programa CRIAÇÃO DE PROGRAMAS CONCEITO DE VARIÁVEIS E DADOS Embora uma variável possa assumir diferentes valores ela só pode armazenar um valor a cada instante Todo computador possui uma tabela de alocação que contém o nome da variável o tipo da variável para saber quantos bytes ocupará e seu endereço inicial de armazenamento Assim quando queremos buscar um dado na memória basta sabermos o nome da variável que através de uma tabela de alocação no computador vai buscálo automaticamente CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Os principais tipos são numérico lógico e literal ou caractere Dados numéricos podem ser inteiros ou reais CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Os principais tipos são numérico lógico e literal ou caractere Dados lógicos são também chamados de dados booleanos ou da lógica de Boole e podem assumir os valores verdadeiro ou falso CRIAÇÃO DE PROGRAMAS TIPOS DE DADOS Números literais ou caracteres São dados formados por um único caractere ou por uma cadeia de caracteres Esses caracteres podem ser as letras maiúsculas as letras minúsculas e os números que não podem ser utilizados para cálculos além dos caracteres especiais como CRIAÇÃO DE PROGRAMAS FORMAÇÃO DE IDENTIFICADORES Os identificadores são os nomes das variáveis dos programas das constantes das rotinas das unidades etc As regras básicas para a formação dos identificadores são Os caracteres que você pode utilizar são os números as letras maiúsculas e minúsculas e o caractere sublinhado underline Não são permitidos espaços em branco e caracteres especiais Não podemos usar palavras reservadas nos identificadores ou seja palavras que pertençam a uma linguagem de programação CRIAÇÃO DE PROGRAMAS EXEMPLOS DE IDENTIFICADORES CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL A linguagem PASCAL foi desenvolvida em 1968 e era destinada principalmente à programação científica mas sua grande evolução permitiu nos dias de hoje que ela seja utilizada para outros fins Por se tratar de uma linguagem estruturada ou seja uma linguagem que possui regras para a escrita é ainda empregada nas universidades CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL A linguagem PASCAL possui um ambiente integrado de desenvolvimento chamado de Turbo Pascal com as características Apresenta um editor que permite ao desenvolvedor digitar salvar e modificar o código dos seus programas Possui um compilador que converte os códigos dos seus programas em instruções de máquina Também permite compilar ou seja verificar a existência de erros de sintaxe em programas sem retornar ao sistema operacional CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL Dispõe de um depurador que permite inspecionar um programa durante sua execução facilitando a localização de erros Conta com um sistema de ajuda ativo que oferece diferentes níveis de informações Possui o ambiente de execução propriamente dito que permite executar os programas sem sair do Turbo Pascal arquivos com extensão pas ou se preferir podem gerar arquivos executáveis exe CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL Portanto para fazer um programa em PASCAL devemos Analisar o enunciado do problema algoritmo e codificação através do ambiente editor Compilar utilizando o compilador do ambiente de desenvolvimento Executar CRIAÇÃO DE PROGRAMAS LINGUAGEM PASCAL palavras reservadas CRIAÇÃO DE PROGRAMAS LINGUAGEM CC A linguagem C foi inventada por Dennis Ritchie e foi o primeiro a implementála usando um computador DEC PDP11 com sistema operacional UNIX Essa linguagem é resultante de um processo evolutivo de linguagens O marco inicial foi uma linguagem chamada BCPL desenvolvida por Martin Richards que influenciou a linguagem B e que levou na década de 1970 ao desenvolvimento da linguagem C CRIAÇÃO DE PROGRAMAS LINGUAGEM CC Durante alguns anos o padrão da linguagem C foi aquele fornecido com a versão 5 do UNIX Com a popularização dos PCs várias implementações de C forma criadas gerando muitas discrepâncias Em 1983 o ANSI estabeleceu um comitê para definir um padrão que guiasse todas as implementações da linguagem C A linguagem C é uma extensão da linguagem C As instruções que fazem parte desta última representam um subconjunto da primeira CRIAÇÃO DE PROGRAMAS LINGUAGEM CC palavras reservadas CRIAÇÃO DE PROGRAMAS LINGUAGEM CC Os incrementos encontrados em C foram feitos para dar suporte à programação orientada a objetos A sintaxe dessa linguagem é basicamente a mesma da linguagem C CRIAÇÃO DE PROGRAMAS LINGUAGEM C DECLARAÇÃO DE VARIÁVEIS CRIAÇÃO DE PROGRAMAS LINGUAGEM JAVA COMPILAÇÃO ASPECTOS IMPORTANTES As linguagens de programação podem ser implementadas por um de três métodos gerais Em um extremo os programas podem ser traduzidos para linguagem de máquina a qual pode ser executada diretamente no computador Esse método é chamado de implementação baseada em compilação com a vantagem de ter uma execução de programas muito rápida uma vez que o processo de tradução estiver completo A maioria das implementações de produção das linguagens como C COBOL e Ada é feita por meio de compiladores COMPILAÇÃO ASPECTOS IMPORTANTES A linguagem que um compilador traduz é chamada de linguagem fonte O processo de compilação e a execução do programa ocorrem em fases diferentes O analisador léxico agrupa os caracteres do programa fonte em unidades léxicas que são identificadores palavras especiais operadores e símbolos de pontuação O analisador léxico ignora comentários no programa fonte pois o compilador não tem uso para eles COMPILAÇÃO ASPECTOS IMPORTANTES O analisador sintático obtém as unidades léxicas do analisador léxico e as utiliza para construir estruturas hierárquicas chamadas de árvores de análise sintática parse trees que representam a estrutura sintática do programa Em muitos casos nenhuma estrutura de árvore de análise sintática é realmente construída em vez disso a informação que seria necessária para construir a árvore é gerada e usada diretamente COMPILAÇÃO ASPECTOS IMPORTANTES O gerador de código intermediário produz um programa em uma linguagem diferente em um nível intermediário entre o programa fonte e a saída final do compilador o programa em linguagem de máquina Linguagens intermediárias algumas vezes se parecem muito com as de montagem e de fato algumas vezes são linguagens de montagem propriamente ditas Em outros casos o código intermediário está a um nível um pouco mais alto do que uma linguagem de montagem O analisador semântico é parte do gerador de código intermediário que verifica erros difíceis ou impossíveis de ser detectados durante a análise sintática como erros de tipos COMPILAÇÃO ASPECTOS IMPORTANTES A otimização que melhora os programas normalmente em sua versão de código intermediário tornandoos menores mais rápidos ou ambos é uma parte opcional da compilação Na verdade alguns compiladores são incapazes de fazer quaisquer otimizações significativas Esse tipo de compilador seria usado em situações nas quais a velocidade de execução do programa traduzido é bem menos importante do que a velocidade de compilação Um exemplo de tal situação é um laboratório de computação para programadores iniciantes COMPILAÇÃO ASPECTOS IMPORTANTES O gerador de código traduz a versão de código intermediário otimizado do programa em um programa equivalente em linguagem de máquina A tabela de símbolos serve como uma base de dados para o processo de compilação O conteúdo primário na tabela de símbolos são informações de tipo e atributos de cada um dos nomes definidos pelo usuário no programa Essa informação é colocada na tabela pelos analisadores léxico e sintático e é usada pelo analisador semântico e pelo gerador de código COMPILAÇÃO ASPECTOS IMPORTANTES Conforme mencionado apesar de a linguagem de máquina gerada por um compilador poder ser executada diretamente no hardware ela praticamente sempre precisa rodar com algum outro código A maioria dos programas de usuário também necessita de programas do sistema operacional Dentre os mais comuns estão os programas para entrada e saída COMPILAÇÃO ASPECTOS IMPORTANTES O compilador constrói chamadas para os programas de sistema requeridos quando eles são necessitados pelo programa de usuário Antes de os programas em linguagem de máquina produzidos por um computador poderem ser executados aqueles requeridos do sistema operacional devem ser encontrados e ligados com o programa de usuário A operação de ligação conecta o programa de usuário aos de sistema colocando os endereços dos pontos de entrada dos programas de sistema nas chamadas a esses no programa de usuário COMPILAÇÃO ASPECTOS IMPORTANTES O código de usuário e de sistema juntos são chamados um módulo de carga ou uma imagem executável O processo de coletar programas de sistema e ligálos aos programas de usuário é chamado de ligação e carga ou apenas de ligação Tal tarefa é realizada por um programa de sistema chamado de ligador linker COMPILAÇÃO ASPECTOS IMPORTANTES Além dos programas de sistema os programas de usuário normalmente precisam ser ligados a outros programas de usuários previamente compilados que residem em bibliotecas Logo o ligador não apenas liga um programa a programas de sistemas mas também pode ligálo a outros de usuário COMPILAÇÃO ASPECTOS IMPORTANTES A velocidade de conexão entre a memória de um computador e seu processador normalmente determina a velocidade do computador As instruções normalmente podem ser executadas mais rapidamente do que movidas para o processador de forma que possam ser executadas Essa conexão é chamada de gargalo de von Neumann é o fator limitante primário na velocidade dos computadores que seguem a arquitetura de von Neumann e tem sido uma das motivações primárias para a pesquisa e o desenvolvimento de computadores paralelos COMPILAÇÃO ASPECTOS IMPORTANTES Em um computador von Neumann tanto os dados quanto os programas são armazenados na mesma memória A unidade central de processamento CPU que executa instruções é separada da memória Logo instruções e dados devem ser transmitidos da memória para a CPU Resultados de operações na CPU devem ser retornados para a memória Praticamente todos os computadores digitais construídos desde os anos 1940 têm sido baseados nessa arquitetura COMPILAÇÃO ASPECTOS IMPORTANTES A velocidade de conexão entre a memória de um computador e seu processador normalmente determina a velocidade do computador As instruções normalmente podem ser executadas mais rapidamente do que movidas para o processador de forma que possam ser executadas Essa conexão é chamada de gargalo de von Neumann é o fator limitante primário na velocidade dos computadores que seguem a arquitetura de von Neumann e tem sido uma das motivações primárias para a pesquisa e o desenvolvimento de computadores paralelos