SóProvas


ID
700156
Banca
FUNIVERSA
Órgão
PC-DF
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

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
Comentários
  • 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...

     

  • Letra A está correta sim,, talvez não tenha ficado claro, mas o examinador passou como exemplo essa verificação de consistência em uma operação aritmética, ele não disse que análise semântica era resumida a isso.

  • Gabarito A

    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.

     

     

     

    "Retroceder Nunca Render-se Jamais !"
    Força e Fé !
    Fortuna Audaces Sequitur !