SóProvas



Questões de Compilador


ID
32761
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2008
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um analista está responsável pelo projeto de um compilador para uma nova linguagem que sua empresa está desenvolvendo. Este compilador deverá receber como entrada o código fonte do programa e gerar como saída o código de linguagem de máquina para um determinado processador e sistema operacional. O analista sabe que um processo de compilação é dividido em fases e que seu compilador deverá possuir todas as fases de um típico processo de compilação mesmo que elas NÃO sejam obrigatórias em outros compiladores. A fase que não faz parte de um processo de compilação e que, portanto, não seria necessária no projeto do analista é a

Alternativas
Comentários
  • O processo de compilação é composto das seguintes fases:
    - Análise lexica;
    - Análise sintática;
    - Análise semântica;
    - Geração de código intermediário;
    - Otimisação de código;
    - Geração de código final.

    A ligação dos módulos, ou linker, é uma parte separada do compilador, cuja função é unir vários programas já compilados de uma forma independente e unificá-los em um programa executável. A questão tenta confundir justamente pelo fato de muitos acharem que o linker é parte integrante da compilação.
  • ilustrando o comentário acima com um compilador c/c++ genérico:
  • Otimização de código também não é obrigatória, pois, como o próprio nome já diz, é apenas uma otimização

  • Compiladores - Fases


    • Análise (divide o programa fonte nas partes 
    constituintes e cria uma representação 
    intermediária dos mesmos)
    – Léxica (tokens)
    – Sintática (árvore sintática)
    – Semântica (incoerências semânticas)


    • Síntese (constrói o programa alvo desejado a 
    partir da representação intermediária)
    – Geração de código intermediário
    – Otimização do código
    – Geração do código

  • Alternativa D é a correta.....


ID
72091
Banca
CESGRANRIO
Órgão
IBGE
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Ao realizar testes durante a elaboração de um compilador, um analista descobriu que havia, no compilador, um erro na checagem de tipos de variáveis em expressões, permitindo, por exemplo, a multiplicação entre tipos de dados que não poderia ocorrer. Em compiladores, a checagem de tipos de variáveis em expressões é uma função do



Alternativas
Comentários
  • Fases da Compilaçãoa) Análise Léxica (ou scanner): primeira fase do compilador. Tem como função ler o código fonte, caracter a caracter, buscando a separação e identificação dos elementos componentes do programa fonte, denominados símbolos léxicos ou tokens. É também de responsabilidade desta fase a eliminação de elementos "decorativos" do programa, tais como espaços em branco, marcas de formatação de texto e comentários.b) Análise Sintática (ou análise gramatical): determina se uma cadeia de símbolos léxicos pode ser gerada por uma gramática. No caso de analisadores sintáticos top-down, temos a opção de escrevê-los à mão ou gerá-los de forma automática, mas os analisadores bottom-up só podem ser gerados automaticamente. A maioria dos métodos de análise sintática cai em uma dessas duas classes denominadas top-down e botton-up.c) Análise Semântica: As análises léxica e sintática, não estão preocupadas com o significado ou semântica dos programas que elas processam. O papel do analisador semântico é prover métodos pelos quais as estruturas construídas pelo analisador sintático possam ser avaliadas ou executadas. As gramáticas livres de contexto não são suficientemente poderosas para descrever uma série de construções das linguagens de programação, como por exemplo regras de escopo, regras de visibilidade e consistência de tipos. É papel do analisador semântico assegurar que todas as regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade. Um exemplo de tarefa própria do analisador semãntico é a checagem de tipos de variáveis em expressões. Um dos mecanismos comumente utilizados por implementadores de compiladores é a Gramática de Atributos, que consiste em uma gramática livre de contexto acrescentada de um conjunto finito de atributos e um conjunto finito de predicados sobre estes atributos.
  • 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 !


ID
114181
Banca
CESPE / CEBRASPE
Órgão
TRE-MT
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Durante a compilação de um código-fonte, a fase do compilador que é responsável por produzir uma sequência de tokens é a

Alternativas
Comentários
  • As fases de um compilador podem ser classificadas em dois grupos: análise e síntese.Na fase de análise, encontram-se as fases de análise léxica, análise sintática e análise semântica. Já na fase de síntese encontram-se as fases de geração de código intermediário, otimização e geração de código. Adicionalmente as estas fases, existem ainda duas fases adicionais que interagem com todas as fases do compilador: o gerenciamento de tabelas e o tratamento de erros. Análise léxica - A fase de análise léxica (varredora) tem por objetivo ler o programa fonte e transformar seqüências de caracteres em uma representação interna, denominada itens léxicos. A SAÍDA É UM FLUXO DO SÍMBOLO (TOKEN). As expressões regulares são usadas para definir o símbolo reconhecido por um varredor (ou pelo analisador lexical). Por exemplo, suponha a expressão abaixo, descrita em Pascal:Exp := (A + B) * 1.5;Os itens léxicos contidos nesta expressão, são:Exp, :=, (, A, +, B, ), *, 1.5 e ;.Análise Sintática - responsabiliza-se por TRADUZIR os Tokens, e descobrir a relação de uns com os outros. Se você escreve writeln, um espaço, e um identificador, seu programa passará pela análise léxica (writeln e identificador existem), mas não passará pela análise sintática, que informa a necessidade de um abre-parênteses logo após esta procedure. A análise semântica - analisa a árvore sintática para a informação context-sensitive, gerada pelo analisador sintático em busca de inconsistências semânticas. Uma das tarefas mais importantes é a verificação de tipos, ou análise de contexto. É nesta fase que são detectadas, por exemplo, os conflitos entre tiposFASE DE SINTESEA fase de geração de código intermediário - permite a geração de instruções para uma máquina abstrata, normalmente em código de três endereços, mais adequadas a fase de otimização.Esta forma intermediária não é executada diretamente pela máquina alvo. A fase de otimização - analisa o código no formato intermediário e tenta melh
  • Compiladores - Fases


    • Análise (divide o programa fonte nas partes 
    constituintes e cria uma representação 
    intermediária dos mesmos)
    – Léxica (tokens)
    – Sintática (árvore sintática)
    – Semântica (incoerências semânticas)


    • Síntese (constrói o programa alvo desejado a 
    partir da representação intermediária)
    – Geração de código intermediário
    – Otimização do código
    – Geração do código

  • Compiladores - Fases


    • Análise (divide o programa fonte nas partes 
    constituintes e cria uma representação 
    intermediária dos mesmos)
    – Léxica (tokens)
    – Sintática (árvore sintática)
    – Semântica (incoerências semânticas)


    • Síntese (constrói o programa alvo desejado a 
    partir da representação intermediária)
    – Geração de código intermediário
    – Otimização do código
    – Geração do código

  • Gabarito A

    Análise léxica, 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.

    1.1. Léxica (desmembra cada expressão do código em tokens ou símbolos)
           1.2. Sintática (dispõe os símbolos através de uma estrutura hierárquica - árvore)
               1.3. Semântica (verifica se há incoerências na estrutura formada)

     

     

     

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


ID
122614
Banca
ESAF
Órgão
SUSEP
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação a compiladores, ligadores (link-editores) e interpretadores, é correto afirmar que

Alternativas
Comentários
  • Link-editor
    É o utilitário responsável por gerar, a partir de um ou mais módulos-objeto, um único programa executável.Reúne módulos compilados e conserta suas referências não resolvidas.
    Ele faz isso, pesquisando as bibliotecas de programa para encontrar rotinas de biblioteca usadas pelo programa, determinando os locais da memória que o código de cada módulo ocupará e relocando suas instruções ajustando referências absolutas e resolvendo as referências entre os arquivos.
     
    Montador
    Traduz um arquivo de instruções em assembly para um arquivo de instruções de máquina binárias e dados binários.
     
    Compilador
    Um compilador é um programa que lê um programa escrito em uma linguagem (linguagem fonte) e a traduz em um programa equivalente em outra linguagem (linguagem alvo ou objeto).
  • Complementando o comentário anterior, o processo de geração de um executável C/C++ exemplifica o caso genérico (compilaçã0->montagem->ligação): 

    Fonte: http://www.tenouk.com/ModuleW.html
  • A. Função do carregador
    B. Função do carregador
    C. Função do linkeditor
    D. Correta
    E. O compilador possui uma melhor performance, pois não depende do código-fonte

  • Gabarito D

    Em computação, um ligadorvinculador ou editor de ligação (do inglês, linker ou link editor) é um programa utilitário que recebe um ou mais arquivos objeto gerados por um compilador e combina-os em um único arquivo executável, arquivo de biblioteca ou outro arquivo 'objeto'.

    Uma versão mais simples que escreve sua saída diretamente na memória é chamada de carregador, desta forma o carregamento é normalmente considerado um processo separado.

     

     

     

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


ID
126844
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

No contexto dos compiladores, os scanners são responsáveis por executar a

Alternativas
Comentários
  • A) Analisador léxico: é o responsável pela identificação dos vários símbolos (tokens) existentes no código fonte de um programa. Ele

    também é conhecido pelo nome de scanner, uma vez que sua função é 'varrer' o código fonte a procura de erros de grafia no programa.

    Como é o analisador léxico quem opera sobre a tabela de strings, será ele também o responsável pela sua manutenção.

    B) Analisador sintático: após a atuação do scanner o analisador sintático, ou parser, entra em ação para verificar se a ordem em que

    aparecem os tokens é gramaticalmente correta. O produto lógico de um parser é uma árvore sintática abstrata, que é algo da forma a

    seguir, em que os tokens assumem os nós terminais da árvore. As duas abordagens diferentes para a realização da análise sintática se

    baseiam no caminho usado para percorrer a árvore sintática. 

  • Analisador semântico: é o componente do compilador encarregado de fazer a análise semântica, ou correção de contexto, do que

    estiver escrito no código fonte do programa. Ele atua, entre outras coisas, para verificar se as variáveis foram declaradas antes de serem

    usadas, compatibilidade de tipos em chamadas de funções, compatibilidade de tipos em atribuições de valor, etc. Durante sua atuação

    ele utiliza de forma intensa a chamada tabela de símbolos, que serve como um dicionário para se realizar a análise semântica do

    programa.

  • Fases de um compilador:
    1.Analisador léxico ou SCANNER
    2.Analisador sintático ou PARSER
    3.Analisador semântico
    4.Gerador de código intermediário
    5.Otimizador de código
    6.Gerador de código
  • Lexico - Scanner

    Sintático - Parser

  • Gabarito A

    A análise léxica também conhecida como scanner ou leitura é a primeira fase de um processo de compilação e sua função é fazer a leitura do programa fonte, caractere a caractere, agrupar os caracteres em lexemas e produzir uma sequência de símbolos léxicos conhecidos como tokens.

    A sequência de tokens é enviada para ser processada pela analise sintática que é a próxima fase do processo de compilação .

    O analisador léxico deve interagir com a tabela de símbolos inserindo informações de alguns tokens, como por exemplo os identificadores. A nível de implementação a analise léxica normalmente é uma sub-rotina da análise sintática formando um único passo, porem ocorre uma divisão conceitual para simplificar a modularizarão do projeto de um compilador.

     

     

     

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


ID
142021
Banca
CESPE / CEBRASPE
Órgão
TRE-MT
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Tradutores de linguagem são programas que traduzem os programas-fonte escritos em linguagem de alto nível para código de máquina. Com relação a tradutores, assinale a opção correta.

Alternativas
Comentários
  • Olá, pessoal!

    O gabarito foi atualizado para "X", conforme edital publicado pela banca e postado no site.

    Justificativa da banca:  não há resposta correta, dado que a opção indicada como gabarito é ambígua, fato que prejudica seu julgamento  objetivo da questão.

    Bons estudos!
  • A) Os compiladores são independentes do hardware. Os montadores sim, é que são fortemente dependentes da arquitetura da máquina. B) A interpretação e a compilação são coisas diferentes, pois a primeira não executa o processo de síntese, apenas o de análise. C) A maioria das linguagens orientadas a objeto são híbridas. D) A linguagem Java não é fudamentalmente interpretada, mas, sim, híbrida. Segundo Sebesta, em seu livro Conceitos de Linguagens de Programação, 5ªed. pag.43, "As implementações iniciais em Java eram todas híbridas. (...). Agora, há sistemas que traduzem código de bytes Java para código de máquina para permitir uma execução mais rápida."  E) Delphi não é linguagem, mas uma IDE para desenvolvimento de software. A linguagem utilizada pelo Delphi é o Object Pascal.

ID
149890
Banca
CESPE / CEBRASPE
Órgão
ANAC
Ano
2009
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A respeito de compiladores, ligadores, linguagem de máquina
(assembly) e conceitos associados, julgue próximos itens.

O compilador, em contraste com o montador, opera sobre uma linguagem de alto nível, enquanto o montador opera sobre uma linguagem de montagem.

Alternativas
Comentários
  • O nome "compilador" é usado principalmente para os programas que traduzem o código de fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível (por exemplo, linguagem de montagem assembly ou código de máquina).

     

    Um programa que faz uma tradução entre uma linguagem de montagem e o código de máquina é denominado montador[1]

  • O compilador, em contraste com o montador, opera sobre uma linguagem de alto nível, enquanto o montador opera sobre uma linguagem de montagem.

    Vamos por etapa:

    "O compilador opera sobre uma linguagem de alto nível"

    Certo. O código fonte, antes de ser tratado pelo compilador, é analisado apenas pelo pré-processador. Esse pré-processador unicamente executa a função de expandir as macros. Dessa forma, em seguida, o compilador ainda operará sobre uma linguagem de alto nível.

     

    "O montador opera sobre uma linguagem de montagem."

    Certo. O compilador gera como saída o código de montagem, também conhecido como Assembler (diferente de Assembly). Em seguida, o montador receber esse código de montagem oriundo do compilador e, por sua vez, gera como saída o código-objeto.

     

    Portanto, questão correta.


ID
149896
Banca
CESPE / CEBRASPE
Órgão
ANAC
Ano
2009
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A respeito de compiladores, ligadores, linguagem de máquina
(assembly) e conceitos associados, julgue próximos itens.

A criação da tabela de símbolos constitui tarefa realizada pelo ligador.

Alternativas
Comentários
  • Tabela de símbolos é uma estrutura de dados, geralmente uma árvore ou tabela de hash, 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. Fonte wikipedia.

  • Quem cria a tabela de símbolos é o analisador léxico.
  • Quem é resposável por criar tabelas de símbolos é o compilador (tradutor), durante a fase de análise léxica do código.
  • Na verdade, quem cria a tabela de símbolos é o montador.

    "Para poder criar a tabela de símbolos, o montador deve (...)".
    Fonte: http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node87.html

  • Paulo Lúcio,

    Esse material deve estar errado, pois quem cria a tabela de símbolos é mesmo o compilador.

    Abs.
  • Gabarito Errado

    Tabela de símbolos é uma estrutura de dados, geralmente uma árvore ou tabela de hash, 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.

    A gerência da tabela de símbolos de um compilador deve ser implementada de forma a permitir inserções e consultas da forma mais eficiente possível, além de permitir o crescimento dinâmico da mesma.

    Com isso é possível concluir que a tabela de símbolos serve como um banco de dados para o processo de compilação. Seu principal conteúdo são informações sobre tipos e atributosde cada nome definido pelo usuário no programa. Essas informações são colocadas na tabelade símbolos pelos analisadores léxico e sintáticoe usadas pelo analisador semântico e pelo gerador de código.

     

     

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


ID
157969
Banca
FCC
Órgão
METRÔ-SP
Ano
2008
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Dentre os tipos de compiladores, aqueles que efetuam a compilação e a execução do programa fonte e aqueles que efetuam a compilação numa única leitura do programa fonte, são denominados, respectivamente,

Alternativas
Comentários
  • Tipos de Compiladores
    Single-Pass: compilação numa única leitura do programa fonte
    Multi-Pass: compilação através de várias leituras do programa fonte
    Load-And-Go: compilação e a execução do programa fonte
    Debugging: compilação permitindo a depuração do programa fonte
    Optimizing: compilação e a otimização do programa alvo
  • Fonte: http://www.diegomacedo.com.br/conversoes-de-linguagens-traducao-montagem-compilacao-ligacao-e-interpretacao/?print=pdf

  • Gabarito A

    Tipos de Compiladores:

    Single-Pass: compilação numa única leitura do programa fonte

    Multi-Pass: compilação através de várias leituras do programa fonte

    Load-And-Go: compilação e a execução do programa fonte

    Debugging: compilação permitindo a depuração do programa fonte

    Optimizing: compilação e a otimização do programa alvo

     

     

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


ID
255811
Banca
FCC
Órgão
TRT - 24ª REGIÃO (MS)
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considere:

I. O objetivo da máquina RISC é executar, em média, uma instrução por ciclo.

II. Compiladores para máquinas CISC fazem uso intenso de registradores, o que incrementa o tráfego de memória.

III. As máquinas CISC possuem substancialmente mais registradores do que as máquinas RISC.

É correto o que consta em

Alternativas
Comentários
  •  Achei um link interessante e direto sobre o assunto em questão para quem quiser olhar.

    http://waltercunha.com/blog/index.php/2009/08/30/risc-x-cisc/

    Bons estudos

  • porque a "II.Compiladores para máquinas CISC fazem uso intenso de registradores, o que incrementa o tráfego de memória." esta errada ?
    sabemos que o cisc tem menos registradores e mais instruções, sendo assim ele não usa mais INTENSAMENTE OS REGISTRADORES ?
  • Caio...

    Quem faz um uso mais intenso dos registradores é a arquitetura RISC. Lembre-se que, ou ela tem um grande número de registradores ou o compilador tem que otimizar o seu uso. O CISC faz uso de um conjunto complexo de instruções.

  • Mais um detalhe na II: Ela é contraditória. Se há uso intensivo de registradores, é porque se quer evitar um alto tráfego no barramento. Isso também invalida a alternativa.
  • A Arquitetura RISC possui mais registradores que a CISC porque somente as instruções LOAD e STORE têm acesso à memória. Então precisa-se de mais registradores para a armezenar os dados para as instruções, em que na arquitetura CISC seriam acessados na memória.

    O objetivo da arquitetura RISC é fazer com que todas as intruções sejam executadas diretamente via hardware, sendo mais simples, porém executando em um mesmo ciclo de clock, diferente das instruções CISC, que fazem uso da interpretação, isto é, parte das instruções complexas são executadas via software.
  • Cuidado com o item II. Inicialmente a questão afirma que a arquitetura CISC faz intenso uso dos registradores, claramente errado.
    Depois o item faz uso da vírgula. Neste caso, após a vírgula haverá uma explicação.
    No entanto, a explicação é totalmente equivocada, porque o intenso uso de registradores EVITA o intenso acesso à memória.
  • Analisando a questão:

    I.  (Correta) O próprio nome já diz, tem como principal objetivo simplificar as instruções de modo que elas possam ser executadas mais rapidamente.

    II. (Errada) Único conjunto de registradores, tipicamente entre 6 e 16 registradores.

    III. (Errada) RISC Múltiplos conjuntos de registradores, muitas vezes superando 256.

  • Alguém poderia me esclarecer uma dúvida? Com o RISC, usamos pipeline, logo em um mesmo clock haverão diversos "pedaços" de instruções sendo executados simultaneamente. Então, em um ciclo, acredito que em média são realizados diversas instruções, e não somente uma como afirma a questão. Concordo que uma instrução individual levará um ciclo completo para ser realizada, mas paralelamente outras também serão, o que invalidaria também a letra A. Estou errado?

    O correto não seria afirmar "em média, uma instrução por clock" ?


ID
273328
Banca
CESPE / CEBRASPE
Órgão
FUB
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Acerca dos conceitos de informática, julgue os seguintes itens.

Na programação empregando uma linguagem de alto nível, a utilização de um compilador implica o uso de um ligador e de um carregador para a correta execução do programa; por outro lado, a utilização de um interpretador, que simula a existência de um processador cujas instruções são aquelas da linguagem de alto nível empregada, torna desnecessárias as etapas de ligação e carga.

Alternativas
Comentários
  • Correto. Na compilação, um programa precisa primeiro ser convertido para código objeto pelo compilador; depois, passa pelo ligador. Ex.: Pascal e C. 

    Já na interpretação essas três etapas são executadas comando por comando, em tempo de execução(Não há fases distintas nem se produzem códigos intermediários). Ela é mais lenta que a execução de um programa compilado, uma vez que precisa examinar cada instrução no programa-fonte, à medida que ela ocorre, e desviar para a rotina que executa a instrução. 

    Ex.: BASIC, linguagens de programas como Word, Excel.

  • Não precisa de ligação nem carga, pois não existem códigos intermediários

     

  • bem, quando cespe fala de interpretador ele se refere ao interpretador puro, pois se vc incluísse interpretador híbrido na questão, ela estaria errada.


ID
309532
Banca
CESPE / CEBRASPE
Órgão
TJ-ES
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Julgue os itens a seguir, a respeito de fundamentos de computação.

Em programa escrito em linguagem de alto nível e traduzido por compilador, alguns comandos que fazem parte desse código são instruções da linguagem de programação, enquanto outros comandos são instruções típicas do compilador denominadas diretivas.

Alternativas
Comentários
  • As diretivas de compilação são comandos que não são compilados, sendo dirigidos ao pré-processador, executado pelo compilador antes da execução do processo de compilação propriamente dito.
  • Diretivas não são instruções do compilador, muito menos típicas dele. São instruções do pré-processador. Discordo desse gabarito.

  •  O gabarito está correto?


ID
330226
Banca
FGV
Órgão
DETRAN-RN
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

São funções realizadas pelo módulo front-end de um compilador:

Alternativas
Comentários
  • Temos três grupos de módulos: os que compõe o Front-end, os que compõe o Back-end e outro que interage com todos os outros módulos (Manipulador de Erros e Tabela de Símbolos).
    No Front-end, estão contidos os módulos de análise e produção (Análise Léxica, Análise Sintática, Análise Semântica e Gerador de Código) das estruturas necessárias para o processo de compilação que são independentes de conhecer a arquitetura de máquina em que o programa-fonte será executado.
    O Back-end utiliza as estruturas fornecidas pelo Front-end para gerar programas para determinada arquitetura-alvo (por exemplo, binários para x86 e x86_64).
    O Manipulador de Erros e a Tabela de Símbolos podem ser acessadas de todos os módulos do Front-end e do Back-end.

    Analisador Léxico

    É o módulo responsável por dividir o Programa-Fonte em tokens, ou seja, pequena unidades que possuem significado, como números, identificadores (nomes de variaveis e funções), sequências de caracteres e símbolos de operadores (+, -, *, /). Por ser o responsável por dividir o programa-fonte, é o único módulo que efetua operações de leitura sobre os arquivos de entrada e controla os buffers de forma eficiente, de forma a minimizar o custo de IO no processo de compilação.

    Analisador Sintático

    Este módulo verifica se a sequência de tokens reconhecido pelo Analisador Léxico é coerente para a Gramática (Linguagem) definida. Caso contrário, os erros encontrados devem ser reportados. Além disso, o Analisador Sintático produz uma Árvore Sintática que representa de forma estruturada a gramática da linguagem e sequência de execução das instruções do programa-fonte.

    Analisador Semântico

    O Analisador Semântico é o responsável, entre outras coisas, por efetuar a inferência de tipos, garantir que uma variável tenha sido declarada antes de sua utilização, caso a definição da gramática exija isso. Nessa fase da compilação, são feitas anotações na Árvore Sintática para facilitar a execução dos passos posteriores.

    Gerador de código

    Este é o módulo responsável por utilizar todas as informações coletadas pelos módulos anteriores e gerar o programa-objeto. Usualmente, o gerador de código gera um programa em linguagem assembly para a arquitetura alvo para, posteriormente, ser montada com um assembler da respectiva arquitetura que gerará o programa-executável.

    Referência:

    http://blog.bbcoimbra.com/2011/09/18/introducao-aos-compiladores.html

  • Gabarito D

    Na compilação, a análise consiste em três fases:
    Análise léxica, 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.

    Análise sintática, 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

    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 !


ID
398038
Banca
CESPE / CEBRASPE
Órgão
Correios
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Acerca de arquitetura e hardware de computadores, julgue os itens
a seguir.

As instruções CISC são mais simples que as instruções RISC, por isso, os compiladores para máquinas CISC são mais complexos, visto que precisam compensar a simplificação presente nas instruções. Entretanto, se for usado pipeline, a complexidade do compilador CISC é reduzida, pois a arquitetura pipeline evita a necessidade de reordenação inteligente de instruções.

Alternativas
Comentários
  • As instruções CISC são mais simples complexas que as instruções RISC, por isso, os compiladores para máquinas CISC são mais complexos, visto que precisam compensar a simplificação presente nas instruções. Entretanto, se for usado pipeline, a complexidade do compilador CISC é reduzida, pois a arquitetura pipeline evita a necessidade de reordenação inteligente de instruções.
  • Eu acredito que a primeira parte da afirmação está certa. De fato, as instruções CISC são mais simples. O exemplo clássico dado em tudo quanto é livro é que você pode muito bem dar uma instrução de multiplicar para uma arquitetura CISC (uma simples instrução de "vezes")...Ao passo que, para implementar esta mesma instrução em RISC, deverá fazê-la por inúmeras parcelas de soma (tornando-se uma instrução mais complexa, mais longa).

    Acho que erro se dá na segunda parte onde ele diz que o pipeline não precisa de reordenação inteligente nas instruções. Posso estar errado, mas acredito que o Pipeline sempre irá precisar de uma ordenação inteligente das instruções. Do contrário, irá causar muitos desvios, esvaziamentos no pipe, etc...O que degrada o desempenho.

  • O seu pensamento não está correto, pq a questão não perguntou de uma instrução específica, nem se referiu aos computadores modernos, ela se focou apenas no conceito e se vc for ver conceitualmente uma das diferenças entre elas é q as intruções do CISC são sim mais COMPLEXAS q as do RISC.
    Tem q tomar cuidado com esse tipo de pensamento em questões do CESPE pq as vezes vc pode ser penalizado por saber demais ou não saber interpretar o q o examinador quer q vc saiba.
  • Acredito que a Cespe foi bem camarada nessa questão por que ela "errou" todas as assertivas deixando a questão um pouco menos dificil

    As instruções CISC são mais simples que as instruções RISC, ...
    INSTRUÇÕES
    CISC - Muitas, complexas e de tamanhos variados
    RISC-poucas ,simples e de mesmo tamanho

    ...por isso, os compiladores para máquinas CISC são mais complexos,  visto que precisam compensar a simplificação presente nas instruções...
    Complexidade
    CISC - No código
    RISC - No compilador

     ...Entretanto, se for usado pipeline, a complexidade do compilador CISC é reduzida, pois a arquitetura pipeline evita a necessidade de reordenação inteligente de instruções.
    Uso de pipeling
    CISC moderado,quase inexistente
    RISC intenso
  • RISC CISC
    Múltiplos conjuntos de registradores, muitas vezes superando 256 Único conjunto de registradores, tipicamente entre 6 e 16 registradores
    Três operandos de registradores permitidos por instrução (por ex., add R1, R2, R3) Um ou dois operandos de registradores permitidos por instrução (por ex., add R1, R2)
    Passagem eficiente de parâmetros por registradores no chip (processador) Passagem de parâmetros ineficiente através da memória
    Instruções de um único ciclo (ex. load e store) Instruções de múltiplos ciclos
    Controle hardwired (embutido no hardware) Controle microprogramado
    Altamente paralelizado (pipelined) Fracamente paralelizado
    Instruções simples e em número reduzido Muitas instruções complexas
    Instruções de tamanho fixo Instruções de tamanho variável
    Complexidade no compilador Complexidade no código
    Apenas instruções load e store podem acessar a memória Muitas instruções podem acessar a memória
    Poucos modos de endereçamento Muitos modos de endereçamento
  • Parei de ler em "As instruções CISC são mais simples que as instruções RISC...".
  • a questão já começa falando besteira, nem terminei de ler. parei de ler em "As instruções CISC são mais simples que as instruções RISC"

  • As instruções CISC são mais simples que as instruções RISC...

    Nem foi preciso terminar de ler a questão.

    Deveria ser o contrário: As instruções RISC são mais simples que as instruções CISC. 

    Questão errada!

  • As instruções CISC são mais simples que as instruções RISC...


ID
399856
Banca
CESPE / CEBRASPE
Órgão
Correios
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A respeito dos componentes (hardware e software) de um
computador, julgue os itens seguintes.

No programa em linguagem de alto nível, os interpretadores executam os passos definidos para cada instrução e produzem o mesmo resultado que o do programa compilado. Entretanto, a execução de um programa em linguagem de alto nível com o uso de interpretadores é mais lenta que a execução de um programa compilado, uma vez que precisa examinar cada instrução no programa-fonte, à medida que ela ocorre, e desviar para a rotina que executa a instrução.

Alternativas
Comentários
  • Na Compilação o programa escrito na linguagem fonte é traduzido para linguagem máquina e depois ligado e carregado para ser executado

     

    Na interpretação o programa fonte é traduzido e executado instrução a instrução, de modo interactivo.

    O Interpretador traduz cada instrução para uma representação interna e interpreta-a simulando o funcionamento do processador.

    O interpretador aceita para além das instruções da linguagem, comandos para controlar o seu funcionamento

     

    Vantagens o ciclo escrita, execução, modificação é mais rápido a execução é mais lenta Desvantagens

    Qualquer linguagem de alto-nível pode usar um interpretador ou um compilador Exemplos:

    para linguagens imperativas: BASIC, C para linguagens declarativas: Prolog, HaskellAs linguagens de scripting são normalmente interpretadas (p.e bash) mas também podem ser compiladas (p.e python, etc).
  • Diferenciando compilação (1) e interpretação (2):


    (1): traduzido para linguagem de máquina e executado diretamente no computador / envolve dois processos: tradução (compilação) e execução / não há acesso ao programa fonte na execução.

    (2): o interpretador "executa" diretamente as instruções do programa fonte, sem que ocorra a tradução para linguagem de máquina / execução mais lenta / tem acesso ao programa fonte.


  • Gabarito Certo

    Compilador é um programa ou um grupo de programas que escrito por uma linguagem (esta sendo necessária de compilação para sua execução) ao ser compilado gera outro código que é interpretado pelo computador. Este código compilado é chamado de código objeto, podendo ser um arquivo executável que é reproduzido em um sistema operacional, por exemplo. Este tipo de tradutor é um dos mais utilizados. 

    Os compiladores analisam o código em três partes, de forma sintática ou hierárquica, análise léxica ou linear e anâlise semântica.

    Alguns compiladores contam com um pré-processamento. Este pré-processamento é responsável por modificar o código-fonte conforme necessidades que o compilador identifique que sejam necessárias, por exemplo, otimização de código.

     

    O interpretador ao contrário do compilador roda o código-fonte escrito como sendo o código objeto, ele traduz o programa linha a linha, o programa vai sendo utilizado na medida em que vai sendo traduzido. Cada execução do programa precisa ser novamente traduzido e interpretado.

    O interpretador analisa sintaticamente e semanticamente o código, se estas duas etapas forem realizadas e executadas de forma correta o código está pronto para funcionar. 

     

     

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


ID
399862
Banca
CESPE / CEBRASPE
Órgão
Correios
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A respeito dos componentes (hardware e software) de um
computador, julgue os itens seguintes.

Nas linguagens Fortran e C, consideradas de baixo nível, os códigos são convertidos, por meio de compiladores, em linguagem de máquina (assembly). Todos os códigos dessas linguagens são convertidos, pelos montadores, em linguagem de montagem, que é a forma utilizada pelo processador.

Alternativas
Comentários
  • Nas linguagens Fortran e C, consideradas de baixo nível. (C é Fortran são consideradas de alto-nível - Embora dificilmente alguem que programe em Python ou Java Concorde com isso.)

    O compilador converte o código em linguagem de montagem,  ASSEMBLY.

    O montador, como o NASM, converte esse código em linguagem de máquina, que é a utilizada pelo computador.

    -- COMENTÁRIOS ADICIONAIS (17/07/11) --

    Note que os compiladores compilam o código-fonte, na linguagem orientada a problema (como C e Fortran) , em linguagem no nível ISA. Em uma arquitetura de computadores baseadas em processadores CISC, um conjunto maior de instruções está disponível, tornando o projeto de compiladores mais simples, porém em arquiteturas de computadores RISC o conjunto de instruções é reduzido - porque deve ser executado diretamente em hardware em um único ciclo de clock - tornando o projeto de compiladores mais complexo, visto que um número maior de instruções simples deverá ser executada para se obter uma tarefa complexa.


  • Questão errada. Motivos:

    1º Erro: Na questão, "dessas linguagens" refere-se a C e Fortran. A linguagem utilizada pelo Montador para criação da linguagem de máquina é a linguagem de montagem ou Assembly.

    2º Erro: A linguagem utilizada pelo processador é a linguagem de máquina, e não a Assembly.
  • Esquematizando:

    Programa em linguagem de alto nível -> Compilador -> Linguagem de montagem (assembly) -> Montador -> Linguagem de máquina -> Ligador -> Executável

    A questão está incorreta pois afirmou que o compilador transforma Programa em linguagem de alto nível direto em Linguagem de máquina.
  • Questão toda errada...

    1) Fortran e C não são linguagens de baixo nível, e sim de ALTO NÍVEL
    2) ASSEMBLY não é linguagem de máquina
    3) O montadores convertem ASSEMBLY em LINGUAGEM DE MÁQUINA, essa sim utilizada pelo processador.

    (Ainda estamos desconsiderando os LIGADORES, que atuam no código-objeto - saída do processo de montagem)

    Bons estudos!
  • A questões estão errada, mas estou aqui para esclarecer melhor um dos itens que está errado.
    As linguagens são divididos em três categorias, alto, médio e baixo nível; 
    C é uma linguagem de médio Nível, pois ele tem características e comportamentos de linguagens de baixo nível e comportamentos de alto nível. O FORTRAN é de alto nível; Essas informações são tiradas do Livro C completo Total , de Herbert Schildt, Página 4; Falo isso para ficar claro, caso tenha uma questão sobre isso, dificilmente a CESPE cobrará isso, pois é uma divisão cheio discussões, mas é bom ficar ligado;

  • Fluxo:

     

    1) Programa em linguagem de alto nível (Java, C#, por exemplo) é compilado (Compilador)
    2) É gerado um programa em linguagem de montagem
    3) O montador converte o programa em linguagem de montagem para módulo em linguagem de máquina
    4) O ligador é executado, fazendo uso de chamadas de rotinas da biblioteca, e gerará o executável
    5) O carregador é responsável por trazer o executável para memória.

  •  processador só entende 0 e 1 e não linguagem de montagem.

  • Gabarito Errado

    C# é linguagem de alto nível, até aí já matava a questão.

     

     

     

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

  • 1) Fortran e C são linguagens de ALTO NÍVEL


ID
425131
Banca
COPEVE-UFAL
Órgão
UFAL
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em um compilador, o analisador léxico

Alternativas
Comentários
  • Análise léxica é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador) e produzir uma seqüência de símbolos chamado "símbolos léxicos" (lexical tokens), ou somente "símbolos" (tokens), que podem ser manipulados mais facilmente por um parser (leitor de saída).
  • Fases do compilador:
    1. Análise
               1.1. Léxica (desmembra cada expressão do código em tokens ou símbolos)
               1.2. Sintática (dispõe os símbolos através de uma estrutura hierárquica - árvore)
               1.3. Semântica (verifica se há incoerências na estrutura formada)

    2. Síntese - Otimização do código.
  • O esquema abaixo traz a representação genérica com parte dos passos de um processo de compilação:

    Fontes:
    http://www.codeproject.com/Articles/26557/Building-systems-for-automatic-C-C-code-logging
    http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora065.html
    http://wiki.answers.com/Q/What_is_compilation_process_in_programming
  •  a) cria uma estrutura de dados.
    Resultado do analisador gramatical: uma parse tree ou uma abstract syntax tree; de qualquer forma, uma estrutura de dados.
     b) cria o código objeto.
    Resultado de todo o projeto de compilação; esse código pode estar em linguagem de montagem.
     c) cria uma sequência de símbolos.
    É o resultado do analisador léxico, já explicado acima.
     d) cria uma gramática livre de contexto.
    É o resultado da análise sintática, o segundo passo da compilação.
     e) cria um código intermediário
    É o mesmo que código objeto.
  •       1.1. Léxica (desmembra cada expressão do código em tokens ou símbolos)
           1.2. Sintática (dispõe os símbolos através de uma estrutura hierárquica - árvore)
               1.3. Semântica (verifica se há incoerências na estrutura formada)
     


ID
533896
Banca
ESAF
Órgão
CVM
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Nas questões de n. 2 a 9, assinale a opção correta.

Alternativas
Comentários
  • Acontece que o compilador pega uma linguagem em alto-nível, como C, Fortran ou Pascal; e  gera uma representação em linguagem de montagem, que ainda não é uma linguagem de máquina, portanto não pode ser executada.

    O montador (Assembler) pega essa linguagem de montagem (Assembly) e gera o executável, isto é, a linguagem de máquina.
  • Entendo que a letra B seja a menos errada, pois o compilador é responsável por gerar um programa em linguagem de MONTAGEM não executável, a partir de um programa escrito em uma linguagem de alto nível.
    Imagino que a questão tenha sido anulada devido à falta de alternativas corretas.
  • O processo de geração de um executável C/C++ exemplifica o caso genérico (compilaçã0->montagem->ligação): 

    Fonte: http://www.tenouk.com/ModuleW.html
  • Difícil estudar com questões erradas... pelo que vi do gabarito, nada foi anulado...
  • Gabarito B

    O compilador traduz:

    §  Um programa escrito em uma linguagem de alto nível;

    §  Em um programa-objeto não executável;

    §  Também chamado de módulo-objeto.

    Apesar do módulo-objeto ser em linguagem de máquina, ele não é executável ainda.

     

     

     

     

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


ID
645184
Banca
FCC
Órgão
TJ-PE
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

No contexto do módulo executável de um programa de computador, menor tempo de execução, menor consumo de memória, maior tempo na execução de loop’s, e menor dificuldade de identificação de erros estão associados, respectivamente, aos métodos

Alternativas
Comentários
  • Vantagens e Desvantagens

    Compiladores
    - Vantagens:
    1) A execução do programa é mais rápida.
    2) Estruturas de dados mais completas;
    3) Permitem a otimização de código fonte.
    - Desvantagens:
    1) Várias etapas de tradução;
    2) Processo de correção de erro e de depuração é mais demorado;
    3) Programação final é maior, o que gera a necessidade de mais memória;

    Interpretadores
    - Vantagens:

    1) Depuração é mais simples;
    2) Consomem menos memória;
    3) Resultado imediato do programa ou rotina desenvolvida.
    - Desvantagem:
    1) A execução do programa é mais lenta.
    2) Estrutura de dados demasiadamente simples;
    3) Necessário fornecer o programa fonte ao utilizador;
  • MLAcredito que você trocou o item referênte a memória em seu comentário.

    Programas compilados possuem como vantagem menor consumo de memória. A memória utilizada é apenas a memória para: carregar as instruções,  reservada para stack e para heap.
    Toda a alocação de memória de programas compilados é administrada pelo SO

    Programas interpretados possuem como desvantagem maior consumo de memória. Como o programa é interpretado há não só a memória referênte as instruções do programa como também diretivas para a máquina virtual interpretar (sem contar que também há o mesmo espaço de heap e stack). Devemos levar em conta também o fato que a máquina virtula ocupa um espaço consideravel de memória, e sem ela o programa não pode executar.

    Se considerarmos de outra forma a questão também estaria errada, pois a resposta iria contrariar a opção certa
  • Gostaria de saber porque na maioria dos sites informa que o interpretador consome menos memória. Achei só um site falando que o compilador consome mais memória. Existe alguma referência bibliográfica informando corretamente e explicando o motivo?

  • Quando falamos de espaço ocupado pelo interpretador devemos ter em mente que esse espaço é composto por: espaço do código fonte + espaço do interpretador + espaço usado pelas instruções de nivel imediatamente abaixo + espaço temporário usado para a fase de análises análise léxica, sintática e semântica. Isso somado torna o espaço necessário maior.

    Fonte : Mestre Gustavo Vilar.

  • (CESPE - 2007 – TCU - Analista de Sistemas) Um interpretador pode ser considerado como um programa que lê um conjunto de instruções e as executa
    passo a passo. Programas interpretados são, em geral, menores e mais facilmente mantidos, embora sejam mais lentos que os programas compilados. Gabarito (CERTO)

    O jeito é ficar de olho no entendimento da banca...

     

  • Compilação (tradutor == compilador)

    – Programas são traduzidos para linguagem de máquina e são executados diretamente no computador

    – Envolve dois processos distintos: Tradução (compilação) e Execução

    – Não existe acesso ao programa fonte na execução (menor consumo de memória e tempo de execução)

    Interpretação

    – O interpretador “executa” diretamente as instruções do programa fonte, sem traduzir para linguagem de máquina. 

    –  Como já passou pela compilação, os erros primarios foram corrigidos na fase anterior, e teoricamente na fase de interpretação, terá  menor dificuldade de identificação de erros.

    – Execução mais lenta, devido ao passo de decodificação da instrução de alto nível (maior tempo na execução de loop’s)

    – tem acesso ao programa fonte, para depuração ou mesmo para alterar o código sendo executado

    Interpretador == Não traduz nada,  apenas lê e executa.
    Não produz nenhum código-objeto como resultado de sua utilização.

     

  • A interpretação é mais lenta pois ocorrem vários processos de decodificação à medida que o código está em execução e requer mais espaço porque a tabela de símbolos precisa estar presente no momento da interpretação e o programa fonte deve estar num formato de acesso mais facilitado que geralmente é maior.

    Fonte: SEBESTA


ID
651358
Banca
PaqTcPB
Órgão
Prefeitura de Patos - PB
Ano
2010
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Os itens abaixo estão relacionados a compiladores com EXCEÇÃO de:

