Com relação aos softwares básicos envolvidos no processo d...

Próximas questões
Com base no mesmo assunto
Q233383 Arquitetura de Computadores
Com relação aos softwares básicos envolvidos no processo de transformação de um programa escrito em linguagem de alto nível para um código executável ou interpretado, assinale a alternativa correta.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Resposta correta: A

Para entender o processo de transformação de um código escrito em linguagem de alto nível para um código executável ou interpretado, é essencial compreender a função de cada componente envolvido neste processo. Ao abordar este tema, a questão destaca o papel de diversos softwares básicos, como compiladores, montadores (assemblers), link-editores (linkers) e outros. Vamos explicar o porquê da alternativa A ser a correta:

A análise semântica é uma fase dentro do processo de compilação que tem como objetivo verificar se as operações e expressões têm sentido lógico de acordo com as regras da linguagem. Por exemplo, garantindo que variáveis de tipos diferentes não sejam usadas de maneira inadequada em operações aritméticas. Portanto, quando a alternativa A menciona a verificação da consistência dos tipos de variáveis envolvidas em operações aritméticas, ela está se referindo a uma das responsabilidades da análise semântica, o que está correto.

Uma visão geral de cada componente mencionado nas alternativas pode ajudar a entender por que as outras estão incorretas:

  • Montadores (assemblers) traduzem o código de linguagem de montagem (assembly) para código de máquina, mas não são responsáveis por buscar rotinas em bibliotecas externas.
  • Compilação se refere a traduzir o código de uma linguagem de alto nível para linguagem de montagem ou diretamente para código de máquina, enquanto montagem é o processo de converter a linguagem de montagem em código de máquina, sendo o segundo bem menos complexo que o primeiro.
  • Link-editores (linkers) são utilizados após a compilação e montagem para combinar diferentes unidades de programa, como módulos e bibliotecas, para formar um único programa executável, resolvendo referências externas, e não apenas símbolos internos.
  • Analisadores léxicos e sintáticos analisam respectivamente a estrutura dos tokens (léxico) e a estrutura gramatical (sintaxe) de um programa, mas não se envolvem com a semântica ou significados do programa, que é tarefa da análise semântica.

Compreender bem esses componentes e suas responsabilidades é fundamental para desenvolvedores de software, bem como para aqueles que se preparam para concursos na área de tecnologia da informação, especialmente quando se trata de Arquitetura de Computadores e Compiladores.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Análise léxica:   Análise de tokens (simbolos), ou seja, números, sinais (+, =, ==) e etc.

Análise Sintática (Parsing):análise da sintática do código, organização, como é escrito, ou seja, das expressões, e estrutura destas. Ex. análise da estrutura de atribuição de algum valor. Verificação do uso de uma variável somente se esta estiver declarada.
Árvore:

X:= y+ 100
Análise Semântica:Analisa os erros semânticos como, por exemplo, o recebimento de uma variável diferente do seu tipo.
- Análise léxica (SCANNER)
- Análise sintática (PARSER)
- Análise semântica
- Código intermediário
- Otimização: Código objeto não executável
 
- Linker
- Gera uma grande unidade executável
 
Análise léxica (scanner), linear, esquadrinhamento (scanning): o fluxo de caracteres que constitui o programa é lido da esquerda para a direita e agrupado em tokens, que são seqüências de caracteres tendo um significado coletivo. Verifica cada "palavra" da linguagem e verifica se aquela palavra contém caracteres que fazem ou não parte da linguagem.

Análise sintática (parser), hierárquica ou gramatical: os caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com significado coletivo. Em outras palavras agrupam-se os tokens em frases gramaticais. Estas frases são usadas pelo compilador para sintetizar uma saída. As frases gramaticais são representadas por árvores. Determina a estrutura gramatical de uma sequência de entrada de dados, segundo uma determinada gramática formal. Ex.: Parentese sem correspondência.

