Baixe o app para aproveitar ainda mais
Prévia do material em texto
Lista de Exercícios 1 1) Qual a diferença entre compilação e interpretação? Dizemos que um programa foi compilado quando ele é completamente traduzido para a linguagem de máquina para só depois ser executado. Já na interpretação, o código vai sendo executado a medida que vai sendo traduzido de modo interativo. 2) No contexto de compiladores, por que Java é considerada uma linguagem híbrida? Pois Java é uma linguagem compilada e interpretada, onde o código é compilado para um nível intermediário e posteriormente interpretados para serem executados. 3) Qual a diferença entre compilador e montador? A montagem é feita para traduzir um código em linguagem de montagem para seu equivalente em linguagem binária, que é o código entendível pela máquina. A análise e tradução é muito mais simples que a de um compilador e também mais rápida. 4) Por que um compilador deve ser específico para uma linguagem e programação e para uma determinada CPU? Como as instruções e comandos de cada linguagem podem varias, cada tipo ou modelo deve ter um compilador equivalente. 5) Como são classificados os compiladores em relação aos passos da compilação? Quais vantagens e desvantagens de cada modelo? Compiladores de um passo: texto fonte do compilador > passo único (compilador) > texto objeto do compilador Compiladores de vários passos: texto fonte > passo 1 > texto intermediário 1 > passo 2 > texto intermediário 2 > texto intermediário n-1 > passo n > texto objeto. A vantagem de compiladores de vários passos é a menor utilização de memória, maior possibilidade de executar otimizações e projetos mais independentes. O maior volume de entrada e saída, o aumento do tempo de compilação e o aumento da complexidade do projeto, são algumas das desvantagens. Inversamente respectivo, as vantagens de compiladores de um passo são as desvantagens do compilador de vários passos. Assim como suas desvantagens. 6) Explique as etapas que constituem o processo de compilação. Processamento > leitura do código inserido, juntar linhas, ignorar comentários, etc analisador léxico > (lê a sequência de caracteres e a organiza como token) analisador sintético > (agrupa caracteres ou token em uma estrutura hierárquica com algum significado) analisador semântico > são verificados os erros de semântica gerador de código intermediário otimizador de código gerador de código > para a respectiva arquitetura código alvo > código com todas as substituições de endereço de funções e acessos a variáveis. 7) As etapas de compilação podem ser agrupadas em um modelo que prevê dois módulos. Explique tal modelo de compilação. Análise, onde é feito particionamento do código conte em peças constituintes e cria uma representação intermédia do código fonte. O processo de síntese constrói o desejado programa alvo a partir da representação intermédia. 8) Qual a função da tabela de símbolos e palavras reservadas? Elas são utilizadas para as declarações de uso restrito da linguagem de programação. São comandos de uso muito específicos que não podem ser ter outro propósito além do que já foi posto pelo compilador. 9) Dê exemplo de erro léxico, sintático e semântico para uma linguagem determinada. Erros léxicos: ocorre quando se abre um comentário e não se fecha. Má formação de strings. Limite do numero de casas decimais. Símbolos que não são reconhecidos. Erros sintáticos: acontecem quando falta algo na estrutura do código(o mais sofrido pra mim). Falta de ponto e vírgula, é um exemplo. Erros semânticos: quando acontecem algumas faltas de concordâncias no código, onde ele consegue entender a estrutura, mas não é capaz de entender o que era irá fazer. Por exemplo, multiplicar uma string por um valor booleano. 10) Defina analisador léxico. O que é token? A função básica de um analisador léxico é o reconhecimento e a classificação das estruturas elementares ou classes sintáticas das linguagens. Tokens são sequencias de caracteres, cadeia de caracteres, que forma a estrutura do código fonte. 11) Na prática, o que significa dizer que o analisador léxico consome espaços em branco e comentários? Ele faz uma varredura e remove os comentários e os espaços em brancos. 12) Que aspectos podem ser considerados importantes no processo de compilação? A geração de códigos intermediários. 13) Descreva (de maneira informal) as linguagens denotadas pelas seguintes expressões regulares: a) 0 (0|1)*0 linguagem iniciada com 0, seguidos de zero ou mais 0 ou 1, terminadas em 0 b) (0|1)*0(0|1)(0|1) linguagem iniciada com quantidades n de 0 ou 1, seguido por 0, seguido por 0 ou 1, terminada em 0 ou 1. c) 0*10*10*10* linguagem iniciada com zero ou mais 0, seguido por 1 e zero ou mais 0, seguido por 1 e zero ou mais 0. d) 0+1?0* linguagem iniciada em 0 ou 1, terminada com zero ou mais 0. 14) Construa os autômatos para as expressões regulares das letras c e d do exercício 13.
Compartilhar