Alternativas
Comentários
  • b-

    FAT (file allocation table) é um conceito originalmente de microsoft para expandir a categoria de sistema de arquivos, o que é os criterios de como o hdd organiza e localiza os arquivos

  • Só não entende quais itens


ID
677443
Banca
FEC
Órgão
DETRAN-RO
Ano
2007
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação ao processo de compilação, das opções seguintes, aquela que muitas vezes é uma etapa opcional no processo de compilação:

Alternativas
Comentários
  • Gabarito D

    Compiladores - Fases


    • Análise (divide o programa fonte nas partes 
    constituintes e cria uma representação 
    intermediária dos mesmos)
    – Léxica (tokens)
    – Sintática (árvore sintática)
    – Semântica (incoerências semânticas)


    • Síntese (constrói o programa alvo desejado a 
    partir da representação intermediária)
    – Geração de código intermediário
    – Otimização do código (opcional)
    – Geração do código

     

     

     

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


ID
677446
Banca
FEC
Órgão
DETRAN-RO
Ano
2007
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação à interpretação pura, das opções seguintes aquela que apresenta suas DESVANTAGENS em relação à compilação é:

Alternativas
Comentários
  • Gabarito A

    Resumo da comparação entre a compilação e interpretação:

    §  Menor tempo de execução: compilação;

    §  Menor consumo de memória: compilação;

    §  Maior tempo na execução de loop’s: interpretação; e

    Menor dificuldade de identificação de erros: interpretaçã.

     

     

     

     

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

  • A interpretação é mais lenta pois ocorrem vários processos de decodificação à medida que o código está em execução e requer mais espaço porque a tabela de símbolos precisa estar presente no momento da interpretação e o programa fonte deve estar num formato de acesso mais facilitado que geralmente é maior.

    Fonte: SEBESTA


ID
697312
Banca
FCC
Órgão
TRE-SP
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Analise o texto:

Na compilação, a análise consiste em três fases. Em uma das fases, os caracteres ou tokens são agrupados hierarquicamente em coleções aninhadas com significado coletivo. Essa fase envolve o agrupamento dos tokens do programa fonte em frases gramaticais, que são usadas pelo compilador, a fim de sintetizar a saída. Usualmente, as frases gramaticais do programa fonte são representadas por uma árvore gramatical.

A fase citada no texto é conhecida como análise

Alternativas
Comentários
  • Na compilação, a análise consiste em três fases:
    Análise léxica, 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.

    Análise sintática, hierárquica ougramatical: 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

    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.
  • Gabarito A

    O analisador sintático agrupa os tokens em termos sintáticos da linguagem
    • Como sujeito, verbo, objeto, oração, período...
    • Ex.: if x == y then z = 1; else z = 2;
    • x == y é uma expressão relacional
    • z = 1; e z = 2; são comandos de atribuição
    • a frase em si á um comando if-then-else composto dessas três partes

    • Também é comum se gerar mecanicamente um analisador sintático a partir de
    uma especificação da sintaxe da linguagem, sua gramática
    • Novamente, um programa gerador de analisadores sintáticos é apenas outro
    compilador
    • O resultado da análise sintática é uma árvore representando a estrutura do
    programa
    • Pode ser concreta, codificando toda a estrutura sintática do programa, ou
    abstrata, codificando apenas o essencial

     

     

     

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


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

Com base em técnicas, estágios e processos da descompilação de código nativo e bytecode, assinale a alternativa correta.

Alternativas
Comentários
  • Falou em bytecode, normalmente está relacionado com java, ou java runtime
  • Até então eu não tinha visto falar em descompiladores.
    Agora aprendi.

    Segue a definição segundo a wikipedia:

    "Descompilador é um programa de computador que realiza a operação inversa de um compilador, transformando código objeto em código fonte. O termo entretanto é mais utilizado para designar programas de computador que traduzem código de máquina (programas executáveis) em código fonte em uma linguagem de programação de alto nível que, quando novamente compilado, produzirá um programa executável de características e comportamento igual ao programa executável original. Em comparação, um desmontador transforma código de máquina em linguagem de montagem.

    O sucesso da descompilação depende da quantidade de informação presente no código e da sofisticação da rotina de análise. As representações intermediárias usadas em máquinas virtuais (como Java e . NET) normalmente incluem bastante metadados e informações de alto nível que facilitam a descompilação. Entretanto, linguagens de máquina possuem muito menos metadados e portanto são bem mais difíceis de serem descompiladas.

    Descompiladores automáticos, que geram códigos fontes a partir de arquivos binários, são a utopia de descompilação e mesmo descompiladores (ou desmontadores) avançados atualmente não são capazes de produzir tais resultados sem que o usuário tenha que tomar varias decisões antes que o código fonte possa ser efetivamente utilizado."

     

  • Complementando o comentário acima:
    a) Ao contrário da compilação, a descompilação não usa uma representação intermediária para gerar o código-fonte do programa.
    Nas pouquíssimas fontes onde consegui material sobre este assunto, o processo de compilação é referenciado como o processo que traduz um código fonte em um código executável. O que sabemos é que o processo não ocorre exatamente assim. Falando de uma forma geral, na compilação, o código fonte é traduzido em uma linguagem de montagem (Assembly) e o programa Assembler (montador) traduz o código assembly em código objeto. Durante a descompilação ocorre mais ou menos a mesma coisa, só que de maneira inversa. Primeiramente tenta-se fazer a tradução do código objeto em uma linguagem intermediária (correspondente ao assembly) e, posteriormente, traduz-se o código já nessa linguagem intermediária para um código fonte. Portanto, esta alternativa está ERRADA.
  • c) Representações intermediárias geralmente contêm detalhes específicos da arquitetura do sistema no qual o programa é executado.
    Essa alternativa me deixou em dúvida. Uma fonte que consegui sobre este assunto afirma justamente isso. Na fase de carregamento, um dos objetivos é descobrir, após a tradução do código objeto em uma linguagem intermediária, a arquitetura sobre a qual o programa executa, além de encontrar uma função correspondente à main function (onde o código se inicia). Se disponíveis, a tabela de símbolos e dados de depuração também são carregados.
  • 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.

    2) Análise Léxica - le o código fonte, caracter a caracter, buscando a separação e identificação dos elementos componentes do programa fonte, denominados símbolos léxicos ou tokens; elimina elementos "decorativos", tais como espaços em branco, marcas de formatação de texto e comentários.

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

    4) Análise Semântica; assegurar que todas as 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 - A Otimização de código é a estratégia de examinar o código intermediário, produzido durante a fase de geração de código com objetivo de produzir um código que execute com eficiência(detectar padrões dentro do código produzido e substituí-los por códigos mais eficientes). 

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

    4) Link Edição;

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

    Como a descompilação é o inverso, os processos são os mesmos, até a obtenção do código de alto nivel. Outro detalhe: o código intermediário não leva em consideração a arquitetura especifica. Isso é feito na fase da montagem de código objeto.

    O processo de descompilação é complexo, o programa pode não permanecer e mesmo ao final do processo, pois muitas das variáveis são substituidas por endereços de memória(isso se o autor do código não quis tornar esse processo mais dificil, com o uso de ofuscadores de codigos, por exemplo).

    Em java, diferente de outras linguagens, quando um código é descompilado, a chance de obter um código quase totalmente perfeito se dar por causa da geração do código intermediário (bytecode) que não sofre a etapa de otimização que será executada pela JVM em um processo do JIT (Just in time) em tempo de execução.

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

    a) Ao contrário da compilação, a descompilação não usa uma representação intermediária para gerar o código-fonte do programa. Errado.

    b) Representações intermediárias usam um grande conjunto de instruções, com centenas de orientações diferentes. Errado.

    c) Representações intermediárias geralmente contêm detalhes específicos da arquitetura do sistema no qual o programa é executado. Errado.

    d) Sempre é possível gerar código-fonte completo de alto nível a partir de código binário nativo, independentemente da arquitetura do sistema ou do uso de técnicas assembly. Errado.

    e) Descompilação de programas em bytecode, como os da linguagem Java, têm maior possibilidade de sucesso que programas em código nativo. Certo.



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 !


ID
788671
Banca
CESGRANRIO
Órgão
Transpetro
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um compilador é um programa que executa vários passos, dentre os quais, o de analisar uma sequência de entrada para determinar sua estrutura gramatical segundo uma determinada gramática formal.

O resultado típico dessa análise é uma estrutura conhecida como

Alternativas

ID
788674
Banca
CESGRANRIO
Órgão
Transpetro
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um programa de computador escrito em código fonte passa por uma sequência de 4 passos até que seja gerado o código da máquina alvo. Cada passo é realizado por um tipo de programa, listados a seguir em ordem alfabética: compilador, linkeditor, montador e pré-processador.

Nessa sequência de 4 passos, os compiladores normalmente ficam posicionados imediatamente após e antes de que outros tipos de programas, respectivamente?

Alternativas
Comentários
  • Sequência:

     Pré-processador  ->    Compilador  ->    Montador  ->    Linkeditor.

     

    Gab. E

     

    FONTE: MM - Prof. Vilar.


ID
814597
Banca
AOCP
Órgão
TCE-PA
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em sistemas operacionais, o conceito de compilador é

Alternativas
Comentários
  • Um compilador é um programa de computador (ou um grupo de programas) que, a partir de um código fonte escrito em uma linguagem compilada, cria um programa semanticamente equivalente, porém escrito em outra linguagem, código objeto. É chamado compilador por razões históricas; nos primeiros anos da programação automática, existiam programas que percorriam bibliotecas de sub-rotinas e as reunia, ou compilava as sub-rotinas necessárias para executar uma determinada tarefa.                                                                                                       Gabarito: E

  • a) um programa de computador que transforma código objeto em código fonte.

     b) um padrão comum de arquivo para executáveis, código objeto, bibliotecas compartilhadas, e core dumps.

     c) um programa de computador que converte código de máquina em código escrito em linguagem de montagem.

     d) um programa de computador que lê um código fonte de uma linguagem de programação interpretada e o converte em código executável.

     e) um programa de computador que transforma o código fonte escrito em uma linguagem compilada em um programa semanticamente equivalente em código objeto.CERTA

  • Gabarito D

    Compiladores são programas que recebem como entrada arquivos texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos objeto correspondentes a cada módulo, ou, se todas as bibliotecas e módulos são apresentados como entrada, geram um programa executável diretamente.

     

     

     

     

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


ID
815011
Banca
CESGRANRIO
Órgão
LIQUIGÁS
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A programação em linguagens de alto nível pressupõe a utilização de alguma ferramenta que permita a transformação do programa original em instruções que o processador da máquina seja capaz de executar.

Compiladores e Interpretadores são dois desses tipos de programa, que têm como principal diferença o fato de que os compiladores

Alternativas
Comentários
  • Gabarito A

    Um exemplo de interpretador é a máquina virtual java.

     

     

     

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


ID
902380
Banca
CESGRANRIO
Órgão
Petrobras
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

O utilitário responsável por gerar, a partir de um programa escrito em linguagem de alto nível, um programa em linguagem de máquina não executável é o

Alternativas
Comentários
  • Um compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível para um programa equivalente em código de máquina para um processador. Em geral, um compilador não produz diretamente o código de máquina mas sim um programa em linguagem simbólica (assembly) semanticamente equivalente ao programa em linguagem de alto nível. O programa em linguagem simbólica é então traduzido para o programa em linguagem de máquina através de montadores.

    Resumindo o compilador transforma a linguagem(humana) em linguagem maquina

    Fonte: 
    http://www.tecmundo.com.br/tira-duvidas/100439
  • Segue um resumo que fiz baseado no livro do Murdocca [1]

    Compilador:
    • Análise léxica
    • Análise Sintática;
    • Análise de nomes;
    • Análise de tipos;
    • Mapeamento de ações e geração de código: associar comandos do programa com uma sequência em linguagem de montagem (assembly).

    Montador:
     O processo de traduzir um programa em linguagem de montagem para um programa em linguagem de máquina é chamado de processo de montagem.

    Ligação
     Combina módulos montados ou compilados separadamente em um único modo de carregamento, criando o arquivo executável.

    Carregamento
    É um programa que coloca um módulo de carregamento na memória principal.

    [1] Murdocca, Intridução à Arquitetura de Computadores, cap 5
  • Resumo Mecanismos de Conversão de Linguagem

    Pre-processador(pre-compilação) -> Compilador (tradutor) -> Montador (tradutor de linguagem de maquina para linguagem de maquina) -> Linkeditor (liga códigos objetos formando um executável) -> Carregadores (copia o aquivo em formato binário para a memoria)

    Pre-processador - Entrada ( código fonte - macros), Saída (código fonte - macros expandidas)

    Compilador - Entrada ( código fonte - macros expandidas), Saída ( linguagem de montagem - Assembly)

    Montador - Entrada ( linguagem de montagem - Assembly), Saída (Código Objeto)

    Linkeditor - Entrada (Código Objeto), Saída ( Executável )

  • Eu não entendi a parte do "não executável". Pois é o Montador que gera o código objeto, porém este ainda precisa ser ligador pelo linker para se tornar algo executável. Por isso, marquei a letra a.

  • Compilador não gera linguagem dem áquina, o montador gera, mas não a partir do código em algo nível. Essa questão deveria ser anulada, o enunciado está incorreto.

  • Questão claramente equivocada. Deveria ter sido anulada. O enunciado está errado, conforme já mencionado pela colega Giselle Mendonça.

  • Assim como a grande maioria aqui, a questão está com o gabarito errado. Quem gera a linguagem de máquina (na forma de bits) é o montador. O compilador gerar o assembly.

  • Como deveria ser...

     

    Ano: 2014 Banca: FGV Órgão: SUSAM Prova: Analista de Sistemas

    Programa destinado a transformar um código escrito em linguagem de alto nível em uma linguagem Assembly é o 

     a) debugger. 

     b) compilador. 

     c) montador. 

     d)  fortran. 

     e) otimizador. 

     

    Resposta: B

  • Ok, um compilador faz a tradução da linguagen de alto nível pra linguagem de máquina. Mas ele também GERA UM EXECUTÁVEL..... Quem não gera é o interpretador, que faz a tradução linha a linha toda vez que o código é rodado. Scripts bath são um exemplo de tradução (sem executável) Honestamente, não entendi o "não executável" para um compilador...

  • Definições segundo o livro Arquiteturas de Sistemas Operacionais (Berenguer Machado):

    Os tradutores compilador e montador geram módulo objeto.

    Compilador: Gera, a partir de um programa escrito em uma linguagem de alto nível, um programa em linguagem de maquina não executável.

    Montador: Responsavel por traduzir um programa-fonte em linguagem de montagem em um programa-objeto não executável. traduz literalmente Assembly para Linguagem de Máquina

    Interpretador: tradutor que não gera módulo-objeto. Executa imediatamente na memória.

    Linker: Gera, a partir de um módulo objeto, um programa executável.

    Loader: Carrega o programa executável na memória principal. Pode ser absoluto ou relocável.

    Depurador (debbuger): Permite usuário acompanhar toda a execução do programa a fim de detectar erros lógicos.


ID
1015984
Banca
Marinha
Órgão
CAP
Ano
2011
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação à Compilação e Interpretação, no que se refere a consumo de memória, assinale a opção correta.

Alternativas
Comentários
  • E) O compilador só permanece na memória durante a fase de compilação. Ao terminar esta fase, o compilador cede es- paço para o ligador, consumindo menos memória.

  • A) O programa interpretador permanece na memória durante toda a sua execução, resultando num consumo menor de memória.

    B) A Interpretação tem a capacidade de identificar e indicar um erro no programa-fonte, seja na etapa de conversão da fonte para o executável, seja na execução do código binário.

    C) Quando se utiliza o método de compilação, a identificação de erros no programa se torna mais problemática à medida que o código executável entra em fase de execução.

    D)Na compilação, existe a possibilidade de certas partes do código fonte terem de ser compiladas tantas vezes quantas forem definidas em um loop.

    E) O compilador só permanece na memória durante a fase de compilação. Ao terminar esta fase, o compilador cede es- paço para o ligador, consumindo menos memória.


ID
1022197
Banca
IBFC
Órgão
PC-RJ
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Quanto à linguagem de programação, marque a opção que determina o processo que efetua integralmente a tradução de um programa fonte para o código de máquina, podendo assim ser executado diretamente.

Alternativas
Comentários
  • Item C)

    Um compilador é um programa que, a partir de um código escrito em uma linguagem, o código fonte (do inglês source code), cria um programa semanticamente equivalente porém escrito em outra linguagem, código objeto (do inglês object code).
  • Gabarito C

    O compilador traduz:

    §  Um programa escrito em uma linguagem de alto nível;

    §  Em um programa-objeto não executável;

    §  Também chamado de módulo-objeto.

    Apesar do módulo-objeto ser em linguagem de máquina, ele não é executável ainda.

     

     

     

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


ID
1035355
Banca
CESPE / CEBRASPE
Órgão
PEFOCE
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Julgue os itens seguintes, relativos a montadores, compiladores, ligadores e interpretadores.

Erros de tipo são verificados pelo analisador semântico, que integra o gerador de código intermediário.

Alternativas
Comentários
  • Há 6 fases de compilação:

    Análise léxica; Análise sintática; Análise semânticaGeração de código intermediário; Optimização de código; Geração de código final

    * Análise semântica  papel do analisador semântico assegurar que todas as regras sensíveis ao contexto da linguagem estejam analisadas e verificadas quanto à sua validade

  • O analisador semântico integra o gerador de código intermediário?!

  • https://pt.wikipedia.org/wiki/Compilador

  • •Análise(divide o programa fonte nas partes constituintes e cria uma representação intermediária dos mesmos)
    –Léxica (tokens) 
    –Sintática (árvore sintática)
    –Semântica (incoerências semânticas) --> tipos
    •Síntese(constrói o programa alvo desejado a partir da representação intermediária)
    –Geração de código intermediário
    –Otimização do código
    –Geração do código

    questão correta.

  • Gabarito Certo

    Análise semântica é a terceira fase da compilação onde se verificam os erros semânticos, (por exemplo, fazer a divisão de um número inteiro por outro numero float, na linguagem C padrão ANSI)) no código fonte e coletam-se as informações necessárias para a próxima fase da compilação, que é a geração de código objeto.

    A análise semântica trata a entrada sintática e transforma-a numa representação mais simples e mais adaptada a geração de código. Esta camada do compilador fica igualmente encarregada de analisar a utilização dos identificadores e de ligar cada uma delas a sua declaração. Nesta situação verificar-se que o programa respeita as regras de visibilidade e de porte dos identificadores. Nesta fase é também esperado que no processo da compilação verifique que cada expressão definida tenha um tipo adequado conforme as regras próprias da linguagem.

    O objetivo da análise semântica é trabalhar nesse nível de inter-relacionamento entre partes distintas do programa. As tarefas básicas desempenhadas durante a análise semântica incluem a verificação de tipos, a verificação do fluxo de controle e a verificação da unicidade da declaração de variáveis. Dependendo da linguagem de programação, outros tipos de verificações podem ser necessários.

     

     

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

  • Questão baseada no 1º capítulo do livro do SEBESTA, Conceitos de Linguagem de Programação, 9ª edição. Segue o trecho do livro que sustenta o gabarito:

    "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." [SEBESTA]


ID
1035358
Banca
CESPE / CEBRASPE
Órgão
PEFOCE
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Julgue os itens seguintes, relativos a montadores, compiladores, ligadores e interpretadores.

A tabela de símbolos utilizada no processo de compilação contém informações sobre tipos e atributos de cada nome definido pelo usuário no programa. Essas informações são colocadas na tabela de símbolos pelos analisadores léxico e sintático e usadas pelo analisador semântico e pelo gerador de código.

Alternativas
Comentários
  • Gabarito Certo

    Tabela de símbolos é uma estrutura de dados, geralmente uma árvore ou tabela de hash, 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.

    A gerência da tabela de símbolos de um compilador deve ser implementada de forma a permitir inserções e consultas da forma mais eficiente possível, além de permitir o crescimento dinâmico da mesma.

    Com isso é possível concluir que a tabela de símbolos serve como um banco de dados para o processo de compilação. Seu principal conteúdo são informações sobre tipos e atributosde cada nome definido pelo usuário no programa. Essas informações são colocadas na tabelade símbolos pelos analisadores léxico e sintáticoe usadas pelo analisador semântico e pelo gerador de código.

     

    ENTRADAS NA TABELA DE SÍMBOLOS


    Cada entrada na tabela de símbolos é a declaração de um nome. O formato das entradas pode não ser uniforme (embora seja mais fácil manipular entradas uniformes) porque as informações armazenadas para cada nome podem variarde acordo com o tipo/uso do nome.

    Cada entrada na tabela de símbolos pode ser implementada como um registro ("record" ou "struct") contendo campos (nome, tipo, classe, tamanho, escopo, etc.) que a qualificam.


    Tipos de Entradas: - palavras reservadas: inseridas inicialmente na tabela (antes da análise léxica ser iniciada); - fortemente relacionadas com o papel de um nome no contexto da linguagem fonte; - o analisador léxico pode começar o processo de entrada dos nomes -- risco: nome pode denotar objetos distintos.


    Exemplo:

    int x;

    struct x {float y, z;};

    x: inteiro e rótulo de uma estrutura de campos.

     

     

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


ID
1118167
Banca
CESGRANRIO
Órgão
FINEP
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Os programadores utilizam ambientes de desenvolvimento compostos por ferramentas que auxiliam na produção de softwares. Dentre essas ferramentas, o compilador é responsável por :

Alternativas
Comentários
  • Montador
    Responsável pela montagem do programa fonte, gerando assim o programa objeto, ou seja, monta um programa em linguagem de baixo nível de forma que se obtém um programa em linguagem de máquina. Podemos citar como exemplo o montador Assembler que é um software que traduz programas escritos na linguagem Assembly. 

     

    Compilador
    Gera uma linguagem de máquina, não executável, a partir de um programa escrito em linguagem de alto nível como Pascal, FORTRAN, COBOL.

     

    Interpretador
    É considerado um tradutor que não gera módulo objeto, ele executa uma linguagem de alto nível imediantamente. Algumas linguagens tipicamente interpretadas são Basic e Perl.

     

    MACHADO, Francis B.; MAIA, Luiz Paulo. Arquitetura de sistemas operacionais. Editora LTC, 3ª edição.http://www.simonsen.br/its/pdf/apostilas/base-tecnica/1/introducao-a-informatica-1-ano-de-informatica-3-capitulo.pdf

  • Gabarito A

    O compilador traduz:

    §  Um programa escrito em uma linguagem de alto nível;

    §  Em um programa-objeto não executável;

    §  Também chamado de módulo-objeto.

    Apesar do módulo-objeto ser em linguagem de máquina, ele não é executável ainda.

     

     

     

     

     

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

  • GABARITO A

    Compilador: Converte o código fonte completo em módulos-objeto ( linguagem de máquina ) não executável;

    • Linkeditor: gera, a partir de um ou mais módulos-objeto, um único programa executável.

    Interpretador: converte e executa o código-fonte linha a linha;

    Tradução: Consiste no processo completo em que o código-fonte é convertido em linguagem de máquina e executado;


ID
1268479
Banca
CESGRANRIO
Órgão
CEFET-RJ
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um programador escolheu uma linguagem de alto nível para desenvolver uma aplicação para um cliente. Ele deseja entregar um código executável que possa ser simplesmente copiado na área de trabalho do cliente, que poderá executá-lo quando desejar, sem a necessidade de qualquer outro programa, recurso ou instalação, a não ser o sistema operacional (SO) nativo de sua máquina.

Nessas circunstâncias, o programador necessitará de um

Alternativas
Comentários
  • Qual o erro da D?

  • Discordo do gabarito, pois o responsável por gerar o código executável é o linkeditor (ligador)

  • A tradução de um programa escrito em linguagem de alto nível para a linguagem de máquina pode ser realizada de 2 modos:

    através de um compilador (Linguagem Compilada) ou

    através de um interpretador (Linguagem Interpretada);

    Antes de prosseguirmos é importante diferenciarmos o funcionamento de é um interpretador e de um compilador (ou montador).

    Um compilador (ou um montador) quando traduz um programa (código fonte) gera um código objeto como resultado da tradução, e assim ele, através do linker, liga todos os módulos gerados e as bibliotecas utilizadas, produzindo então um arquivo executável.

    Mais especificamente teríamos:

    - Primeiramente, o compilador "lê" todo o código fonte , analisando este semanticamente e sintaticamente, de forma que se algum erro for encontrado, um aviso de erro será dado para cada erro em questão. Se nenhum erro for encontrado o programa poderá ser executado sem maiores problemas. O compilador converte então o código do programa em código objeto (tradução). Para conseguir o arquivo executável final o código objeto é convertido pelo linker (fig.1).

    O programa objeto é formado por instruções de máquina de uma determinada família de hardware, resultado da tradução do programa fonte escrito pelo programador, acrescido de mais algumas chamadas a rotinas do sistema operacional. Por isso diz-se que um fonte foi compilado para um determinado sistema operacional.

    http://www.deinf.ufma.br/~acmo/grad/lp1/portabty.html

  • Minha duvida em relação ao gabarito é que no enunciado está claro que o programador já vai copiar um executável na área de trabalho do cliente, bastando apenas o cliente executar o programa. Dessa forma, não entendi o que o compilador vai fazer, uma vez que o executável já existe.

  • Gabarito E

    Compiladores são programas que recebem como entrada arquivos texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos objeto correspondentes a cada módulo, ou, se todas as bibliotecas e módulos são apresentados como entrada, geram um programa executável diretamente.

     

     

     

     

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

  • Acredito que o erro da alternativa D, seja o fato de estar muito genérico, aparentando que só é necessário o ligador para executar o programa. Em contrapartida, a letra E é mais completa.


ID
1302073
Banca
FGV
Órgão
SUSAM
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Programa destinado a transformar um código escrito em linguagem de alto nível em uma linguagem Assembly é o

Alternativas
Comentários
  • a) Não existe esse termo em arquitetura multinível

    b) substitui cada instrução escrita em L1 por uma sequência de instruções equivalente em L0. Em seguida é executado o novo programa em L0. O programa escrito em L1 primeiro é convertido para outro programa equivalente em L0 (oprograma em L1 pode ser descartado).

    c) mecanismo que permite a tradução da linguagem de montagem (código assembly) para o código objeto

    d) linguagem de programação

    e) não reconheço.

    Bons estudos.

     

  • Gabarito B

    O compilador traduz:

    §  Um programa escrito em uma linguagem de alto nível;

    §  Em um programa-objeto não executável;

    §  Também chamado de módulo-objeto.

    Apesar do módulo-objeto ser em linguagem de máquina, ele não é executável ainda.

     

     

     

     

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

  • Para complementar ,já o montador faz a tradução de uma linguagem assembly para código de máquina.


ID
1306420
Banca
CESPE / CEBRASPE
Órgão
ANATEL
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Acerca dos conceitos de computadores e sistemas computacionais, julgue o próximo item.


A compilação é o processo de análise de um programa escrito em linguagem de alto nível, denominado programa-fonte, e sua conversão em um programa equivalente, escrito em linguagem binária de máquina, denominado programa-objeto.

Alternativas
Comentários
  • Basicamente, um compilador é um programa (ou um conjunto deles) como qualquer outro, porém seu objetivo principal é o de traduzir todas as suas linhas de código para outra linguagem – normalmente, uma de alto nível para outra de baixo nível (Assembly ou linguagem de máquina). Delphi, Rust, C++ e Swift figuram na lista de compiladas.

  • Gabarito Certo

    Um compilador é um programa de computador (ou um grupo de programas) que, a partir de um código fonte escrito em uma linguagem compilada, cria um programa semanticamente equivalente, porém escrito em outra linguagem, código objeto. Classicamente, um compilador traduz um programa de uma linguagem textual facilmente entendida por um ser humano para uma linguagem de máquina, específica para um processador e sistema operacional. Atualmente, porém, são comuns compiladores que geram código para uma máquina virtual que é, depois, interpretada por um interpretador. Ele é chamado compilador por razões históricas; nos primeiros anos da programação automática, existiam programas que percorriam bibliotecas de sub-rotinas e as reunia, ou compilava, as subrotinas necessárias para executar uma determinada tarefa.

    O nome "compilador" é usado principalmente para os programas que traduzem o código fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível (por exemplo, Assembly ou código de máquina). Contudo alguns autores citam exemplos de compiladores que traduzem para linguagens de alto nível como C. Para alguns autores um programa que faz uma tradução entre linguagens de alto nível é normalmente chamado um tradutor, filtro ou conversor de linguagem. Um programa que traduz uma linguagem de programação de baixo nível para uma linguagem de programação de alto nível é um descompilador. Um programa que faz uma tradução entre uma linguagem de montagem e o código de máquina é denominado montador (assembler). Um programa que faz uma tradução entre o código de máquina e uma linguagem de montagem é denominado desmontador (disassembler). Se o programa compilado pode ser executado em um computador cuja CPU ou sistema operacional é diferente daquele em que o compilador é executado, o compilador é conhecido como um compilador cruzado.

     

     

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

  • Rapaz...como que esse gabarito pode estar certo? O código-fonte passa pelo compilador que gera o código em linguagem de montagem (Assembly). Este sim, passar pelo montador pra poder gerar a linguagem de máquina (simplificando). Mas dizer que do compilador sai a linguagem de máquina (e ainda binária). Tá doido.

  • Rafael, o compilador pode sim gerar um binário a partir de um código fonte, isso depende da linguagem e do compilador.


ID
1311748
Banca
CESPE / CEBRASPE
Órgão
Polícia Federal
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação aos conceitos e características de compiladores, julgue os itens que se seguem.

Interpretador é um tradutor de linguagem que executa o programa fonte de imediato, em vez de gerar um código objeto a ser executado após o término da tradução, enquanto o compilador recebe um programa fonte e produz programa equivalente na linguagem alvo. No caso da linguagem Java, os processadores combinam compilação e interpretação.

Alternativas
Comentários
  • JVM é uma interpretadora. Ela pega o bytecode .class e traduz para linguagem de máquina.


    Compilador -> .java (codigo fonte) produz um programa equivalente .class (bytecode)


    Java é compilada e depois interpretada



    Na prova eu errei esta questão.


    A frase: "em vez de gerar um código objeto a ser executado após o término da tradução"


    Não fez sentido pra mim na hora mas agora fez.


    A interpretadora só lê o bytecode e transforma em Linguagem de máqina

  • bem, pra começar Interpretdor não vejo como tradutor.

    segundo pesquisei: Tradutores são divididos em dois tipos: montadores(assemblers) e compiladores

    fora isso as definições estão corretas. no caso do interpretador ele falou sobre o interpretador puro.

  • Na verdade o java é compilado para bytes codes e depois o bytecode é interpilado, e acho que é isso que o CESPE tentou dizer

     

    O interpretadores Java e do .NET traduzem o código para instruções nativa on the fly através de um processo chamado JIT(just-in-time compiling). Isso permite com que o interpretador faça otimizações que levam em conta características em execução o que não é possível com um compilador C por exemplo. Por esse motivo em alguns cenários o Java consegue ser mais rápido que Assembly, C,C++,Pascal, Delphi, Fortran, etc... Isso acontece principalmente quando temos programas compilados para versões antigas da arquitetura x86, como por exemplo i386, e que são executados em processadores mais modernos, que possuem instruções mais poderosas.

    Agora quanto a questão tive que abstrair o que o CESPE disse com processadores na frase "os processadores combinam compilação e interpretação"

  • Compilador não produz programa, gera o o código na linguagem de montagem. Quem gera programa é o ligador ou linkeditor. 

  • Gabarito Certo

    Compilador:

    Compilador é um programa ou um grupo de programas que escrito por uma linguagem (esta sendo necessária de compilação para sua execução) ao ser compilado gera outro código que é interpretado pelo computador. Este código compilado é chamado de código objeto, podendo ser um arquivo executável que é reproduzido em um sistema operacional, por exemplo. Este tipo de tradutor é um dos mais utilizados. 

    Os compiladores analisam o código em três partes, de forma sintática ou hierárquica, análise léxica ou linear e anâlise semântica.

    Alguns compiladores contam com um pré-processamento. Este pré-processamento é responsável por modificar o código-fonte conforme necessidades que o compilador identifique que sejam necessárias, por exemplo, otimização de código.

     

    Interpretador:

    O interpretador ao contrário do compilador roda o código-fonte escrito como sendo o código objeto, ele traduz o programa linha a linha, o programa vai sendo utilizado na medida em que vai sendo traduzido. Cada execução do programa precisa ser novamente traduzido e interpretado.

    O interpretador analisa sintaticamente e semanticamente o código, se estas duas etapas forem realizadas e executadas de forma correta o código está pronto para funcionar. 

     

     

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

  • Na verdade em Java o compilador gera o código-objeto que é o Bytecode, esse por sua vez é lido em qualquer maquina mas em cada maquina tem um Interpretador do Bytecode no seu sistema. Ou seja o Interpretador compila e interpreta o bytecode.


ID
1311751
Banca
CESPE / CEBRASPE
Órgão
Polícia Federal
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação aos conceitos e características de compiladores, julgue os itens que se seguem.

Considere a gramática string  string + string → string – string |0|1|2|3|4|5|6|7|8|9 e a string como um único nó não terminal, que pode ser um dígito ou uma sentença. Nessa situação, a expressão 10 – 4 + 3 possibilita criar duas árvores de derivação distintas.

Alternativas
Comentários
  • Gabarito Certo

    Explicação da CESPE:
    "Uma gramática pode ter mais de uma árvore de uma árvore de derivação gerando determinada cadeia de terminais. Quando uma gramática permite esta característica ela é dita ambígua. A gramática apresentada neste item é ambígua porque permite gerar duas árvores de derivação distintas. Mais informações podem ser obtidas em Alfred V. Aho. Compiladores: princípios, técnicas e ferramentas. São Paulo. Pearson Addilson-Wesley, 2008. Pág 30. Uma árvore: (10 -4 ) + 3 e a outra: 10 - (4 + 3)"

     

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

  • Claramente, essa questão está com o gabarito errado, justificativa sem sentido do CESPE

    http://www.itnerante.com.br/forum/topics/quest-o-compiladores-pcf-2013?commentId=1867568%3AComment%3A403299&xg_source=activity

  • Gabarito: Certo

    1ª ÁRVORE:

                  expr
                 /       \

               /           \

        expr      -      expr

                            /  +  \

          10     -      4  +   3

     

    2ª ÁRVORE:

                  expr
                 /       \

               /           \

        expr      +      expr

       /  -  \

    10  -  4      +        3

     

    Fonte:

    Esse exemplo está bem próximo ao exemplo desenhado na página 15 desta apresentação: 

    http://www.joinville.udesc.br/portal/professores/damiani/materiais/Compiladores_v2.pdf

  • o Gabarito da questão deve ser considerado errado, pois com essa gramática não é possível gerar numeros de dois dígitos (10 por exemplo), pois está faltanto a transição string -> stringstring


ID
1389505
Banca
CESPE / CEBRASPE
Órgão
SEGESP-AL
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A respeito de softwares básicos e aplicativos, julgue o item subsecutivo.

O interpretador é considerado um tradutor que não gera código-objeto, mas que, diferentemente do compilador, traduz o programa linha a linha, ou seja, o programa é executado à medida que é traduzido.

Alternativas
Comentários
  • A principal diferenaça entre INTERPETRADOR e TRADUTOR, é que o último converte o código principal em um código intermediário.

  • O PROGRAMA É EXECUTADO À MEDIDA QUE É TRADUZIDO

    Não seria É EXECUTADO À MEDIDA QUE É INTERPRETADO?

  • Gabarito Certo

    Interpretadores são programas de computador que leem um código fonte de uma linguagem de programação interpretada e o converte em código executável. Seu funcionamento pode variar de acordo com a implementação. Em alguns casos, o interpretador lê o código fonte linha a linha e o converte em código objeto (ou bytecode) à medida que o executa, em outros casos, converte o código fonte por inteiro e depois o executa.

    Na verdade, em princípio, pode-se implementar compiladores e interpretadores para qualquer linguagem de programação. Mas, dependendo da necessidade, pode ser melhor criar um interpretador ou um compilador.

     

    Exemplos de linguagens de programação interpretada

    BASIC

    Bash

    Perl

    PHP

    Python

    Euphoria

    Forth

    JavaScript

    Logo

    Lisp

    Lua

    MUMPS

    Ruby

    Haskell

    Progress 4G

     

     

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


ID
1419412
Banca
FCC
Órgão
TCE-GO
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Compiladores, montadores e ligadores são softwares que convertem programas de um formato de código (entrada) para um mais próximo ao formato executável compreendido pela máquina (saída). Os ligadores geram como saída

Alternativas
Comentários
  • Bahhh, acertei, mas vamos lá... não sei explicar muito bem, meu raciocínio foi meio por eliminação


    o compilador gera bytecode, então eliminamos a letra C

    Também podemos eliminar a letra E, pois isso é o bytecode.


    Então sobrou a C

  • A Ordem é esta :

    Código Fonte ==> Compilador ==> Programa Assembly ==> Montador ==> Código Objeto ==> Ligador ==> Módulo de Carregamento ==> Carregador ==> código executável.



    []'s
  • https://www.goconqr.com/pt/p/3677492

  • Gabarito D

    Ligadores, ou “linkers”, são programas especiais que recebem como entrada os arquivos objeto correspondentes a estes arquivos e geram como saída o programa final em linguagem de máquina.

     

     

    Um linker realiza, então, quatro tarefas básicas:

    1.     Determina as posições de memória para os trechos de código de cada módulo que compõe o programa sendo “linkado”

    2.     Resolve as referências entre os arquivos

    3.     Procura nas bibliotecas (libraries), indicadas pelo programador, as rotinas usadas nos fontes de cada módulo

    4.     Indica ao programador quais são os labels que não foram resolvidos (não tenham correspondente em nenhum módulo ou library indicados)

     

    Assim como os arquivos objeto, os programas executáveis gerados por linkers são divididos em seções. Na verdade, as seções são tipicamente as mesmas presentes nos arquivos objeto, exceto que, neste caso, não há símbolos não resolvidos.

     

     

     

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

     

     

     

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


ID
1550050
Banca
FGV
Órgão
TCE-SE
Ano
2015
Provas
Disciplina
Arquitetura de Computadores
Assuntos

O módulo de análise léxica de um compilador tem por objetivo:

Alternativas
Comentários
  • Análise léxica é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador) e produzir uma seqüência de símbolos chamado "símbolos léxicos" (lexical tokens), ou somente "símbolos" (tokens), que podem ser manipulados mais facilmente por um parser (leitor de saída).


    Análise Léxica é a forma de verificar determinado alfabeto. Quando analisamos uma palavra, podemos definir através da análise léxica se existe ou não algum caractere que não faz parte do nosso alfabeto, ou um alfabeto inventado por nós. O analisador léxico é a primeira etapa de um compilador, logo após virá a análise sintática.


    fonte: https://pt.wikipedia.org/wiki/An%C3%A1lise_l%C3%A9xica

  • As fases do processo de compilação são duas:


    - Análise: Léxica (tabela de símbolos) / Sintática (árvore sintática) / Semântica (incoerências semânticas)

    - Síntese: Geração de código intermediário / Otimização do código / Geração do código

  • a) análise semântica
    b) CORRETA
    c) análise
    d) análise sintática
    e) análise semântica

  • Questão (Q830228) repedita em 2018. Por isso a importância de fazer mts questões, inclusive as antigas.

  • Gabarito B

    Primeiro passo do front-end: reconhecer tokens
    • Tokens são as palavras do programa.
    • O analisador léxico transforma o programa de uma sequência de caracteres
    sem nenhuma estrutura para uma sequência de tokens.

     

     

     

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


ID
1560445
Banca
Marinha
Órgão
CAP
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Qual é o utilitário responsável por gerar, a partir de um programa escrito em uma linguagem de alto nível, um programa em linguagem de máquina não executável chamado de módulo-objeto?

Alternativas
Comentários
  • Compilador
    É o programa que converte o programa feito pelo programador em linguagem de máquina.

    O compilador traduz um programa escrito em uma linguagem de alto nível em um programa-objeto não executável; também chamado de módulo-objeto.

     

    O editor de ligação (também chamado de linker ou de ligador) gera um programa executável a partir de um ou mais módulos-objetos para uma plataforma específica.

     

    Também temos outro sujeito: interpretador. Ele é uma instância de hardware ou software que e executa diretamente as instruções apresentadas.

    Durante uma execução, o interpretador lê cada instrução a partir de um programa-fonte escrito em linguagem de alto nível e executa-a imediatamente.

    São exemplos de linguagens interpretadas: BASIC, Perl, PHP, Python, JavaScript, Lisp, Ruby, etc.

     

    Fonte: http://www.itnerante.com.br/profiles/blogs/organiza-o-e-arquitetura-de-computadores-montadores-compiladores

  • a) Interpretador - Não gera código-objeto. Ele traduz cada instrução e executa diretamente.

    b) Depurador - É um dos estágios do desenvolvimento. Permite acompanhar toda execução a fim de achar erros de lógica.

    c) Loader - Carrega na RAM um programa a ser executado.

    d) Linker - Gera, a partir de um ou mais módulos-objeto, um único programa executável.

    e) Compilador - Tipo de tradutor que gera um módulo-objeto a partir de um programa escrito em linguagem de alto nível.

    Gabarito E

    Fonte: Arquitetura de SO - Maia - Cap 2

    @papirobizurado

  • Interpretador – Processador que executa cada expressão do programa diretamente sem ter que transformar o programa inteiro em uma unidade de execução.Tradutor que não gera módulo-objeto chamado de módulo-objeto.

     

    Depurador - permite ao usuário acompanhar toda a execução de um programa a fim de detectar erros na sua lógica.

     

    Loader ou carregador - responsável por carregar na MP um programa para ser executado. Transfere o programa da memória secundária para a MP e inicia sua execução.

     

    Linker - responsável por gerar um único programa executável.

     

     


     

  • Então, o código objeto somente é gerado pelo compilador. No caso, para ser executável, o código objeto (ou módulo objeto) precisa, ainda, ser linkado com um programa completo, certo?