Análise semântica: verificações são realizadas para assegurar que componentes de um programa se combinam de forma significativa. Esta fase verifica erros semânticos no programa fonte e captura informações de tipo para a fase subseqüente de geração de código. Utiliza a estrutura hierárquica determinada pela fase de análise sintática, a fim de identificar os operadores e operandos das expressões e enunciados.
Verifica erros semânticos, por exemplo, uma multiplicação entre 2 tipos diferentes. 
 
Linker:  Sua função é unir vários programas já compilados em um programa executável
Compilação -> é um processo semelhante ao de montagem, porém mais complexo e demorado.
Na montagem, há uma relação de 1:1 entre as instruções de linguagem de montagem e as instruções de máquina, enquanto na compilação isto não acontece, pois um único comando em Pascal, por exemplo, pode gerar várias instruções de máquina.
Inicialmente, o compilador realizará uma análise do código-fonte por meio de um módulo chamado front-end. A análise é dividida em três fases:
análise léxica -> decompõe o programa-fonte em seus elementos individuais distintos (comandos, operadores, variáveis etc.) e verifica que eles estão de acordo com as regras da linguagem.
análise sintática -> cria as estruturas (em geral uma árvore) de cada comando, verifica a correção dessas estruturas e alimenta a tabela de símbolos com as informações geradas. A tabela de símbolos gerada contém entradas para cada identificador e cada literal usado no programa-fonte, com as informações de seus atributos.
análise semântica -> verifica as regras semânticas estáticas (durante o processo de compilação) da linguagem, produzindo, da mesma forma que os demais analisadores, mensagem de erro para as incorreções ou inconsistências semânticas.

Basicamente, o processo de compilação é dividido em analise e sintese. Supomos que eu tenho um código fonte em linguagem de alto nível;

Objetivo da análise: entender o código fonte e representá-lo em uma estrutura intermediária.

1) Análise Léxica - le o código fonte, caracter a caracter, e identifica seus elementos como tokens; elimina elementos "decorativos"(formatação, comentários etc).

2) Análise Sintática - determina se uma cadeia de símbolos léxicos pode ser gerada por uma gramática. 

3) Análise Semântica; assegura que regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade.

Objetivo da síntese é construir o código objeto a partir dessa representação intermediária.

1) Geração de código intermediário (em java, bytecode, por exemplo);

2) Otimizador de código - examina o código intermediário para produzir um código que execute com eficiência.

3) Montagem de código objeto - Verifica a arquitetura específica;

4) Link Edição: linca o programa com recursos externos(bibliotecas, por exemplo);

5) Geração de código final;

Com essas definições em mente, vamos às alternativas:

a) No processo de análise semântica da compilação, é verificada a consistência dos tipos de variáveis envolvidas em operações aritméticas. Errado. Verifica o contexto das regras quanto a sua validade. Ex.: Verifica se a variável "int a" vai receber um valor inteiro, ao invés de uma String.

b) Os montadores buscam referências externas em rotinas de bibliotecas e inserem-nas no código-objeto. Errado. Quem faz isso é o linker.

c) Compilação e montagem são processos semelhantes; contudo, o processo de montagem é bem mais complexo. Errado. Na montagem ocorre a tradução do programa em assembly para um executável. Já a compilação tem todo um processo extra, como já explicado, análise e síntese, sendo mais complexo.

d) Os link-editores são usados para resolver as referências aos símbolos internos de um programa, produzindo um código-objeto simplificado. Errado. A questão fala do montador. Os link editores fazem referência e endereços das bibliotecas referenciadas no programa.

e) No processo de compilação, o analisador léxico e o sintático estão preocupados com a semântica e os significados dos programas como um todo. Errado. O analisador léxico le os caracteres, separando e identificando tokens; o sintático pega esses tokens e constroi a "gramatica" do codigo fonte. A questao está falando da análise semantica.

GABARITO A

No processo de análise semântica da compilação, é verificada a consistência dos tipos de variáveis envolvidas em operações aritméticas. (CERTO). A análise semântica faz as checagens dos tipos das variáveis... int, float, char, string... 

A maioria dos comentários só me confundiram ao invés de me ajudar...

 

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo