Baixe o app para aproveitar ainda mais
Prévia do material em texto
GRACE KELLY DA SILVA 1. O que é: a. Linguagem de alto nível. São aquelas cuja sintaxe se aproxima mais da nossa linguagem e se distanciam mais da linguagem de máquina. Elas possuem um nível de abstração que faz com que você entenda aquele código mais facilmente, pois foi removido da sintaxe o que você não precisa entender em um primeiro contato com programação ou pra quem nunca vai mexer com linguagens de baixo nível. b. Linguagem intermediária. Linguagem de computador usada na programação como um estágio intermediário entre a linguagem-fonte de origem (geralmente uma linguagem de alto nível) e a linguagem de destino (geralmente o código de máquina). Muitos compiladores de alto nível usam a linguagem assembly como uma linguagem intermediária. c. Linguagem de baixo nível. É aquela que se aproxima mais da linguagem de máquina. Ela é muito mais voltada ao dispositivo (processador, micro controlador, etc.). Normalmente envolve números e letras que nada mais são que instruções diretas ao dispositivo. 2. Explique qual a aplicação da tabela de símbolos e a função dos símbolos reservados. A tabela de símbolos é utilizada em compiladores para o armazenamento de informações de identificadores, tais como constantes, funções, variáveis e tipos de dados. É utilizada em quase todas as fases de compilação, como a varredura, a análise sintática, a análise semântica, otimização e geração de código. Em cada fase ela pode ser utilizada como base para comparações ou mesmo atualizada com novos identificadores durante a saída de cada fase. Um compilador usa uma tabela de símbolos para guardar informações sobre os nomes declarados em um programa. A tabela de símbolos é pesquisada cada vez que um nome é encontrado no programa fonte. Alterações são feitas na tabela de símbolos sempre que um novo nome ou nova informação sobre um nome já existente é obtida. 3. Tendo como base a linguagem de programação C. Execute o processo de análise léxica separando os símbolos reservados conforme suas funções no trecho código abaixo: LETRA → [A-Z] | [A-Z] DÍGITO → [0-9] DÍGITOS → DÍGITO DÍGITO* IDENTIFICADOR → LETRA [LETRA | DÍGITO]* C LEXEMA CLASSIFICAÇÃO FUNÇÃO // INT PALAVRA RESERVADA Usado para declarar valores inteiros MAIN PALAVRA RESERVADA Representa o programa principal ( Inicio de parâmetro VOID PALAVRA RESERVADA Parâmetro vazio ) Fim de parametros { Inicio de função a IDENTIFICADOR , Separador de variavel b IDENTIFICADOR c IDENTIFICADOR ; fim de instrução SCANF PALAVRA RESERVADA Usado para receber uma entrada do usuario “ Inicio de string % impressão de um valor d IDENTIFICADOR “ Fim de string & Usado para identificar um endereço na memoria = IDENTIFICADOR simbolo aritmetico usado para armazenar o resultado + IDENTIFICADOR simbolo aritmetico usado para somar dois numeros PRINTF PALAVRA RESERVADA Usada para impressão de resultados \n PALAVRA RESERVADA Usado para saltar uma linha RETURN PALAVRA RESERVADA Usada para retornar um valor 0 DIGITO numero } final de função 4. Explique como ocorre o processo de geração da árvore gramatical para o trecho de código do exercício anterior. A árvore gramatical separa o código em três endereçamentos, simbolos reservados nó a nó e abaixo nós filhos de acordo com cada instrução. 5. Crie, em linguagem intermediária um programa que some dois valores inteiros. Reg1 = c Reg2 = b + Reg1 c = Reg2 6. Que tipos de metodologias computacionais são aplicada na 5ª fase de compilação para reduzir o código gerado pela 4ª fase? Otimização pode ocorrer em um número de "níveis": Nível de design No nível mais alto, o projeto pode ser otimizado para fazer o melhor uso dos recursos disponíveis. A implementação deste projeto irá se beneficiar do uso de algoritmos eficientes e adequados a implementação destes algoritmos irão beneficiar de escrever código de boa qualidade. O projeto arquitetônico de um sistema predominantemente afeta seu desempenho. A escolha do algoritmo afeta a eficiência mais do que qualquer outro item do projeto. Nível de compilação O uso de um compilador otimizado tende a assegurar que o programa executável é optimizada, pelo menos tanto quanto o compilador pode prever. Nível Assembly No nível mais baixo, escrevendo código usando uma linguagem de montagem projetado para uma plataforma de hardware específico, normalmente, produzem o código mais eficiente, pois o programador pode aproveitar o repertório completo de instruções de máquina. Os sistemas de operação da maior parte das máquinas tem sido tradicionalmente escrito em código Assembler por esta razão. Runtime (tempo de execução) Apenas compiladores e programadores assembler são capazes de realizar a otimização de tempo de execução. Em geral, os compiladores usualmente permitem especificar qual o grau de esforço desejado no processo de otimização. Por exemplo, em gcc há opções na forma -O... que dão essa indicação, desde -O0 (nenhuma otimização) até -O3 (máxima otimização, aumentando o tempo de compilação), incluindo também uma opção -Os, indicando que o objetivo é reduzir a ocupação de espaço em memória. 7. Quais as principais diferenças das linguagens compiladas para as linguagens interpretadas? Um compilador transforma o código fonte em um código em que o computador entenda. Nas linguagens compiladas o código fonte é todo compilado antes de ser executado. Já nas linguagens interpretadas o código fonte é interpretado e executado em tempo real.
Compartilhar