ID
1560529
Banca
Marinha
Órgão
CAP
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação aos tradutores de linguagem de programação,assinale a opção correta.

Alternativas
Comentários
  • D) Os compiladores primeiro convertem o programa inteiro em linguagem de máquina para depois executá-lo no computador.



ID
1561492
Banca
Marinha
Órgão
Quadro Complementar
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação ao analisador sintático, assinale a opção INCORRETA.

Alternativas
Comentários
  • O gabarito é a letra D.

     

    Na verdade, os erros mencionados são léxicos, decorrentes da primeira etapa de análise. 


ID
1561525
Banca
Marinha
Órgão
Quadro Complementar
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação à Análise Léxica de um compilador, como ê denominado o termo que é constituído por um nome e um valor de atributo opcional, sendo que esse nome é um símbolo abstrato que representa um tipo de unidade léxica, por exemplo, uma palavra-chave em particular, ou uma seqüência de caracteres da entrada que denota um identificador?

Alternativas
Comentários
  • A função do analisador léxico, também denominado scanner, é ler o código fonte, caracter a caracter, buscando a separação e identificação dos elementos componentes do programa fonte, denominados símbolos léxicos ou tokens.


ID
1561543
Banca
Marinha
Órgão
Quadro Complementar
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação aos compiladores, assinale a opção que apresenta as três principais tarefas que compõem um gerador de código.

Alternativas
Comentários
  • O gabarito é a letra B.

     

    O gerador de código é composto por três tarefas principais:

     

    Seleção de instruções: escolhe instruções apropriadas da arquitetura alvo.

    Alocação e atribuição de registradores: define os valores dos registrados e quais registradores devem ser utilizados.

    Escalonamento de instrução: decide a ordem em que as instruções devem ser escalonadas.
     


ID
1561564
Banca
Marinha
Órgão
Quadro Complementar
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Correlacione as fases de um compilador às suas respectivas definições e assinale a opção que apresenta a seqüência correta correta.


FASES


I - Análise Léxica

II - Análise Sintática

III- Análise Semântica

IV - Geração de Código Intermediário

V - Otimização de Código

VI - Gerenciamento da tabela de símbolos


DEFINIÇÕES


( ) Realiza a verificação de tipo,onde o compilador verifica se cada operador possui operandos compatíveis.

( ) Independente das arquiteturas de máquina faz algumas transformações no código intermediário com o objetivo de produzir um código objeto melhor .

( ) Utiliza os primeiros componentes dos tokens produzidos pela fase anterior para criar uma representação intermediária do tipo árvore, que mostra a estrutura gramatical da seqüência de tokes.

( ) Responsável por ler o fluxo de caracteres que compõem o programa fonte e por agrupá-los em seqüências significativas, chamadas lexamas.

( ) Gera uma representação intermediária explícita de baixo nível ou do tipo linguagem de máquina, que pode significar um programa para uma máquina abstrata. 


Alternativas
Comentários

  • Análise Semântica - Realiza a verificação de tipo,onde o compilador verifica se cada operador possui operandos compatíveis.

    Otimização de Código - Independente das arquiteturas de máquina faz algumas transformações no código intermediário com o objetivo de produzir um código objeto melhor .

     Análise Sintática - Utiliza os primeiros componentes dos tokens produzidos pela fase anterior para criar uma representação intermediária do tipo árvore, que mostra a estrutura gramatical da seqüência de tokes.

    Análise Léxica - Responsável por ler o fluxo de caracteres que compõem o programa fonte e por agrupá-los em seqüências significativas, chamadas lexamas.

    Gerenciamento da tabela de símbolos - Gera uma representação intermediária explícita de baixo nível ou do tipo linguagem de máquina, que pode significar um programa para uma máquina abstrata. 


ID
1639732
Banca
CESPE / CEBRASPE
Órgão
DPF
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação aos conceitos e características de compiladores, julgue o item que se segue.

Considere a gramática string 6 string + string |string – string |0|1|2|3|4|5|6|7|8|9 e a string como um único nó não terminal, que pode ser um dígito ou uma sentença. Nessa situação, a expressão 10 – 4 + 3 possibilita criar duas árvores de derivação distintas.

Alternativas
Comentários
  • Em uma gramática de livre contexto, uma árvore de derivação é uma árvore composta e os nós interiores da árvore são sempre rotulados por nós não terminais.

    Forma árvores derivada onde:

    - A raiz tem como rótulo o símbolo inicial

    - A cada nó rotulado por um não terminal da forma da gramática corresponde uma regra de gramática.

    - Um nó rotulado por um terminal é sempre uma folha da árvore, e não tem filhos.

    Serão criadas duas árvores distintas seguindo as regras da gramatica e a sequência descrita acima. Gabarito Certo.

     

  • Eu só não consegui entender como essa gramática consegue gerar o número 10. Sendo que nos terminais temos apenas números de 1 dígito e não tem nenhuma regra geradora que permita a repetição de dígitos. 

  • Concordo com o Ewerton, na prática essa gramática não é capaz de gerar o número 10.

    As duas árvores de derivação possíveis ficariam assim:

    i)    -
    10     +
          4   3

     

    ii)    +
        -    3
    10  4

  • Prezados,

    Nesse caso as 2 árvores de derivação distintas seriam (10 - 4) +3 e 10 - ( 4+3 ).
    O cespe se pronunciou sobre os recursos interpostos nessa questão com a seguinte justificativa para manter o gabarito :

    Argumentação: Uma gramática pode ter mais de uma árvore de uma árvore de derivação gerando determinada cadeia de terminais. Quando uma gramática permite esta característica ela é dita ambígua. A gramática apresentada neste item é ambígua porque permite gerar duas árvores de derivação distintas. Mais informações podem ser obtidas em Alfred V. Aho. Compiladores: princípios, técnicas e ferramentas. São Paulo. Pearson Addilson-Wesley, 2008. Pág 30. Uma árvore: (10 -4 ) + 3 e a outra: 10 - (4 + 3)    

    Portanto a questão está correta.

  • Questão retirada diretamente do livro "Compiladores: Princípios, Técnicas e Ferraments" Alfred V. Aho

  • Explicação da CESPE:
    "Uma gramática pode ter mais de uma árvore de uma árvore de derivação gerando determinada cadeia de terminais. Quando uma gramática permite esta característica ela é dita ambígua. A gramática apresentada neste item é ambígua porque permite gerar duas árvores de derivação distintas. Mais informações podem ser obtidas em Alfred V. Aho. Compiladores: princípios, técnicas e ferramentas. São Paulo. Pearson Addilson-Wesley, 2008. Pág 30. Uma árvore: (10 -4 ) + 3 e a outra: 10 - (4 + 3)"

  • Acho que o 10 é permitido porque a questão fala que a string pode ser um digito ou uma sentença, no caso, relacionda ao alfabeto numerico apresentado.


ID
1758598
Banca
FUNRIO
Órgão
IF-BA
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

5     float var;

6     int nr;

.

.

.

15     System.out.print("Entre com o primeiro número: ");

16     nr = input.nextInt();

17     var = nr /3;

18     System.out.printf("O resultado é %8.2f\n", var);

Após compilação e execução, sabe-se que foi digitado o número 10,0 em resposta à execução do comando da linha 15. Nesse caso, o valor numérico impresso na tela, em resposta a execução do comando da linha 18, é

Alternativas
Comentários
  • Simples

    A linha 18 indica que o resultado deverá ter duas casas após a virgula, então a alternativa é C.


ID
1850515
Banca
Marinha
Órgão
CAP
Ano
2015
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação ao processo de compilação, assinale a opção correta.

Alternativas
Comentários
  • Um compilador é um programa de computador (ou um grupo de programas) que, a partir de um código fonte escrito em uma linguagem compilada, cria um programa semanticamente equivalente, porém escrito em outra linguagem, código objeto.Classicamente, um compilador traduz um programa de uma linguagem textual facilmente entendida por um ser humano para uma linguagem de máquina, específica para um processador e sistema operacional. Atualmente, porém, são comuns compiladores que geram código para uma máquina virtual que é, depois, interpretada por um interpretador. Ele é chamado compilador por razões históricas; nos primeiros anos da programação automática, existiam programas que percorriam bibliotecas de sub-rotinas e as reunia, ou compilava, as subrotinas necessárias para executar uma determinada tarefa.

    O nome "compilador" é usado principalmente para os programas que traduzem o código fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível (por exemplo, Assembly ou código de máquina). Contudo alguns autores citam exemplos de compiladores que traduzem para linguagens de alto nível como C. Para alguns autores um programa que faz uma tradução entre linguagens de alto nível é normalmente chamado um tradutor, filtro ou conversor de linguagem. Um programa que traduz uma linguagem de programação de baixo nível para uma linguagem de programação de alto nível é um descompilador.Um programa que faz uma tradução entre uma linguagem de montagem e o código de máquina é denominado montador (assembler). Um programa que faz uma tradução entre o código de máquina e uma linguagem de montagem é denominado desmontador (disassembler). Se o programa compilado pode ser executado em um computador cuja CPU ou sistema operacional é diferente daquele em que o compilador é executado, o compilador é conhecido como um compilador cruzado.

  • Monteiro 2002, O processo de analise de um código escrito em linguagem de alto nivel e sua conversãoo em um programa equivalente (correspondente) é denominado compilação.

     

    A letra E tambem tem uma pegadinha, ali seria o analisador sintatico. São 3 em compilação: Lexico, Sintatico e Semantico.

  • Fisicamente é barrO!!!

  • D - O programa é transformado em um conjunto correspondente de instruções que podem ser fisicamente efetuadas pelo computador.

  • D) O programa é transformado em um conjunto correspondente de instruções que podem ser fisicamente efetuadas pelo computador. Podem, pois robôs, por exemplo, realizam funções FÍSICAS oriundas de algoritmos.

    E) O analisador léxico considera os comentários do programa fonte, por conterem informações úteis para o compilador. O compilador não ignora comentários, mas eles não serão úteis para o compilador.


ID
1870639
Banca
IF-SE
Órgão
IF-SE
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Para que os programas funcionem, eles devem ser traduzidos para o código de máquina (de código fonte para código objeto) e para isso é necessário um tradutor ou um compilador. Em relação à característica de um programa compilado, analise as afirmativas a seguir:

I. O compilador ocupa a memória enquanto se executa o programa.

II. O compilador é carregado na memória apenas na compilação do programa.

III. O programa é traduzido inteiramente uma vez.

IV. O programa precisa ser traduzido cada vez que é rodado.

V. Sua execução é rápida.

VI. O programa acaba por se tornar mais lento.

Está CORRETO o que se afirma em:

Alternativas
Comentários
  • Gabarito D

    Compiladores são programas que recebem como entrada arquivos texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos objeto correspondentes a cada módulo, ou, se todas as bibliotecas e módulos são apresentados como entrada, geram um programa executável diretamente.

     

     

     

     

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


ID
1888453
Banca
FCC
Órgão
TRF - 3ª REGIÃO
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um compilador

Alternativas
Comentários
  • Questão Comentada em >> https://www.youtube.com/watch?v=eWAzkK1ITko

    (Último acesso: 14/02/2017 13:50)

  • De acordo com o Livro "Conceitos de Linguagens de Programação" (9th Edition, Robert W. Sebesta) em seu Capítulo 4 ("Análise Léxica e Sintática" - pag. 191):

    "...Um compilador JIT, o qual traduz código intermediário para código de máquina, é usado em métodos na primeira vez em que eles são chamados. Na prática, um compilador JIT transforma um sistema híbrido em um sistema de compilação adiada."

    Pode ser visto/acessado em:

    https://books.google.com.br/books?id=vPldwBmt-9wC&pg=PA191&lpg=PA191&dq=sistema+de+compila%C3%A7%C3%A3o+adiada&source=bl&ots=e1ReTaZhmg&sig=SivSYQwuF1T3lS3N88L_vgQIMRM&hl=pt-BR&sa=X&ved=0ahUKEwjCs52O9o_SAhXJjJAKHXd3CwYQ6AEIKTAD#v=onepage&q=sistema%20de%20compila%C3%A7%C3%A3o%20adiada&f=false

    (Último acesso: 14/02/2017 13:50)

  • Prezados


    Compilação just-in-time (sob demanda), também conhecida como compilação dinâmica, é uma técnica de interpretação usada para aumentar o desempenho na execução de programas. Esta técnica permite que ambientes de execução (interpretadores e/ou máquinas virtuais) compilem código em tempo de execução para código de máquina real, aumentando a performance por traduzir blocos de código, no lugar de avaliar e executar linha por linha (interpretação de código). 


    Portanto a alternativa correta é a letra B.
  • Compilação JIT (Just In Time): tradução dinâmica (o próprio termo já deixa claro: "na hora"). Transforma um sistema híbrido em um sistema de compilação adiada (compilação de um programa em tempo de execução).

    Segundo a IBM, “o JIT é um componente do ambiente de tempo de execução que melhora o desempenho de aplicativos Java compilando bytecodes para o código de máquina nativo em tempo de execução”.


ID
1892419
Banca
IF-SE
Órgão
IF-SE
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com base na organização e arquitetura de computadores, analise as afirmativas abaixo e assinale a alternativa CORRETA.

I. O conceito de pipeline consiste em dividir a execução da instrução em várias partes, sendo cada uma delas manipulada por unidades dedicadas do hardware que trabalham em paralelo.

II. Os compiladores são programas que recebem como entrada arquivos-texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos-objeto correspondentes a cada módulo.

III. O clock é um circuito oscilador que tem a função de sincronizar e determinar a medida de velocidade de transferência de dados no computador.

Alternativas
Comentários
  • Gabarito incorreto. Os compiladores não geram arquivos-objeto, quem faz isso é o montador!

  • Concordo com o Rafael. Seria correto o item II caso fosse dito que a saída do PROCESSO DE COMPILAÇÃO são arquivos-objeto, já que o processo de compilação inclui a saída do COMPILADOR + MONTADOR.

  • Também achei estranho dizer que o clock determina a medida de velocidade de transferência de dados. Ainda não havia estudado essa característica do clock.

  • Fiquei com a mesma dúvida dos colegas, após pesquisa encontrei este texto a seguir numa apostila da professora Lúcia Ribeiro.

    "Dependendo do tipo do programa-fonte, existem dois tipos distintos de tradutores que geram módulos-objeto: montador e compilador. O montador (assembler) é o utilitário responsável por traduzir um programa-fonte em linguagem de montagem em um programa objeto não executável (módulo-objeto). A linguagem de montagem é particular para cada processador, assim como a linguagem de máquina, o que não permite que programas assembly possam ser portados entre máquinas diferentes. O compilador é o utilitário responsável por gerar, a partir de um programa escrito em uma linguagem de alto nível, um programa em linguagem de máquina não executável. As linguagens de alto nível como Pascal, Cobol e C, não têm nenhuma relação direta com a máquina, ficando essa preocupação exclusivamente com o compilador. Assim, os programas-fonte podem ser portados entre computadores de diversos fabricantes, permitindo o desenvolvimento de aplicações independente do equipamento."

     

    E sobre o clock, vale lembrar que quanto maior o Clock de um processador maior a capacidade de transferencia de dados.

     


ID
1924639
Banca
Marinha
Órgão
Quadro Complementar
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Na compilação, como é denominada a fase de análise de um programa-fonte na qual um fluxo de caracteres constituindo um programa é lido e agrupado em tokens, que são sequências de caracteres tendo um significado coletivo?

Alternativas
Comentários
  • O gabarito é a letra C.

     

    Análise léxica é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador) e produzir uma sequência de símbolos chamado símbolos léxicos (tokens), que podem ser manipulados mais facilmente por um parser (leitor de saída).


ID
1932385
Banca
FCC
Órgão
TRT - 14ª Região (RO e AC)
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A compilação é o processo de tradução de um programa escrito em uma linguagem fonte em um programa equivalente em linguagem de máquina. Nesse processo, o programa fonte normalmente passa pelas fases:

I. Identificação de sequências de caracteres de entrada e produção de uma sequência de elementos de saída, os tokens. Nesta fase, verifica-se se cada caractere do programa fonte pertence ao alfabeto da linguagem, identificando os tokens e desprezando comentários e espaços em branco. Os tokens constituem classes de símbolos, tais como palavras reservadas, delimitadores, identificadores etc.

II. Identificação de sequências de símbolos que constituem estruturas como expressões e comandos, através de uma varredura, ou parsing, da representação interna do programa fonte, produzindo uma estrutura em árvore, chamada árvore de derivação.

III. Verificação das estruturas quanto ao sentido, ou seja, se o programa não possui erros de significado. Por exemplo, verifica se um identificador declarado como variável é utilizado como tal, se existe compatibilidade entre operandos e operadores em expressões etc.

Os itens I, II e III referem-se, correta e respectivamente, às fases

Alternativas
Comentários
  • Análise léxica envolve a identificação de símbolos - tokens.

    Análise sintática tem a ver com a montagem das estruturas que constituem as expressões e comandos (lembrar do erro de sintaxe se faltar uma chave para o if ou for no C)

    Análise semântica, por sua vez, tem o objetivo de ligar as estruturas dando sentido ao programa.

    Estas estruturas de compilação têm relação estreita com a gramática da língua portuguesa. É uma dica para tentar matar este tipo de questão sem precisar decorar a funcionalidade de cada estrutura descrita no item.

    R.: alternativa A

  • Gabarito A

    Análise Léxica

    O analisador léxico transforma o programa de uma sequência de caracteres sem nenhuma estrutura para uma sequência de tokens.

    Normalmente o analisador léxico para uma linguagem é produzido mecanicamente a partir uma especificação léxica definida por expressões
    regulares.
    Um gerador de analisador léxico é um compilador para a sua linguagem de especificação.

     

    Análise Sintática

    Também é comum se gerar mecanicamente um analisador sintático a partir de uma especificação da sintaxe da linguagem, sua gramática Novamente, um programa gerador de analisadores sintáticos é apenas outro compilador.
    O resultado da análise sintática é uma árvore representando a estrutura do programa.

     

    Análise Semântica. 

    Verificação das estruturas quanto ao sentido, ou seja, se o programa não possui erros de significado. Por exemplo, verifica se um identificador declarado como variável é utilizado como tal, se existe compatibilidade entre operandos e operadores em expressões etc.

    Agora que sabemos a estrutura do programa, podemos tentar entender seu significado para detectar erros.
    • A análise semântica também procura eliminar ambiguidades em relação aos termos do programa.
    • Ex: int x = 0; while(x < 10) { int x = 20; print(x); }
    • Quando a linguagem permite, a análise semântica também detecta inconsistências entre os tipos das variáveis e seus usos.
    • Ex: int x = 0; if(x < 5) x = “foo”;

     

     

     

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

     

  • Numa questão dessa, não é preciso nem ler os itens I , II e III, tem que ir direto nas alternativas e acertar. Caso contrário, você já está fora.

  • Égua do Chute Certeiro! kkkkkkkkkkkkkkkkk


ID
1952281
Banca
IADES
Órgão
PC-DF
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Conhecer as metodologias utilizadas por um compilador para a análise e síntese de um programa de computador pode ser muito útil para entender como um software funciona por dentro. Assim, atividades como a engenharia reversa podem ser mais facilmente entendidas e realizadas. A esse respeito, no que se refere aos programas de computadores e às fases de um compilador, assinale a alternativa correta.

Alternativas
Comentários
  • Entendo que o gabarito se dê pois no momento da compilação são feitas 3 análises, mais precisamente análise sintática, léxica e semantica. Se duas foram efetuadas, logo, a  maioria dos erros foram detectadas..

  • Qual o erro da C?

  • Mas a analise semantica, não pode ser detectavel na maioria dos casos pelo compilar. O mesmo faz análise sintática, da construção de termos que condizem com a linguagem na qual foi construída. Ainda acho que a resposta correta deveria ser a letra C.

  • O Erro da letra C é o final da assertiva: Durante a análise sintática do programa fonte, o compilador procura encontrar as construções que possuam a estrutura sintática correta, sem se preocupar com o significado da operação envolvida

    Claro que há uma preocupação com o significado da operação. Por exemplo: x =+ 10; Ao compilar essa linha de código, na análise sintática ele vai perceber que o "+" está invertido com o "=". Assim que ele montar a árvore sintática vai perceber a precedência durante a "OPERAÇÃO" e vai parar o processo de compilação acusando o erro. Lembrando o seguinte: o processo de compilação é dividido nas fases de análise e síntese. A fase final é a síntese. A intermediária é a análise que se divide em: léxica (tokes), sintática e semântica. 
    Na análise sintática ocorre a identificação de sequências de símbolos que constituem estruturas como expressões e comandos, através de uma varredura, ou parsing, da representação interna do programa fonte, produzindo uma estrutura em árvore, chamada árvore de derivação.

  • Letra A.

     

    Note abaixo uma questão envolvendo a identificação de um erro de análise sintática:

    CESPE – INMETRO (2010): Pesquisador
    Considere que, em uma linguagem de programação hipotética, um comando condicional IF exija o uso de THEN, representando a clausula então. Nesse caso, se a instrução THEN não for usada no código fonte, uma resposta do compilador na identificação do erro de programação estará
    a) no nível léxico.
    b) no nível sintático.
    c) no nível semântico.
    d) no nível lógico.
    e) nos níveis sintático e semântico, ao mesmo tempo.

    *** Na semânticas são detectados, por exemplo, os conflitos entre tipos, a ausência de declarações de variáveis, funções e procedimentos.

     

    Letra B = é a fase de síntese que constrói o alvo desejado.
    Letra C = ele se preocupa com a operação sim, mas não se preocupa com as variáveis envolvidas e aqui é onde entra a análise semântica.
    Letra D = análise gramatical = análise sintática
    Letra E = A fase final é a "fase de geração do código"

     

  • A) CORRETA: "As fases de análise sintática e semântica tratam usualmente de uma ampla fatia dos erros detectáveis pelo compilador".

    Fonte: http://professor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/17389/material/Texto_Parte1.pdf


