O compilador é o programa responsável por traduzir o código...
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.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - Apenas I e II.
Vamos entender o motivo pelo qual essa é a alternativa correta, analisando as assertivas e o processo de compilação:
A análise léxica é a primeira fase do compilador. Nela, o código-fonte é lido caracter por caracter para a formação de tokens, que são os elementos básicos da linguagem, como identificadores, palavras-chave, símbolos e constantes. Portanto, a assertiva I está correta.
Na sequência, na análise sintática, a estrutura dos tokens é analisada para garantir que eles estejam organizados de acordo com as regras gramaticais da linguagem de programação. Essa etapa verifica a estrutura do código, mas não o seu significado. Assim, a assertiva II também está correta.
Quanto à análise semântica, seu objetivo é garantir que os elementos do programa façam sentido no contexto em que são usados, de acordo com a semântica da linguagem, e não se o programa faz sentido para o usuário como mencionado na assertiva III. Um exemplo seria verificar tipos de dados e sua compatibilidade em operações. A assertiva III está, portanto, incorreta.
Por fim, a otimização de código é uma etapa que ocorre após a análise semântica e antes da geração de código. Essa fase trabalha em transformar o código intermediário em um código que será executado de forma mais eficiente pela máquina, mas não é uma síntese do código escrito pelo programador, e sim uma melhoria do mesmo. Sendo assim, a assertiva IV não está exatamente correta em sua descrição.
Com base nessa análise, a alternativa que reúne as assertivas corretas é a E, que inclui apenas a assertiva I e a assertiva II.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
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
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo