Buscar

ATV COMPILADORES

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ATV COMPILADORES
https://johnidm.gitbooks.io/compiladores-para-humanos/content/part1/structure-of-a-compiler.html
“Posto de forma simples, um compilador é um programa que lê um programa escrito numa linguagem – linguagem fonte – e o traduz num programa equivalente numa outra linguagem – a linguagem alvo.” (AHO, 2007,p.1).
Com isso o compilador na sua fase de analise, executa algumas tarefas essenciais para sua função.
Assinale a alternativa que descreve qual fase da analise corresponde com a verificação da gramática da linguagem:
Analise léxico 
Dentro do formalismo de uma linguagem de programação podemos utilizar a notação EBNF para especificar a gramática de uma linguagem, que geralmente uma é uma linguagem livre de contexto . Varias tarefas são executado na fase de sintaxe do compilador.
 
Considerando o contexto, avalie as afirmativas a seguir referente a analise da sintaxe:
 
I)   A gramática definida e demonstrada pela notação EBNF é validada na analise da sintaxe do compilador, quando é analisada suas palavras e símbolos.
II)  A análise de sintaxe tem como objetivo validar os tipos envolvidos na gramática, se os tipos das variáveis são iguais por exemplo.
III) Na etapa da analise sintática e quando o compilador ira analisar a forma de determinado alfabeto da gramática.
IV) O processo de reconhecer a estrutura de sentenças é uma tarefa da análise sintática,
Dentre as afirmativas é correto o que se afirma em:
Apenas as afirmativas I e IV estão corretas. 
Na construção de um compilador podemos ter em mente alguns macro processos para nos guiar na construção de um compilador. Para isto, podemos seguir os seguintes  passos para nos ajudar na construção.
 
1) Fazer a análise sintática léxica e semântica
2) Gerar o código intermediário,
3) Otimizar o código,
4) Elaborar a gramática da linguagem
5) Fazer a geração do código alvo e gerar erros
Assinale a opção que representa a ordem correta na construção do compilador
4 - 1 - 2 - 3 - 5 
Dentro da fase de analise que esta no processo de frontend do nosso projeto de compilador temos as etapas de analise léxica e sintática.
Na pratica podemos relacionar essas etapas com quais softwares de mercado:
LEX e Yacc. 
As linguagens de programação estão inseridas dentro das Gramáticas livres de contexto(LLC). Dentro da fase de analise temos a analise Léxica, Sintática e Semântica.
Temos a tabela a seguir que mostram os elementos após analise léxica.
	Token
	Lexema
	<se, >
	Se, SE, sE
	< >, >
	>
	<então, >
	então
	<(, >
	(, )
	<es,>
	es,Es,ES,eS
 
O programador digitou o seguinte comando:
es (z > w)  então
Com base na tabela anterior identifique em qual fase e em qual etapa podemos pegar o erro de compilação do comando.
Fase da análise na etapa da análise sintática
Na etapa do analisador léxico o  compilador precisa fazer a análise caracter a caracter para reconhecimento dos tokens e isso consome muito recurso, podendo deixar o processo de compilação muito lento. Com isso temos uma técnica que pode fazer com que se melhore o desempenho da compilação.
Assinale a alternativa que apresenta corretamente a técnica para melhorar o desempenho da compilação.
Bufferização. 
A primeira fase da compilação é a analise léxica que recebe os caracteres de entrada do programa e os converte em um fluxo de tokens que são unidades lógicas que representam um ou mais caracteres.
 
Com base nessa fase de compilação, avalie as seguintes afirmativas assinalando (V) para as verdadeiras ou (F) para as falsas:
 
(V) A análise léxica(lexer) é, usualmente, invocada pelo parser cada vez que um novo token é necessário
(V) A análise léxica é uma fase que processa caracter por caracter. Assim, velocidade é um ponto crítico no projeto de analisadores Léxicos
(F) A Analise léxica empilha o identificador de itens léxicos na pilha semântica.
(F) Lexer gera derivações gramaticais, é um processo complexo e consequentemente lento.
Assinale a alternativa que apresenta a sequência CORRETA:
V – V – F – F
Uma sequência de caracteres de entrada compreendendo um único token é chamada de lexema com isso é produzido uma sequência de símbolos léxicos conhecidos como tokens. Assim, podemos dizer que o analisador léxico isola do analisador sintático a representação do lexema dos tokens.
 
Com isso é imprescindível a geração do token e lexema da linguagem.
Assinale a alternativa que representa a correta função da geração do token e lexema.
Escolha uma:
Identificar se os tipos estão corretos
Analisar todo código e gerar código intermediário 
Verificar se eles pertencem ao alfabeto da linguagem.
Os elementos básicos de qualquer linguagem de programação são os identificadores, as palavras-chave, as constantes e os operadores.
Com isso assinale a alternativa que contenha o elemento do tipo Palavras-chave.
if, else, then 
Cada par (token, lexema) deve ser armazenado em uma tabela dinâmica de símbolos, para futuras consultas pelas demais fases da compilação. Podemos utilizar tabelas hash para as pesquisas serem mais rápidas.
Assinale a alternativa que apresenta corretamente o que é a tabela hash.
Uma forma que associa uma chave de pesquisa a valores
Quando tratamos de análise léxica, devemos encontrar no programa fonte os padrões correspondentes ao par (tipo do token, lexema). Com isso o analisador lexico analisa caracter por caracter para identifcação.
 
Com base no analisador lexico faça a associação dos Lexemas contidos na COLUNA-A, com os Tipo do token contidos na COLUNA-B, do código a seguir:
int x = 0;
 
 
	COLUNA-A
	COLUNA-B
	I. int
	1. símbolo atribuição
	II. x
	2. variável
	III. =
	3. terminador
	IV. 0
	4. tipo do dado
	V. ;
	5. constante numerica
A seguir assinale a alternativa que apresenta a associação correta.
I - 4; II - 2; III - 1; IV - 5; V - 3 
Um gerador de analisador léxico (scanner) tem por entrada uma especificação com um conjunto de expressões regulares. Ele gera um programa e retorna o padrão de cada tipo de token identificado.
Assinale a alternativa que apresenta corretamente como o scanner funciona
A partir das expressões regulares da linguagem  faz o reconhecimento das palavras, ou seja, os padrões dos tokens definidos na especificação da linguagem.
Um gerador de analisador léxico (scanner) tem por entrada uma especificação com um conjunto de expressões regulares. Ele gera um programa, o lexer, que lê a entrada, o programa escrito na linguagem(o fonte) e retorna o padrão de cada tipo de token identificado, ou se não é válido, isto é, não é reconhecido pela gramática.
O JFlex é uma ferramenta em java que atende esse propósito.
Assinale a alternativa que apresenta corretamente quais os símbolos utilizados no inicio do arquivo JFLEX
%%
JFlex é uma ferramenta amplamente utilizada para especificar as expressões regulares da gramática.
Analise as afirmações a seguir, referente às regras de notação reconhecidas pelo JFlex e utilizada para as expressões regulares.
 
I) a|b  indica alternância entre a ou b e ab é uma concatenação
II) a*  indica negação e (a) representa a, os () indica precedência
a* Fecho de Kleene
Na lógica matemática e na ciência da computação, o fecho de Kleene, estrela de Kleene ou operador de Kleene, é uma operação unária aplicada a conjuntos. A aplicação do fecho de Kleene num conjunto V é escrito como V* (lê-se fecho de Kleene de V ou simplesmente V-estrela). É uma operação muito usada em expressões regulares, no contexto em que foi introduzida por Stephen Kleene para caracterizar certos tipos de autômatos.
Se V é uma linguagem, então V* é o menor subconjunto de V que contém ε (denominado cadeia vazia) e é fechado numa operação de concatenação. Esse conjunto também pode ser descrito como o conjunto de todos elementos que podem ser formados através da concatenação de zero ou mais elementos de V.
Se V é um alfabeto, então V* é o conjunto de todas as cadeias finitas de símbolos de V, incluindoa cadeia vazia.
III) a?  indica que a é opcional.
É correto apenas o que se afirma em:
I e III.
Podemos usar o JFlex para fazer a o analisador léxico em Java, com isso é posisvel enviar um arquivo de entrada e obter uma Saída da analise léxica. Foi gerado um arquivo de Entrada como mostra a Tabela-1 e executado a especificação a seguir:
 
nomeVariavel = [a-zA-Z] [a-zA-z0-9]
inteiro = [0-9]+
decimal = [0-9]+["."]+[0-9]+
branco = [\t\n\r]+
palavraChave = "if" | "class" | "int" | "while" | "do"
 
De acordo com as informações apresentadas na Tabela-1 a seguir, faça a associação da entrada contidos na COLUNA-A com seus respectivos o resultado da análise léxica  na COLUNA-B.
 
 
Tabela-1
	COLUNA-A
	COLUNA-B
	I. nota1
	1.número decimal
	II. +
	2.palavra chave
	III. 10.14
	3.variável
	IV. while
	4.caracter invalido
Assinale a alternativa que apresenta a associação CORRETA.
I - 3; II - 4; III - 1; IV – 2
A tarefa de desenvolvimento de software envolve a escrita de código que estão condicionadas a erro, com isso o compilador deve ter a capacidade de tratar os erros
 
Sobre o tratamento de erros em um compilador, avalie as seguintes asserções:
 
I. Tem a função de relatar a presença de erros clara e com precisão.
II. Deve ser capaz de se recuperar do erro a fim de conseguir identificar os próximos, se houver.
III. Deve ser rápido no processamento de programas corretos.
IV. Deve verificar o tamanho máximo da variável excedida.
Assinale a alternativa que descreva corretamente as regras básicas que devemos seguir para projetar um compilador:
As afirmativas I, II, III e IV estão corretas.
Cada linguagem de programação (LP) possui regras que definem a sua estrutura sintática, e ainda, a sintaxe das construções das LPs podem ser descritas por linguagens livres de contexto (LLC) ou pela notação BNF (Backus-Naur Forms)
Dentro desse contexto assinale a alternativa que descreva corretamente a função do analisador sintático:
Faz a verificação se o programa fonte está escrito de acordo com as regras definidas pela sua gramática
Um analisador sintático é a parte central de um compilador orientado pela sintaxe (gramática) da linguagem que ele compila, além disso, verifica se um programa-fonte é válido ou não do ponto de vista sintático.
Basicamente existem três estratégias gerais de análise sintática para gramáticas livres de contexto, sendo que uma delas pode analisar qualquer gramática, como é o caso do algoritmo CYK (YOUNGER, 1967, p. 189-208; KASAMI, 1965) e o algoritmo de Earley (EARLEY, 1970), porém, esses métodos não são muito eficientes para serem utilizados em compiladores de produção, que são aqueles utilizados em alta escala. Já as outras duas estratégias de análise sintática para gramáticas livres de contexto, apresentam uma forma hierárquica em sua saída, que será uma árvore gramatical e derivações.
A seguir assinale a alternativa que represente essas duas estratégias de análise sintática que adotam uma forma hierárquica em sua saída, representando uma árvore gramatical e derivações.
Top-down e Botton-up
O lexer e o parser são duas ferramentas que trabalham juntas para reconhecer os símbolos que satisfação a especificação da gramática e também identificar a forma como esses símbolos devem ser combinados.
Assinale a alternativa que apresenta corretamente o trabalho em conjunto do lexer e do parser.
É o parser que inicia a análise da sentença solicitando ao lexer o próximo token
Há algumas estratégias para buscar o máximo de erros a cada compilação. Uma que é bastante utilizada é a estratégia Nível de Frase.
Assinale a alternativa que apresenta corretamente a estratégia Nível de frase.
Recuperação de erro com correção
Há algumas estratégias para buscar o máximo de erros a cada compilação. Uma que é bastante utilizada é a Modalidade do Desespero.
Assinale a alternativa que apresenta corretamente a estratégia Modalidade do Desespero
Recuperação de erro sem correção.
Dada uma sequência de símbolos terminais de uma gramática é possível determinar se essa sequência é ou não válida nessa gramática por meio da construção de uma árvore sintática.
 
Considerando a função do analisador sintático, avalie as afirmativas a seguir:
 
I. É um programa construído para uma gramática G que recebe como entrada uma sequência de símbolos terminais de seu alfabeto.
II. Constrói sua árvore sintática.
III. Faz a verificação dos tipos das variáveis.
IV. Faz a indicação de erros.
É correto o que se afirma em:
I, II e IV. 
Para definição de qualquer linguagem é essencial o desenvolvimento de sua gramática. E para tal temos algumas forma de especificar através de notações.
Assinale a alternativa que apresenta a correta ferramenta em Java que especifica a gramática.
Jflex 
Ao projetar um compilador devemos nos atentar ao tratamento e a comunicação dos erros. Para isso existem algumas estratégias que podemos adotar para melhor informar o usuário.
Assinale a alternativa que demonstre as duas estratégias de correção de erros
Modalidade do Desespero e Nível de Frase
O tratamentos e divulgação do erro em um projeto de compiladores é essencial para apoiar o desenvolvedor em escrever um código melhor e sem erros. Temos três metas para tratar os erros em um analisador sintático.
Considerando as três metas de verificação dos erros, avalie as afirmativas a seguir:
 
I. Relatar a presença de erros clara e com precisão
II. Capaz de se recuperar do erro a fim de conseguir identificar os próximos, se houver
III. Não ser lento no caso de programas corretos.
IV. Buscar corrigir os erros automaticamente
É correto apenas o que se afirma em:
Escolha uma:
a. II.
b. IV.
c. I, II e III.
d. I, II, III e IV. 
e. I, III e IV.
Dado a produção no padrão EBNF:
 <letra> ::= a | b | c | ... | Z
<numero> ::= 0|1|2|3|4|5|6|7|8|9
<dom> ::='com' | 'org'
<email> ::= <letra>{<letra> | [<numero>]}'@'{<letra>}'.'<dom>
 
A expressão regular equivalente a produção <email>, de acordo com as regras do JFLex é:
Assinale a alternativa correta:
Escolha uma:
a. email = letra{3} |numero* "@"letra* "." dom
b. email = letra{3} |numero* "@"letra* "." dom{3}
c. email = letra* "@" letra* "." dom
d. email = letra(letra*) |numero* "@"letra* "." dom
e. email = letra{3} |numero* "@"letra* "." com 
Com relação a estrutura para que os compiladores operem em uma sequência de fases, cada uma destas fases transforma o programa fonte em uma representação para a etapa seguinte.
 
Com base nas fases de operação dos compiladores, associe a COLUNA-A, que apresenta as três fases dos analisadores, com a COLUNA-B, que indica suas respectivas definições:
 
	COLUNA-A
	COLUNA-B
	I. Analise Léxica.
	A. Este analisador também conhecido como parser tem como tarefa principal determinar se o programa de entrada representado pelo fluxo de tokens possui as sentenças válidas para a linguagem de programação. Sendo esta analise a segunda etapa do processo de compilação e na maioria dos casos utiliza gramáticas livres de contexto para especificar a sintaxe de uma linguagem de programação.
	II. Analise Sintática.
	B. É a primeira fase do processo de compilação, também é conhecida como leitura ou scanning. Este analisador lê todos os caracteres do programa fonte e verifica se eles pertencem ao alfabeto da linguagem. Caso um caractere não pertença ao alfabeto da linguagem deve ser gerado um erro.
	III. Analise Semântica.
	C. Esta analise é responsável por verificar aspectos relacionados ao significado das instruções, essa é a terceira etapa do processo de compilação e nesse momento ocorre a validação de uma serie regras que não podem ser verificadas nas etapas anteriores.
A seguir assinale a alternativa que apresenta a associação correta
I-B; II-A; III-C.

Continue navegando