ID
1965322
Banca
Aeronáutica
Órgão
EEAR
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

O computador executa os programas dos usuários conforme as suas instruções que estão armazenadas em sua memória. Essas instruções precisam estar sob forma de sequências de bits (0 e 1). Sobre compiladores, interpretadores e montadores, marque a alternativa correta.

Alternativas

ID
2007802
Banca
Aeronáutica
Órgão
EEAR
Ano
2012
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considerando o funcionamento de um computador, marque F para falso ou V para verdadeiro e, a seguir, assinale a alternativa que apresenta a sequência correta.

( ) O tempo para execução do programa compilado é menor do que o tempo para execução do programa interpretado.

( ) A área de memória requerida para operar com o programa que está sendo interpretado é maior que a requerida pela compilação.

( ) Normalmente, durante a compilação, são detectados erros no programa.

Alternativas
Comentários
  • C

    V - F - V 


ID
2034433
Banca
CESPE / CEBRASPE
Órgão
TCE-PA
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considerando os conceitos de bibliotecas, julgue o item subsequente.

Na compilação de um programa que chama uma biblioteca compartilhada, todo o código da biblioteca é copiado e inserido dentro do binário final.

Alternativas
Comentários
  • Biblioteca estática todo código é copiado para o binário final
    Biblioteca compartilhada os códigos compartilham a mesma posição de memória onde está armazenada a biblioteca, com isso, eles apenas apontam para a posição de memória ao final do binário

  • O processo descrito é o de LINKEDIÇÃO. O correto seria:
    Na linkedição de um programa que chama uma biblioteca compartilhada, todo o código da biblioteca é copiado e inserido dentro do binário final.

    O processo de compilação apenas faz as referências, mas o processo de linkedição é quem tras de fato os arquivos referenciados para dentro do arquivo final que pode ser um .exe (linkedição estática, onde tudo já está lá e não há qualquer alteração em link a posterior) ou um .com (nesse caso ocorre a linkedição dinâmica, onde são feitas referências a bibliotecas externas ao arquivo executável).

    Espero ter ajudado.

  • Acredito que o erro esteja em "copiar todo código da biblioteca". Já pensou copiar tudo? Existem bibliotecas que possuem milhares de métodos. Ele deve copiar apenas o que é usado da biblioteca.


ID
2034439
Banca
CESPE / CEBRASPE
Órgão
TCE-PA
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

No que se refere à compilação e interpretação de programas, julgue o próximo item.

Os interpretadores, em vez de produzirem um programa objeto, fruto da tradução, executam diretamente as operações especificadas no código-fonte.

Alternativas
Comentários
  • Correto. Os interpretadores processam/executam um comando de cada vez. Já os compiladores primeiramente lêem todo o arquivo do código fonte e depois produz uma sequência binária.

  • esse "executam diretamente" não é muito pesado não?

  • Interpretador é outro tipo comum de processador de linguagem, mas em vez de produzir um programa objeto como resultado da tradução, um interpretador executa diretamente as operações especificadas no programa fonte sobre as entradas fornecidas pelo usuário.


ID
2034442
Banca
CESPE / CEBRASPE
Órgão
TCE-PA
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

No que se refere à compilação e interpretação de programas, julgue o próximo item.

Compilador é um utilitário responsável por executar um programa objeto diretamente na máquina.

Alternativas
Comentários
  • Um compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível para um programa equivalente em código de máquina para um processador.

    Em geral, um compilador não produz diretamente o código de máquina mas sim um programa em linguagem simbólica (assembly) semanticamente equivalente ao programa em linguagem de alto nível. O programa em linguagem simbólica é então traduzido para o programa em linguagem de máquina através de montadores.

    Resumindo: o compilador transforma a linguagem (humana) em linguagem máquina.

  • Entao Nobre, ele nao faz a "execução" do programa diretamente nao maquina. O gabarito está como "ERRADO"

  • O que ocorre não é a execução do programa objeto e sim a sua criação. O compilador gera a partir de códigos de alto nível como uma .java (digamos que estamos desenvolvendo aplicativos java) e converte-os em código objeto, ou seja, os chamados .class. Daqui em diante teremos o papel do Interpretador que em tempo de execução vai "traduzindo" o que contém no .class por meio da JVM (Java Virtual Machine) dentro de um ambiente virtual Java (JRE).

    Logo: uma coisa é o interpretador. Outra coisa é o compilador. Lembrando sempre que compilador gera algo. Interpretador não gera nada.

  • Compilador é um utilitário responsável por executar um programa objeto diretamente na máquina.

     O compilador é considerado um programa base, em que apresenta duas fases: Análise e síntese, neste há a criação do código e não a execução do programa.

     

     

  • Gabarito Errado

    Seria o interpretador.

     

     

     

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


ID
2083372
Banca
Marinha
Órgão
CAP
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Como se denomina o programa que realiza a análise de um outro programa escrito em linguagem de alto nível, o programa-fonte, e faz a sua conversão (tradução) em um programa de linguagem binária de máquina, denominado programa-objeto ?

Alternativas
Comentários
  • A - Compilador . 

  • Falou em conversão para módulo-objeto é compilador.

    Letra A)

  • Compilador

    - Traduz programas escritos em uma linguagem de programação de alto nível em código de máquina.

    - O código-objeto não pode ser executado diretamente no SO.

    - O compilador precisa ser adequado à LP e também à arquitetura de hardware onde o programa será executado.

    - Toma todo o código fonte e o converte em código de máquina gerando o código-objeto;

    Interpretador

    O processo de execução do código fonte é feita, instrução por instrução, sem a geração de um programa equivalente em linguagem de máquina.

    Cada comando em alto nível é examinado, convertido para código binário e executado imediatamente.

    Converte cada instrução do código-fonte em código-binário;

    Alternativa: A


ID
2091811
Banca
CETRO
Órgão
AMAZUL
Ano
2015
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Na compilação de um programa, assinale a alternativa que apresenta a etapa/ fase em que ocorre a geração de um programa executável.

Alternativas
Comentários
  • Ligadores / linkeditores - Programa que liga objetos gerados por um compilador ou montador formando o executável. É ele quem gera o executável e não o compilador.

     

    FONTE: MM - Prof. Vilar

     

    Gab. C

  • Gabarito C

    Ligadores, ou “linkers”, são programas especiais que recebem como entrada os arquivos objeto correspondentes a estes arquivos e geram como saída o programa final em linguagem de máquina.

     

     

    Um linker realiza, então, quatro tarefas básicas:

    1.     Determina as posições de memória para os trechos de código de cada módulo que compõe o programa sendo “linkado”

    2.     Resolve as referências entre os arquivos

    3.     Procura nas bibliotecas (libraries), indicadas pelo programador, as rotinas usadas nos fontes de cada módulo

    4.     Indica ao programador quais são os labels que não foram resolvidos (não tenham correspondente em nenhum módulo ou library indicados)

     

    Assim como os arquivos objeto, os programas executáveis gerados por linkers são divididos em seções. Na verdade, as seções são tipicamente as mesmas presentes nos arquivos objeto, exceto que, neste caso, não há símbolos não resolvidos.

     

     

     

     

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

  • O processo de linkedição, em geral, é um processo de dois passos. O ligador recebe como entrada um conjunto de arquivos objeto, bibliotecas e parâmetros na linha de controle e produz como resultado um arquivo objeto de saída, que gera o programa executável.

  • GABARITO C

    Compilador: Converte o código fonte completo em código objeto ( linguagem de máquina ) não executável;

    • Linkeditor: gera, a partir de um ou mais módulos-objeto, um único programa executável.

    Interpretador: converte e executa o código-fonte linha a linha;

    Tradução: Consiste no processo completo em que o código-fonte é convertido em linguagem de máquina e executado;


ID
2102557
Banca
FCC
Órgão
Prefeitura de Teresina - PI
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considere que um Analista de Sistemas da PRODATER tem as seguintes informações:
− O computador possui 4GB de memória RAM.
− O compilador da linguagem de programação A utiliza 2 bytes para armazenar um número inteiro.
− O compilador da linguagem de programação B utiliza 4 bytes para armazenar um número inteiro.
Diante destas informações, é correto afirmar que 

Alternativas
Comentários
  • A) Errada: seria preciso 32 bits para endereçar 4GB

    B) Errada: FFFFFF só consegue endereçar 24bits de memória.

    C) Errada: com uma variável de 2 bytes só é possível chegar a 65.536 decimal (positivo)

    D) Correta 

    E) Errada: se somar os valores será preciso 17 bits para representar o resultado

  • Alguém poderia por gentileza compartilhar uma bibliografia para resolução desta questão? Obrigada

  • QUESTÃO TRABALHOSA, EU PESSOALMENTE,  LEVARIA UM BOM TEMPO PRA RESOLVER.

    MAS VAMOS AOS CÁLCULOS:

    O computador possui 4GB de memória RAM. (4GB = 4.294.967.296 bits)
    − O compilador da linguagem de programação A utiliza 2 bytes para armazenar um número inteiro.(2 bytes = (2^16)������������� = 65.536 )
    − O compilador da linguagem de programação B utiliza 4 bytes para armazenar um número inteiro.(4 bytes = (2^32)������������� = 65536 * 65536 =  4.294.967.296 )
    a) são necessários 30 bits para endereçar qualquer posição da memória RAM.(2^30 = 1.073.741.824 bits (1GB) < 4GB).necessário mais de 30 bits para endereçar 4GB.ERRADA!
    b) são necessários 6 dígitos em hexadecimal para endereçar qualquer posição da memória RAM.(2*16^0 + 2*16^1 + 2*16^2 + 2*16^3 + 2*16^4 + 2*16^5 < 4GB).logo, são necessários mais de 6 digitos.ERRADA!
    c) uma variável inteira da linguagem de programação A consegue armazenar o número decimal 100000
    ou o número decimal −100000.(100.000>65.536, logo não é possíveil armazenar).ERRADA!
    d) uma variável inteira da linguagem de programação B consegue armazenar o número decimal
    10000000 ou o número decimal -10000000.(10.000.000 < 4.294.967.296, logo é possível armazenar).CORRETA! 
    e) uma variável inteira da linguagem de programação A consegue armazenar o número binário
    1111111100000000 somado com o binário 1000000011111111.(não armazena porque a variável A armazena 16 bits e o resultado da soma é de 17 bits).

         1111111100000000  
      +1000000011111111
       10111111111111111
    REGRA DA SOMA: 0 + 0 = 0, 0 + 1 = 1, 1+ 0 = 1, 1 + 1 = 0 *TRANSPORTE DE 1.

    É ISSO, ESPERO TER AJUDADO!

     

  • nossa q tempao de demora para resolver essa!

  • Não é tão trabalhosa assim.

    a) são necessários 30 bits para endereçar qualquer posição da memória RAM. (32 bits)

     

    b) são necessários 6 dígitos em hexadecimal para endereçar qualquer posição da memória RAM. (1 dígito em hexadecimal = 4 bits; Pra endereçar 4GB, que possui 2^32 endereços, são necessários 32 bits; 6 dígitos hexadecimais são 24 bits (4x6); ou seja, a quantidade informada é insuficiente para referenciar todos os endereços da memória)

     

    c) uma variável inteira da linguagem de programação A consegue armazenar o número decimal 100000 ou o número decimal −100000. (2 bytes são 2 * 8 bits = 16 bits. Para armazenar inteiros negativos, separa-se 1 bit para o sinal, sobrando 15 bits. 2^15 = 32768 valores que podem ser representados. Essa quantidade é insuficiente para armazenar  100000 números positivos ou negativos).

     

    e) uma variável inteira da linguagem de programação A consegue armazenar o número binário 1111111100000000 somado com o binário 1000000011111111 (4 bytes = 4 * 8 = 32 bits. Os dois números possuem 16 bits, porém a soma dos dois resulta em um número binário maior que 32 bits. Podemos perceber isso porque os dois bits mais à esquerda são 1, o que quer dizer que independentemente do resto da soma, será necessário mais 1 bit pra guardar o valor de 1 + 1).

  • Formas fáceis de pensar:

    a) errada: são 32 para 4gb

    b) errada: 1 dígito de hexa 4 bits, 6x4=24 bits, é pouco pra 4gb

    c) errada: 2 bytes = 16 bits que são 65536, bem inferior ao 100000  da questão

    d) correta: 4 bytes = é mais de 4 bilhões, que cabe tranquilamente o 10000000 

    e) errada: vai estourar, vai precisar de 1 bit a mais

  • Questão que o candidato tem é que chutar. pois tudo que a banca gosta é que você perca tempo.


ID
2245717
Banca
COPEVE-UFAL
Órgão
UFAL
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considere as afirmativas:

I. cria o código objeto traduzindo as instruções da linguagem de montagem (assembly) para código de máquina;

II. recebe como entrada um conjunto de arquivos objetos e bibliotecas, e produz como resultado um arquivo objeto de saída;

III. traduz um programa descrito em uma linguagem de alto nível para um programa em linguagem simbólica ou linguagem de máquina;

IV. recebe uma instrução do programa fonte, converte-a em linguagem de máquina e ordena ao computador que execute esta instrução.

Nessa ordem, os itens de I a IV referem-se a

Alternativas
Comentários
  • Montador: cria o código objeto traduzindo as instruções da linguagem de montagem (assembly) para código de máquina;

    Ligador: recebe como entrada um conjunto de arquivos objetos e bibliotecas, e produz como resultado um arquivo objeto de saída;

    Compilador. traduz um programa descrito em uma linguagem de alto nível para um programa em linguagem simbólica ou linguagem de máquina;

    Interpretador: recebe uma instrução do programa fonte, converte-a em linguagem de máquina e ordena ao computador que execute esta instrução.

  • Gabarito D

    Montador:

    Os montadores, ou “assemblers”, montam um programa em linguagem de máquina a partir de sua versão em linguagem de montagem, ou linguagem “assembly”. Eles:

    1.     Acham um endereço inicial para o programa

    2.     Convertem pseudo-instruções para o conjunto de instruções equivalente

    3.     Convertem macros no conjunto de instruções e dados equivalentes

    4.     Transformam cada parte dos comandos em linguagem assembly em opcode, número de registrador, constante, etc.

    5.     Escrevem o programa em linguagem de máquina em um arquivo com as instruções ordenadas e com os endereços indicados por elas, especificados como labels, já convertidos para números quando possível

     

    Ligador:

    Ligadores, ou “linkers”, são programas especiais que recebem como entrada os arquivos objeto correspondentes a estes arquivos e geram como saída o programa final em linguagem de máquina.

    Um linker realiza, então, quatro tarefas básicas:

    1.     Determina as posições de memória para os trechos de código de cada módulo que compõe o programa sendo “linkado”

    2.     Resolve as referências entre os arquivos

    3.     Procura nas bibliotecas (libraries), indicadas pelo programador, as rotinas usadas nos fontes de cada módulo

    4.     Indica ao programador quais são os labels que não foram resolvidos (não tenham correspondente em nenhum módulo ou library indicados)

     

    Compilador:

    Compiladores são programas que recebem como entrada arquivos texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos objeto correspondentes a cada módulo, ou, se todas as bibliotecas e módulos são apresentados como entrada, geram um programa executável diretamente.

     

    Interpretador:

    Programas interpretadores recebem como entrada arquivos texto contendo programas em linguagem assembly ou linguagem de alto nível, ou arquivos binários com instruções de máquina, e os executam diretamente.

     

    Interpretadores percorrem os programas, a partir de seu ponto de entrada, executando cada comando.

    Algumas vezes, antes de poderem ser interpretados, os programas têm que ser pré-processados. No caso de Java, por exemplo, o programa fonte é transformado em byte-code, em um processo equivalente ao processo de compilação, e posteriormente pode ser interpretado (executado) por uma máquina virtual Java.

    Na verdade, os processadores são interpretadores implementados em hardware!

     

     

     

     

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


ID
2322565
Banca
Exército
Órgão
EsFCEx
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Assinale a alternativa que completa adequadamente as lacunas da frase: “Dois tipos de _________ são fundamentais para os sistemas computacionais modernos:____________ e __________ ”.

Alternativas
Comentários
  • Organização e projeto de computadores de David Patterson:

     

    Existem muitos tipos de softwares de sistemas, mas dois tipos são fundamentais em todos os sistemas computacionais modernos: o sistema operacional e o compilador. Um SO fornece a interface entre o programa de usuário e o hardware e disponibiliza diversos serviços e funções de supervisão. Os compiladores realizam outra função fundamental: a tradução de um programa escrito em uma linguagem de alto nivel em instruções que o hardware possa executar.

  • D

    softwares de sistema - o sistema operacional - o compilador


ID
2402623
Banca
COSEAC
Órgão
UFF
Ano
2017
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Os compiladores e interpretadores são exemplos de:

Alternativas
Comentários
  • GABARITO: D

    Softwares aplicativos 

    ex: word, excel, 

    Softwares utilitários: 

    ex: desfragmentador de disco, 

    firmwares

    ex: Bios 

    Softwares livres

    GNU/LINUX

  • Software Livre: qualquer programa que tem a liberdade de ser usado, copiado, modificado e redistribuído. Opõe-se ao conceito de software proprietário. Pode ser vendido ou disponibilizado gratuitamente. Um caso é o da Red Hat que comercializa o Red Hat Enterprise Linux. A possibilidade de modificações implica na abertura de seu código fonte. A maioria dos softwares livres é licenciada como GNU GPL ou BSD.



    GPL: a Licença Pública Geral GNU acompanha os pacotes distribuídos pelo Projeto GNU (General Public License). É a mais utilizada, sendo adotada pelo Linux. Ela impede que o software seja integrado em um software proprietário e garante os direitos autorais. Não permite que as liberdades originais sejam limitadas, nem que sejam impostas restrições que impeçam a distribuição da mesma forma que foram adquiridos.



    BSD: a licença BSD foi inicialmente utilizada nos softwares da Berkeley Software Distribution. Ela impõe poucas restrições sobre as formas de uso, alterações e redistribuição do software e, por isso, é chamada de copycenter. O programa pode ser vendido e não precisa incluir o código fonte.



    Software em Domínio Público: o autor do software relega a propriedade do programa e este se torna bem comum, ou seja, não possui copyright. Entretanto, o autor pode restringir que modificações sejam feitas. 



    Copyleft: retira barreiras à utilização, difusão e modificação do software, mas impedem a utilização não-autorizada. Ele requer que as alterações sejam livres, passando adiante a liberdade de copiá-lo e modificá-lo novamente. 



    Software proprietário: é aquele cuja cópia, redistribuição ou modificação são proibidos pelo autor em determinado grau. É necessário solicitar permissão ou pagar para utilizar. Pode ser freeware, shareware, trial ou demo.



    Freeware: software proprietário que é disponibilizado gratuitamente, mas não pode ser modificado.



    Shareware: é o software disponibilizado gratuitamente por um período de tempo ou com algumas funções abertas, mas que implica no posterior pagamento pela sua licença. 



    Trial: versão de teste de vários softwares. É disponibilizada algumas funções, geralmente por 30 dias, para que o usuário experimente o programa para saber se ele atende às suas necessidades.



    Demo: versão de demonstração, semelhante ao Trial. É possível usar o programa por um tempo ou com apenas algumas funções disponíveis.



    Software Comercial: é o software desenvolvido com o objetivo de lucrar.



    Open Source: o software de código aberto é aquele que disponibiliza seu código fonte e restringe-se aos termos técnicos da questão. Pode ser livre, ou proprietário. Algumas empresas como IBM, HP, Intel e Nokia investem em software de código aberto.

  • Falaram todos os itens menos o motivo da resposta ser aletra D.

  • Software Básico

    É um conjunto de programas que define o padrão de comportamento do equipamento, tornando-o utilizável, ou seja, são os programas usados para permitir o funcionamento do hardware.


ID
2407066
Banca
Marinha
Órgão
Quadro Técnico
Ano
2014
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Segundo Tanembaum (2007), assinale a opção que define corretamente a compilação de um programa.

Alternativas
Comentários
  • Compilador

    - Traduz programas escritos em uma linguagem de programação de alto nível em código de máquina.

    - O código-objeto não pode ser executado diretamente no SO.

    - O compilador precisa ser adequado à LP e também à arquitetura de hardware onde o programa será executado.

    - Toma todo o código fonte e o converte em código de máquina gerando o código-objeto;

    Vantagem: execução rápida

    Desvantagem: dificuldade para depuração


ID
2431243
Banca
COPEVE-UFAL
Órgão
UFAL
Ano
2016
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Dadas as afirmativas a respeito de compiladores,


I. Um compilador é classificado como just-in-time compiler quando o processo de compilação acontece apenas no momento em que o código é executado. Por essa razão, compiladores do tipo just-in-time compiler não são capazes de fazer otimizações no código final como parte do processo de compilação.

II. O código gerado por um compilador deve, necessariamente, ser semanticamente equivalente ao código fonte original.

III. O processo de compilação é composto por três passos obrigatórios: análise léxica, análise sintática e geração do código final. E, opcionalmente, podem ser executados mais dois passos: análise semântica e otimização de código.

IV. A etapa de análise léxica consiste em analisar o código fonte para produzir símbolos (tokens), que são processados em seguida na etapa de análise sintática, também conhecida como parsing.


verifica-se que estão corretas  

Alternativas
Comentários
  • I - A compilação dinâmica permite otimizações

    https://pt.wikipedia.org/wiki/JIT

    II- Correto, deve ter o mesmo significado

    III- Análise semântica não é opcional

    IV- Correto

     

     

  • Gabarito C

    I - Errada - permite otimizações

    II - Certa

    III - Errada - Quatro grandes fases

    • Análise léxica, análise sintática, análise semântica, otimização e geração de

    Código

    • As duas primeiras cuidam da sintaxe do programa, as duas intermediárias do

    seu significado, e a última da tradução para a linguagem destino

    • As três primeiras fases formam o front-end do compilador, e as duas outras seu

    back-end

    IV - Certa

     

    Vamos na fé !

     

     

     

     

    "Retroceder Nunca Render-se Jamais !"

    Força e Fé !

    Fortuna Audaces Sequitur !


ID
2490691
Banca
FGV
Órgão
IBGE
Ano
2017
Provas
Disciplina
Arquitetura de Computadores
Assuntos

O módulo de análise léxica de um compilador tem por objetivo:

Alternativas
Comentários
  • a)  verificar se o programa-fonte obedece às regras da gramática da linguagem;

    análise sintática ou gramatical

    b)  agrupar coerentemente os caracteres do programa-fonte em tokens

    análise léxica

    c)  gerar o código objeto correspondente à tradução do programa-fonte para alguma forma intermediária de representação;

    fase de análise

    d) construir as árvores sintáticas dos diversos comandos do programa-fonte; 

    análise sintática ou gramatical

    e)  eliminar comandos supérfluos do programa-fonte.

    análise semântica

  • Analise Léxica

    A análise léxica também conhecida como scanner ou leitura é a primeira fase de um processo de compilação e sua função é fazer a leitura do programa fonte, caractere a caractere, agrupar os caracteres em lexemas e produzir uma sequência de símbolos léxicos conhecidos como tokens.

    +

    A sequência de tokens é enviada para ser processada pela analise sintática que é a próxima fase do processo de compilação .

    O analisador léxico deve interagir com a tabela de símbolos inserindo informações de alguns tokens, como por exemplo os identificadores. A nível de implementação a analise léxica normalmente é uma sub-rotina da análise sintática formando um único passo, porem ocorre uma divisão conceitual para simplificar a modularizarão do projeto de um compilador.

    https://johnidm.gitbooks.io/compiladores-para-humanos/content/part1/lexical-analysis.html

  • Questão idêntica (Q516681) repetida em 2015. Por isso a importância de fazer mts questões, inclusive as antigas.

  • Gabarito B

    Na compilação, a análise consiste em três fases:

    Análise léxica, 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.

    Análise sintática, 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

    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 !


ID
2575747
Banca
IESES
Órgão
IGP-SC
Ano
2017
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A descompilação é adotada na engenharia reversa de produtos de software, com o propósito de analisar os códigos-fonte de um sistema para extrair destes a documentação, geralmente ausente ou obsoleta, ou para auxiliar na análise da segurança do sistema, como na checagem de códigos maliciosos embutidos no software. Diante deste contexto, um sistema de descompilação consiste:

Alternativas
Comentários
  • Descompilador é um programa de computador que realiza a operação inversa de um compilador, transformando código objeto em código fonte em uma linguagem de programação de alto nível mais compreensível.

     

     

    Letra D

     

    Fonte: https://pt.wikipedia.org/wiki/Descompilador

  • Gabarito D

    Descompilador é um  que realiza a operação inversa de um , transformando  em . O termo entretanto é mais utilizado para designar programas de computador que traduzem  () em código fonte em uma  (mais compreensível) que, quando novamente compilado, produzirá um programa executável de características e comportamento igual ao programa executável original. Em comparação, um  transforma código de máquina em  (menos compreensível).

    O sucesso da descompilação depende da quantidade de informação presente no código e da sofisticação da rotina de análise. As representações intermediárias usadas em  (como  e ) normalmente incluem bastante metadados e informações de alto nível que facilitam a descompilação. Entretanto, linguagens de máquina possuem muito menos metadados e portanto são bem mais difíceis de serem descompiladas.

    Esse programa pode ser útil caso perca-se o código fonte de um programa de computador.

    Descompiladores automáticos, que geram códigos fontes a partir de arquivos binários, são a utopia de descompilação e mesmo descompiladores (ou desmontadores) avançados atualmente não são capazes de produzir tais resultados sem que o usuário tenha que tomar várias decisões antes que o código fonte possa ser efetivamente utilizado. Além disso, mesmo em casos em que a descompilação é possível, algumas características originais do código fonte como: comentários, nomes de variáveis e funções podem não ser recuperados; mas para isso analises mais detalhadas do código produzido podem ser boas alternativas.

    A maioria dos programas estão protegidos por direitos autorais, e embora esses variem de região para região, as diferentes versões de leis de direitos autorais normalmente garante ao autor o direito exclusivo de fazer copias. Como o processo de descompilação envolve a produção de múltiplas copias do programa alvo, a fim de se produzir um código fonte compatível, ela costuma ser proibida sem que haja a expressa autorização do autor.

    "Retroceder Nunca Render-se Jamais !"

    Força e Fé !

    Fortuna Audaces Sequitur !


ID
2628550
Banca
CESPE / CEBRASPE
Órgão
ABIN
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação a linguagens de programação e compiladores, julgue o item subsequente.

Chama-se cruzado o compilador que gera um programa que seja executável em pelo menos um sistema operacional diferente daquele onde o compilador tenha sido executado.

Alternativas
Comentários
  • Compilador cruzado (inglês: cross compiler) é um compilador que é capaz de produzir código executável para uma plataforma diferente da qual o compiladorestá sendo executado.

  • Certo.

     

    Apenas para acrescentar...

    Se vc se perguntou: por que eu geraria um código executável em um sistema operacional que seria executado em outra plataforma (em outro SO)? Ou seja, por que não gerar nesta própria plataforma?

     

    A resposta é: porque esses compiladores são usados para compilar para uma plataforma que não pode sustentar satisfatoriamente uma compilação, como sistemas embutidos e microcontroladores que não possuem um sistema operacional.

     

    Por essa razão justifica-se a necessidade de uma compilação cruzada.


ID
2628556
Banca
CESPE / CEBRASPE
Órgão
ABIN
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação a linguagens de programação e compiladores, julgue o item subsequente.


A etapa de análise semântica de um compilador tem como objetivo verificar os inter-relacionamentos de um programa, validando tipologias, fluxos de controle e unicidade na declaração de variáveis.

Alternativas
Comentários
  • Compiladores - Fases


    • Análise (divide o programa fonte nas partes 
    constituintes e cria uma representação 
    intermediária dos mesmos)
    – Léxica (tokens)
    – Sintática (árvore sintática)
    – Semântica (incoerências semânticas)


    • Síntese (constrói o programa alvo desejado a 
    partir da representação intermediária)
    – Geração de código intermediário
    – Otimização do código
    – Geração do código

  • Análise semântica: analisa a árvore sintática gerada pelo analisador sintático em busca de inconsistências semânticas. Uma das tarefas mais importantes é a verificação de tipos ou análise de contexto. É nesta fase que são detectadas, por exemplo, os conflitos entre tipos, a ausência de declarações de variáveis, funções e procedimentos. 


ID
2628559
Banca
CESPE / CEBRASPE
Órgão
ABIN
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação a linguagens de programação e compiladores, julgue o item subsequente.


Em um compilador, os tokens são identificados na fase de análise léxica e são representados por três propriedades: classe, valor e posição.

Alternativas
Comentários
  • "Os tokens (símbolos léxicos) são unidades básicas de texto do programa. Eles são representados internamente por três informações: classe do token, valor do token e posição do token." [1]

     

    Essa foi a única referência que encontrei definindo a representação de um token usando a sua posição. Todas as outras fontes que chequei, inclusive o livro do Ullman ("Compiladores: Princípios, Técnicas e Ferramentas"), consideram que um token é composto por um par consistindo de nome do token (classe) e valor de atributo (carrega um valor semântico e é opcional).

     

    [1] https://pt.wikibooks.org/wiki/Constru%C3%A7%C3%A3o_de_compiladores/An%C3%A1lise_l%C3%A9xica

  • Certo.

     

    Os tokens (símbolos léxicos) são unidades básicas de texto do programa. Eles são representados internamente por três informações: classe do token, valor do token e posição do token.

     

    Classe do token – representa o tipo do token conhecido.

    Valor do token – dependente da classe; podem ser divididos em dois grupos: tokens simples e tokens com argumento.

    Posição do token – indica o local do texto fonte (linha e coluna) onde ocorreu o token.

     

    Tokens simples – não tem um valor associado, por exemplo como as palavras reservadas.

    Tokens com argumento – possuem um valor associado, por exemplo como os identificadores e as constantes.

     

    As classes para palavras reservadas constituem-se em abreviações dessas, não sendo necessário passar seus valores para o analisador sintático.

    É usual que os compiladores representem a classe de um token por um número inteiro para tornar a representação mais compacta.


ID
2682157
Banca
CESPE / CEBRASPE
Órgão
EBSERH
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Julgue o item que se segue a respeito das características da linguagem PHP e de compiladores.


Compilador é o programa que traduz o código fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível.

Alternativas
Comentários
  • Tradução
    Programas em linguagem de alto nível, a exemplo dos programas escritos em linguagem de Montagem, precisam ser traduzidos para linguagem de máquina para poderem ser entendidos e processados pelo computador.
    O processo de tradução do programa pode ser classificado como Montagem, Compilação ou Interpretação.

     

    Compilação

    Compilação é o processo de tradução de um programa escrito em linguagem de alto nível para código em linguagem de máquina. Compilação é um processo análogo ao da montagem (verificação / análise do código fonte, resolução das referências de memória, reserva de espaço em memória e conversão para código de máquina binário).
    O que diferencia a compilação do processo de montagem é sua maior complexidade. No processo de montagem, há uma relação de 1:1, ou seja, cada instrução do código fonte resulta em uma instrução de máquina, enquanto na compilação a relação é múltipla, cada instrução do código fonte gerando várias instruções de máquina.

     

    Fonte: Estratégia concursos.

  • Correto.


    Um compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível para um programa equivalente em código de máquina para um processador. Em geral, um compilador não produz diretamente o código de máquina mas sim um programa em linguagem simbólica (assembly) semanticamente equivalente ao programa em linguagem de alto nível. O programa em linguagem simbólica é então traduzido para o programa em linguagem de máquina através de montadores.


    Fonte: http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node37.html


ID
2684128
Banca
SUGEP - UFRPE
Órgão
UFRPE
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com base em técnicas, estágios e processos da descompilação de código nativo e bytecode, assinale a alternativa correta.

Alternativas

ID
2684134
Banca
SUGEP - UFRPE
Órgão
UFRPE
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Abaixo, estão enumeradas as fases que integram o front-end de um compilador:


1) Análise Semântica

2) Análise Léxica

3) Análise Sintática

4) Gerador de código intermediário


Indique a sequência correta, com a ordem em que as fases ocorrem.

Alternativas
Comentários
  • 1- Análise Léxica - Organização dos tokens (palavras, operadores etc).

    2- Análise Sintática - Verificação da escrita.

    3- Análise Semântica - Verificação da lógica (gramática).

    4- Gerador de Código Intermediário - Estruturação do código para ser traduzido para linguagem de máquina.

    Gab. C

     


ID
2685766
Banca
Aeronáutica
Órgão
CIAAR
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Na compilação, a análise consiste em três fases: análise léxica, análise sintática e análise semântica.


Considerando o enunciado de atribuição y = x + z * 2 e feita a análise sintática, x + z seria um(a)

Alternativas
Comentários
  • C) não agrupado numa única frase.

  • Valéria Fonseca porque é essa a resposta ?

    Foco na missão, eu vou ser QCO !

  • Acredito que seja pelo fato das precedências.

    Ele agruparia primeiramente o "Z * 2" e após o resultado em outro agrupamento com o "X +"

  • acertei pela lógica de calculo matemático, não achei essa definição em nenhum material ou livro sobre compiladores. porém como a analise sintática identifica estrutura, expressões e declarações, com base na expressão matemática essas 2 atribuições são resolvidas separadas  y = x + (z * 2)


ID
2709016
Banca
SUGEP - UFRPE
Órgão
UFRPE
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Em relação a compiladores, ligadores (link-editores) e interpretadores, é correto afirmar que:

Alternativas
Comentários
  • Gabarito D

    Em computação, um ligadorvinculador ou editor de ligação (do inglês, linker ou link editor) é um programa utilitário que recebe um ou mais arquivos objeto gerados por um compilador e combina-os em um único arquivo executável, arquivo de biblioteca ou outro arquivo 'objeto'.

    Uma versão mais simples que escreve sua saída diretamente na memória é chamada de carregador, desta forma o carregamento é normalmente considerado um processo separado.

     

    O processo de linkedição, em geral, é um processo de dois passos. O ligador recebe como entrada um conjunto de arquivos objecto, bibliotecas e parâmetros na linha de controle e produz como resultado um arquivo objecto de saída. Neste passo é criada uma tabelas de segmentos listando todos os segmentos definidos nos arquivos-fonte e uma tabela de símbolos com todos os símbolos importados ou exportados. O ligador atribui localizações numérica para cada símbolo, determina o tamanho e a localização dos segmentos no espaço de endereços de saída. O segundo passo usa a informação coletada no primeiro passo para controlar a relização da linkedição de fato. Neste passo se ajustam os endereços de memória no código, refletindo os endereços de segmentos realocados, e se escreve o código realocado no arquivo de saída.

     

     

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

  • link-editor --> Programa que liga objetos gerados por um compilador ou montador formando o executável

  • GABARITO: D

    Compilador: Converte o código fonte completo em código objeto ( linguagem de máquina ) não executável;

    Linkeditor: gera, a partir de um ou mais módulos-objeto, um único programa executável.

    Interpretador: converte e executa o código-fonte linha a linha;

    Tradução: Consiste no processo completo em que o código-fonte é convertido em linguagem de máquina e executado;


ID
2709019
Banca
SUGEP - UFRPE
Órgão
UFRPE
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Durante a compilação de um código-fonte, a fase do compilador que é responsável por produzir uma sequência de tokens é a:

Alternativas
Comentários
  • Gabarito A

    Análise léxica é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador) e produzir uma sequência de símbolos chamado "símbolos léxicos" (lexical tokens), ou somente "símbolos" (tokens), que podem ser manipulados mais facilmente por um parser (leitor de saída).

     

     

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

  • Análise léxica: Ele separa a sequência de caracteres que representa o programa fonte em entidades ou tokens, símbolos básicos da linguagem. Durante a análise léxica, os tokens são classificados como palavras reservadas, identificadores, símbolos especiais, constantes de tipos básicos (inteiro real, literal, etc.), entre outras categorias. Basicamente é reconhecer as sequências de símbolos que representam uma unidade. 

    Letra A

    Força e Fé!

  • Falou em TOKEN lembrou de Léxico


ID
2743180
Banca
FGV
Órgão
MPE-AL
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Na implementação de compiladores, a fase de parser do programa baseia-se, em parte, no resultado de um analisador léxico.
Assinale a opção que descreve o papel de um analisador léxico.

Alternativas
Comentários
  • Análise Léxica = Token

     

    @papirobizurado

  • DICA PRECIOSA

    Análise léxica envolve a identificação de símbolos - tokens.

    Análise sintática tem a ver com a montagem das estruturas que constituem as expressões e comandos (lembrar do erro de sintaxe se faltar uma chave para o if ou for no C)

    Análise semântica, por sua vez, tem o objetivo de ligar as estruturas dando sentido ao programa.

     

    Gabarito: D

  • Gabarito D

    Na compilação, a análise consiste em três fases:

    Análise léxica, 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.

    Análise sintática, 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

    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 !

  • A - Sintática

    B - Sintática

    C - Sintática

    D - Léxica

    E - Semântica


ID
2859286
Banca
Marinha
Órgão
CAP
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Segundo Monteiro (2013), a execução de programas é realizada por meio de três fases distintas: compilação/ligação/execução. No entanto, esse não é o único método de execução de um programa, há um outro processo denominado interpretação. Sobre vantagens e desvantagens desses métodos, assinale a opção correta.

Alternativas
Comentários
  • Ambos os métodos possuem vantagens e desvantagens, oriundas do modo próprio de funcionamento de cada um.

    VANTAGEM PRINCIPAL> é a capacidade de identificar e indicar um erro no programa-fonte

    DESVANTAGEM> uma razoavel desvantagem da interpretacao é o consumo de memória.

    MONTEIRO, M.A. INTRODUCAO A ORGANIZACAO DE COMPUTADORES. 5.eD.

    EXECUCAO DE PROGRAMAS>COMPILACAO X INTERPRETACAO

  • Compilador

    -Traduz programas escritos em uma linguagem de programação de alto nível em código de máquina.

    - O código-objeto não pode ser executado diretamente no SO.

    - O compilador precisa ser adequado à LP e também à arquitetura de hardware onde o programa será executado.

    - Toma todo o código fonte e o converte em código de máquina gerando o código-objeto;

    Vantagem: execução rápida

    Desvantagem: dificuldade para depuração

    Interpretadores

    - O processo de execução do código fonte é feita, instrução por instrução, sem a geração de um programa equivalente em linguagem de máquina.

    - Cada comando em alto nível é examinado, convertido para código binário e executado imediatamente.

    - Converte cada instrução do código-fonte em código-binário;

    Vantagem: mais fácil de depurar;

    Desvantagens: é necessário fornecer o código-fonte, execução lenta.

    Alternativa: A


ID
2873893
Banca
IBADE
Órgão
Câmara de Porto Velho - RO
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Algumas linguagens exigem que o código fonte seja previamente traduzido para linguagem de máquina antes de ser executado. Chama-se esta fase de:

Alternativas
Comentários
  • Gabarito D

    Compiladores

    Compiladores são programas que recebem como entrada arquivos texto contendo módulos escritos em linguagem de alto nível e geram como saída arquivos objeto correspondentes a cada módulo, ou, se todas as bibliotecas e módulos são apresentados como entrada, geram um programa executável diretamente. 

    "Retroceder Nunca Render-se Jamais !"

    Força e Fé !

    Fortuna Audaces Sequitur !

  • O Código Fonte é COMPILADO para linguagem de máquina (assembly), depois o montador traduz para o código de objeto (binário). Mas a questão foi anulada, pois, o examinador digitou Compliação ao invés de Compilação.

  • GABARITO: D

    Compilador: Converte o código fonte completo em código objeto ( linguagem de máquina ) não executável;

    Linkeditor: Transforma os módulos-objeto em um único executável;

    Interpretador: converte e executa o código-fonte linha a linha;

    Tradução: Consiste no processo completo em que o código-fonte é convertido em linguagem de máquina e executado;


ID
2909473
Banca
FGV
Órgão
Prefeitura de Niterói - RJ
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Na construção de compiladores e no uso de linguagens de programação em geral, expressões regulares constituem um poderoso instrumento para a validação de textos. Nesse contexto, analise a expressão regular exibida a seguir.


a{1,4}b*c+


Assinale o texto que não casa como essa expressão.

Alternativas
Comentários
  • a{1,4}b*c+

    O trecho "c+" torna obrigatória a existência de pelo menos uma letra "c" na string (+: 1 ou mais)

    Outros trechos:

    a{1,4}: 1 a 4 letras "a"

    b*: 0 ou mais letras "b"

    Nesse caso, a única alternativa que não atende aos requisitos é a letra a.

  • Metacaracteres quantificadores:

     

    ? ➜ Zero ou um;

    ➜ Zero, um ou mais;

    + ➜ UM ou mais;

    {n,m} ➜ De n até m.

    .

    .

    At.te

    Foco na missão 


ID
3007783
Banca
Marinha
Órgão
Quadro Técnico
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Sobre análise léxica e sintática executadas pelos compiladores, assinale a opção correta.

Alternativas
Comentários
  • Página do livro 164 Conceitos de Linguagens de Programação 11ed autor Sebesta , logo no primeiro paragrafo:

    "Um analisador léxico serve como o passo inicial de um analisador sintático"

     

     

     

    Analisando prova de TI 

    https://www.youtube.com/watch?v=tblCbdPECh0

  • GABARITO D

    1. Análise léxica ou Scanner: identifica palavras, operadores, números, etc. Organização de tokens;
    2. Análise sintática ou Parser: identifica estrutura, expressões, declarações, etc.Verificação de escrita;
    3. Análise semântica: identifica tipos, etc; Verificação da lógica;


ID
3204106
Banca
Quadrix
Órgão
CRECI - 5º Região (GO)
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Com relação à arquitetura de computadores e a sistemas operacionais, julgue o item


Dentro do ambiente de desenvolvimento, os compiladores convertem programas de alto nível em linguagens de montagem e os montadores convertem linguagem de montagem em representações numéricas, tratadas pelo processador.

Alternativas
Comentários
  • Montadores e compiladores são dois tipos de programas de computador que têm a mesma finalidade : para converter código legível ao código que pode ser entendido por um computador. ... Compiladores produzir código de máquina , interpretando uma linguagem de alto nível .


ID
3305377
Banca
AOCP
Órgão
SUSIPE-PA
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

O compilador é o programa responsável por traduzir o código-fonte de uma linguagem de programação de alto nível para uma linguagem de programação de baixo nível. Sobre o compilador e as etapas realizadas por esse programa, analise as assertivas e assinale a alternativa que aponta a(s) correta(s).

I. A etapa de análise léxica tem como função a identificação dos elementos componentes do programa, os também chamados símbolos léxicos.
II. A etapa de análise sintática visa determinar se o conjunto de símbolos léxicos encontrados pertencem à gramática da linguagem de programação.
III. A etapa de análise semântica tem como objetivo verificar se a execução do programa faz sentido para o usuário.
IV. A etapa de otimização de código realiza a síntese do código escrito pelo programador, visando a uma melhora de desempenho na execução do programa.

Alternativas
Comentários
  • Alternativa IV fala em síntese do código escritório pelo programador. a A otimização ocorre sobre código intermediário, não sobre código escrito pelo programador. alternativas corretas I e II
  • Questão totalmente sem pé e sem cabeça.

    I e II dizem respeito à análise léxica (separação dos tokens e criação da tabela de símbolos)

    III é responsabilidade da análise sintática (construção da árvore de execução)

    IV, de fato, está errado, pois a otimização é do código gerado na fase de síntese, e não pelo programador.

    Somente o item I está correto, segundo a bibliografia consagrada.

  • A II também tá errada.

    .

    Análise Léxica: "Um fluxo de caracteres constituindo um programa é lido da esquerda para a direita e agrupado em tokens, que são sequências de caracteres tendo um significado coletivo. Tokens são palavras válidas, conhecidos também como lexemas. Exemplos são: WHILE, x1, 23. Também são detectados nesta fase erros léxicos, exemplo: !epa não é um lexema válido em C. É considerada apenas a relação dos caracteres entre si para a formação do lexema. O relacionamento dos lexemas entre si fica a cargo da análise sintática."

    .

    http://professor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/17389/material/Texto_Parte1.pdf

  • GABARITO: E

    I. A etapa de análise léxica tem como função a identificação dos elementos componentes do programa, os também chamados símbolos léxicos. CORRETO

    II. A etapa de análise sintática visa determinar se o conjunto de símbolos léxicos encontrados pertencem à gramática da linguagem de programação. CORRETO

    III. A etapa de análise semântica tem como objetivo verificar se a execução do programa faz sentido para o usuário. Computador ( de acordo com a lógica computacional )

    IV. A etapa de otimização de código realiza a síntese do código escrito pelo programador, visando a uma melhora de desempenho na execução do programa. Como afirmado pelo Marcos Barreto, a otimização ocorre em cima do código intermediário.

  • e-

    Lexical analysis (also known as lexing or tokenization) breaks the source code text into a sequence of small pieces called lexical tokens. This phase can be divided into two stages: the scanning, which segments the input text into syntactic units called lexemes and assigns them a category; and the evaluating, which converts lexemes into a processed value. A token is a pair consisting of a token name and an optional token value. Common token categories may include identifiers, keywords, separators, operators, literals and comments, although the set of token categories varies in different programming languages.

    Syntax analysis (also known as parsing) involves parsing the token sequence to identify the syntactic structure of the program, building a parse tree, which replaces the linear sequence of tokens with a tree structure built according to the rules of a formal grammar which define the language's syntax.

    Semantic analysis adds semantic information to the parse tree and builds the symbol table. This phase performs semantic checks such as type checking (checking for type errors), or object binding (associating variable and function references with their definitions), or definite assignment (requiring all local variables to be initialized before use), rejecting incorrect programs or issuing warnings.

    https://en.wikipedia.org/wiki/Compiler


ID
3390439
Banca
FCC
Órgão
METRÔ-SP
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Um compilador está verificando se uma variável foi declarada somente uma vez, se foi declarada antes do seu primeiro uso, se foi declarada e nunca foi usada e se os tipos de dados em uma expressão aritmética são compatíveis. Essas verificações são realizadas na fase de

Alternativas
Comentários
  • A análise léxica consiste em ler o código fonte caractere a caractere para identificar constantes, comentários, palavras reservadas, operadores, identificadores, ignorar tabs e espaços em branco, processar includes, se for o caso. Por outro lado, a análise sintática é responsável por identificar na sequência de elementos léxicos as construções da linguagem, como por exemplo, as estruturas condicionais. Essa análise irá verificar a condição da estrutura e a quais comandos ela está associada. Já a análise semântica tem por objetivo verificar se as construções identificadas pela análise sintática estão de acordo com as "regras" da linguagem. Por exemplo, em C, caso uma variável não tenha sido anunciada antes de ter sido citada, o compilador acusará esse erro no código fonte.

  • Análise léxica consiste em analisar e verificar aquilo que ou não importante no código

    Análise sintática consiste em verificar a lógica, a coesão.

    Análise semântica consiste em avaliar o sentido e se obedece os critérios da linguagem.


ID
3400192
Banca
INSTITUTO AOCP
Órgão
EMPREL
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

A estrutura típica de um compilador possui 3 elementos. Assinale a alternativa que apresenta corretamente esses elementos.

Alternativas
Comentários
  • c-

    o compilador tem dois componentes principais: análise e síntese

    A análise (frontend)- recebe o programa fonte, verifica as partes desse programa e impõe uma estrutura gramatical sobre elas

    - Cria uma representação intermediária desse programa fonte;

    - Coleta informações sobre o programa fonte e as armazena em uma Tabela de Símbolos;

    - Fornece mensagens indicando possíveis erros na sintaxe e/ou semântica do programa

    A síntese (backend)

    recebe uma representação intermediária do programa e constrói o programa para a máquina alvo


ID
3400195
Banca
INSTITUTO AOCP
Órgão
EMPREL
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Qual é o elemento de um compilador que lê um fluxo de entrada (caracteres) e produz um fluxo de saída que contém palavras das quais cada uma é rotulada com sua categoria sintática, equivalente a uma classe gramatical da palavra na linguagem natural?

Alternativas
Comentários
  • a-

    scanner é uma sub rotina do compilador, usada para combinar caracteres do input e organiza-los em tokens

  • O analisador léxico, ou scanner como também é chamado, faz a varredura do programa fonte caractere por caractere e, traduz em uma sequência de símbolos léxicos ou tokens. É nessa fase que são reconhecidas as palavras reservadas, constantes, identificadores e outras palavras que pertencem a linguagem de programação. O analisador léxico executa outras tarefas como por exemplo o tratamento de espaços, eliminação de comentários, contagem do número de linhas que o programa possui e etc.

  • Análise

    Léxica (scanner) -> tokens

    Sintática (parser) -> árvore de execução

    Semântica -> verificação de tipos e definições

    Síntese

    Geração de um código intermediário

    Otimização desse código

    Geração de um código objeto

  • Gabarito A

    Fase de análise / Scanner

    • Conhecida como o front-end do compilador, a fase de análise do compilador lê o programa fonte, o divide em partes principais e, em seguida, verifica erros lexicais, gramaticais e de sintaxe;

    • A fase de análise gera uma representação intermediária do programa e tabela de símbolos, que deve ser alimentada como entrada na fase de síntese;

    Fonte: Professor Tiago Lage Payne de Pádua (Gran cursos)


ID
3532348
Banca
INSTITUTO AOCP
Órgão
IBGE
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considerando a ciência da criação de um compilador, há vários objetos que são importantes para o processo de compilação. Esse é um componente importante para o processo e representa uma estrutura de dados que contém um registro para cada nome de variável, com campos para os atributos do nome. Assinale a alternativa que apresenta o nome desse componente.

Alternativas
Comentários
  • Tabela de Símbolos

    • É uma estrutura de dados mantida ao longo de todas as fases de um compilador;

    • Todos os nomes do identificador, juntamente com seus tipos, são armazenados aqui;

    • A tabela de símbolos facilita para o compilador pesquisar rapidamente o registro identificador e recuperá-lo;

    • A tabela de símbolos também é usada para gerenciamento de escopo;

    Fonte: Professor Tiago Lage Payne de Pádua - Gran Cursos

  • Tabela de Símbolos

    Contém o valor de todos os símbolos. Um símbolo é um rótulo ou um valor ao qual é atribuído um nome simbólico por meio de uma pseudoinstrução.

    A primeira tarefa do assembler é montar uma tabela de símbolos, que é usada para mapear os nomes de constantes simbólicas e rótulos para os números binários que eles representam

    GABARITO D

    Tanenbaum


ID
3538951
Banca
INSTITUTO AOCP
Órgão
ITEP - RN
Ano
2018
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Sobre o funcionamento e as características dos compiladores e interpretadores, assinale a alternativa correta.

Alternativas
Comentários
  • A letra C está correta mas para ficar mais precisa e se aprofundar no assunto deveria ser citado que na verdade ainda é necessário um montador e o Linker para gerar um .EXE que aí sim pode ser executado diretamente pelo computador.

  • A) Um compilador lê, linha por linha, o código do programa, executando a instrução específica de cada linha. Interpretador

    B) O interpretador converte o código todo para um código-objeto. Esse código objeto é uma tradução do código para uma linguagem que o computador entende. Compilador

    C) Uma vez que um compilador gera com sucesso um código-objeto, este último pode ser executado diretamente pelo computador.

    D) O código-objeto é a entrada para o interpretador, o qual executa o programa. saída / do compilador

    E) O código-objeto é a entrada para o compilador, o qual compila esse código-objeto gerando um arquivo binário. Como nosso colega Leandro Henrique citou, o código-objeto é o código na linguagem de máquina, ou seja, em binário.

    #PegaOBizu

  • Trata-se de uma questão sobre compiladores/interpretadores.

    Vamos para as alternativas.

    A) Errado. Quem lê linha por linha do código é o interpretador.

    B) Errado. Quem converte o código para linguagem que o computador entende é o compilador.

    C) Correto. O compilador pega o código fonte e compila em um código executável, e entendido pelo computador.

    D) Errado. O código fonte normal que é a entrada para o interpretador, o código objeto é o resultado da compilação.

    E) Errado. O código fonte é a entrada para o compilador.


    Gabarito do Professor: Letra C.

ID
3679411
Banca
AOCP
Órgão
IBGE
Ano
2019
Disciplina
Arquitetura de Computadores
Assuntos

Considerando a ciência da criação de um compilador, há vários objetos que são importantes para o processo de compilação. Esse é um componente importante para o processo e representa uma estrutura de dados que contém um registro para cada nome de variável, com campos para os atributos do nome. Assinale a alternativa que apresenta o nome desse componente.

Alternativas
Comentários
  • Gabarito: D (Tabela de Símbolos.)

    Tabela de Símbolos

    • É uma estrutura de dados mantida ao longo de todas as fases de um compilador;

    • Todos os nomes do identificador, juntamente com seus tipos, são armazenados aqui;

    • A tabela de símbolos facilita para o compilador pesquisar rapidamente o registro identificador e recuperá-lo;

    • A tabela de símbolos também é usada para gerenciamento de escopo;

    Fonte: Professor Tiago Lage Payne de Pádua (Gran cursos)

    Mais informações sobre o assunto: https://erinaldosn.files.wordpress.com/2011/03/aula-5-tabelas-de-sc3admbolos.pdf

  • A principal função da passagem um é montar uma tabela denominada tabela de símbolos, que contém o valor de todos os símbolos. Um símbolo é um rótulo ou um valor ao qual é atribuído um nome simbólico por meio de uma pseudoinstrução.

    Cada entrada da tabela de símbolos contém o símbolo em si (ou um ponteiro para ele), seu valor numérico e, às vezes, outras informações. Essas informações adicionais podem incluir:

    1. O comprimento do campo de dados associado com o símbolo.

    2. Os bits de relocação. (O símbolo muda de valor se o programa for carregado em um endereço diferente daquele considerado pelo assembler)

    3. Se o símbolo deve ser acessível ou não fora do procedimento.

    GAB D

    Tanenbaum


ID
3877735
Banca
AOCP
Órgão
COREN-SC
Ano
2013
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Assinale a alternativa que informa o compilador padrão do Java.

Alternativas
Comentários
  • Gabarito: A (javac)

    O compilador Java, chamado javac, compila o código-fonte do Java para um código de nível intermediário chamado códigos de bytes. Esses códigos de bytes não são diretamente executáveis em qualquer plataforma de hardware existente; mas esses códigos são interpretados pelo interpretador Java, o qual pode operar por si mesmo ou como parte de um navegador Web.

    Mais informações podem ser encontradas na seguinte URL: https://homepages.dcc.ufmg.br/~mlbc/cursos/internet/java/


ID
4172431
Banca
UNIMONTES
Órgão
Prefeitura de Jaíba - MG
Ano
2017
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Considerando os fundamentos e conceitos de compiladores e interpretadores, analise as afirmativas abaixo.

I - Quando os compiladores são executados, eles fazem a tradução de um programa escrito em linguagem de alto nível para linguagem de baixo nível, com o objetivo de gerar um arquivo executável.
II - Considere a execução de um determinado programa, em condições ideais, em um ambiente interpretado, e a execução desse mesmo programa, no mesmo equipamento e sob as mesmas condições, após ser compilado. A versão interpretada apresenta maior rapidez na execução quando comparada à versão compilada.
III - O interpretador traduz as instruções de um programa, escrito em linguagem de alto nível para linguagem de máquina, à medida que vai sendo solicitado pelo código daquele programa. Dessa forma, temos o pré-processamento mais rápido, mas o processamento mais demorado.

Assinale a alternativa CORRETA.

Alternativas
Comentários
  • I - Quando os compiladores são executados, eles fazem a tradução de um programa escrito em linguagem de alto nível para linguagem de baixo nível, com o objetivo de gerar um arquivo executável.

    De fato, o compilador, durante sua execução, realiza operações de análise léxica, sintática, semântica e síntese a fim de gerar um arquivo executável.

    II - Considere a execução de um determinado programa, em condições ideais, em um ambiente interpretado, e a execução desse mesmo programa, no mesmo equipamento e sob as mesmas condições, após ser compilado. A versão interpretada apresenta maior rapidez na execução quando comparada à versão compilada.

    Enquanto o compilador converte o código todo para a linguagem de máquina de uma vez, o interpretador executa cada instrução passo a passo. Esse processo faz com que sua execução seja mais lenta, quando comparado com o compilador.

    III - O interpretador traduz as instruções de um programa, escrito em linguagem de alto nível para linguagem de máquina, à medida que vai sendo solicitado pelo código daquele programa. Dessa forma, temos o pré-processamento mais rápido, mas o processamento mais demorado.

    Com efeito, quando se utiliza um interpretador, o programa vai sendo utilizado à medida que é traduzido.

    Gabarito: letra B.

  • GABARITO B

    II - Considere a execução de um determinado programa, em condições ideais, em um ambiente interpretado, e a execução desse mesmo programa, no mesmo equipamento e sob as mesmas condições, após ser compilado. A versão interpretada apresenta maior rapidez na execução quando comparada à versão compilada.

    O compilador traduz todo seu código apenas uma única vez, gerando um programa executável. Após ser compilado, o programa é executado sem necessidade de realizar uma nova tradução.

    Diferentemente do compilador, o interpretador traduz o seu código por demanda, linha a linha, e não gera um programa executável. Dessa forma, sempre que executado um código no interpretador, será preciso realizar uma nova tradução, o que torna o processo mais lento.

    Vale ressaltar que, se no item a sentença "após ser compilado" não estivesse presente, tal item tornar-se-ia correto, pois o processo de compilação é mais lento.

    Lembre-se de que compilação é diferente de execução.


ID
4827253
Banca
COPESE - UFPI
Órgão
ALEPI
Ano
2020
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Dada as seguintes proposições sobre a fase de otimização de código de um compilador:

I. Pode-se afirmar que Bloco básico, ou “trecho de código em linha reta” significa blocos trechos de programa cujas instruções são sempre executadas em ordem (em linha reta), da primeira até a última;
II. A otimização é realizada exclusivamente após a geração do código objeto;
III. A otimização é dita dependente da máquina quando aplicadas antes da geração do código assembly;
IV. A otimização independente de máquina é conhecida como a análise de fluxo, que por sua vez contempla a análise de fluxo de controle e a análise de fluxo de dados.

Marque a opção que corresponde somente às afirmativas verdadeiras.

Alternativas
Comentários
  • Acredito que a questão não possua gabarito, vejamos:

    I. Correta;

    Fonte: https://www.cin.ufpe.br/~mvpm/Compiladores/otim.pdf

    II. Incorreta;

    O exclusivamente invalidou a alternativa, já que podemos realizar a otimização do código intermediário ( antes do código-objeto)

    III. ????

    O examinador deu a questão como correta, porém encontrei isto:

    As técnicas de otimização podem ser classificadas como independentes de máquina, quando podem ser aplicadas antes da geração do código na linguagem assembly, ou dependentes de máquina, quando aplicadas na geração do código assembly.

    Independente antes da geração do assembly. Ou seja, invalidando a afirmativa. Se alguém pude esclarecer minha dúvida, mande uma mensagem!

    IV. Correta.

    Fonte: https://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node76.html

    GABARITO PELA BANCA: ALTERNATIVA A ( I, III e IV corretas)

    GABARITO PELAS FONTES: SEM ALTERNATIVA ( I e IV corretas)


ID
4873339
Banca
IDIB
Órgão
CRM-MT
Ano
2020
Provas
Disciplina
Arquitetura de Computadores
Assuntos

As linguagens de programação que utilizamos para construção de aplicações são de fácil entendimento para um programador, pois são conhecidas como linguagens com alto nível de abstração. No entanto, este código não pode ser executado diretamente pelo computador, pois o mesmo reconhece apenas linguagem de máquina. Assinale a alternativa que indica corretamente o nome do programa que, durante sua execução, realiza operações de análise léxica, análise sintática, análise semântica e síntese.

Alternativas
Comentários
  • COMPILAÇÃO

    consiste da tradução da linguagem de alto nível para a linguagem de montagem do processador

    A compilação, por sua vez, é dividida em etapas:

    ▶ Análise léxica.

    ▶ Análise sintática.

    ▶ Análise de escopo e tipos.

    ▶ Geração de código. ▶ Otimização.

  • Fase de Análise

    - Léxica: verifica erros léxicos (palavras ou valores inválidos) e gera uma sequência de tokens

    - Sintática: verifica a ordem e gera uma árvore sintática

    - Semântica: verifica tipos e contexto

    .

    Fase de Síntese

    - Geração de código intermediário

    - Otimização

    - Geração de código para a máquina alvo


ID
4981450
Banca
ADM&TEC
Órgão
Prefeitura de Palmeira dos Índios - AL
Ano
2019
Provas
Disciplina
Arquitetura de Computadores
Assuntos

Leia as afirmativas a seguir:

I. Os comandos de seleção ou de decisão são técnicas de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Uma estrutura de seleção permite a escolha de um grupo de ações a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas.
II. O compilador é um programa que traduz algoritmos construídos em uma determinada linguagem de programação para arquivos em linguagem de máquina, ou seja, possíveis de serem executados em computadores.

Marque a alternativa CORRETA:

Alternativas
Comentários
  • I. Os comandos de seleção ou de decisão são técnicas de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Uma estrutura de seleção permite a escolha de um grupo de ações a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas. 

    É uma estrutura usada para auxiliar a especificação de programas, e para indicar pré-requisitos de blocos de códigos.

    II. O compilador é um programa que traduz algoritmos construídos em uma determinada linguagem de programação para arquivos em linguagem de máquina, ou seja, possíveis de serem executados em computadores.

    Traduz todas as suas linhas de código para outra linguagem – normalmente, uma de alto nível para outra de baixo nível.