Buscar

Compiladores - Análise léxica - Exercícios

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 4 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

Prévia do material em texto

Compiladores - Análise léxica
Exercícios
1. 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 a cadeia que faz parte dessa expressão:
Você acertou!
E. aabbbc.
Lembrando os conceitos de expressões regulares:
?   Zero ou um;➜
*   Zero, um ou mais;➜
+ ➜ UM ou mais;
{n,m}   ➜ De n até m.
Assim, a primeira alternativa não contém o caractere c, o que a torna inválida. A
outra alternativa contém um a (1  a 4 caracteres a) e  um c (um ou mais  c).  A
alternativa aaccbb está   de   acordo   por   conter   dois   a e   dois   c.  As   alternativas
restantes contêm, respectivamente, um b e três b em sua expressão, estando de
acordo com a notação b* (0 ou mais b.)
2. As palavras-chave são usadas para expressar estruturas da linguagem, como
comandos condicionais, de repetição, etc. Geralmente são reservadas, não
podendo ser utilizadas como identificadores.
Entre as opções a seguir, considerando a linguagem de programação Java, assinale
a que contém uma cadeia que pode ser usada como identificador.
Você acertou!
B. SourceT.
A  palavra System é   usada   em   algumas   linguagens   como   uma   chamada   para
alguma operação (como o System.outo.print, do Java). SourceT não faz parte das
palavras   reservadas,   podendo   ser   usado   como   identificador   normalmente.   O
comando whileé uma estrutura comum de repetição; null,em algumas linguagens,
é usado para representar vazio ou nulo; e int é uma expressão tipada, ou seja, um
tipo de variável em linguagens de programação.
3. Observe o código Java da imagem a seguir para a realização da questão:
Das opções a seguir, a que representa corretamente um par (token, lexema) que
pode estar relacionado com a figura é:
Você acertou!
D. (ID, soma).
Considerando os padrões para a análise léxica, while é reservado e não pode ser
usado   como   identificador.   Na   sequência,   há uma   ambiguidade,   em   que   o
termo soma aparece   tanto   como token como   lexema,   sendo   que soma é   um
identificador da linguagem. Em seguida, NUM é incompatível com x, pois este é
um   identificador. ID e soma estão   corretos   em   sua   combinação,   e   x   já   é   um
lexema, e não será usado como token para a numeração.
4. Os autômatos finitos são uma importante ferramenta que facilita a conversão de
expressão regular para um modelo melhor compreensível pela linguagem de
programação, muito usado também como um analisador léxico. Considere o
seguinte AFD:
É correto afirmar sobre esse AFD:
I. Apresenta, no mínimo, um número inteiro com dois caracteres.
II. Aceita o lexema 002.002.
III. Sempre se iniciará com um número.
IV. Se símbolo ponto (.) já foi lido, então de certo o autômato analisador estará em 
algum estado final.
Está correto o que se afirma em:
Resposta correta.
B. apenas II.
Pode-se notar que o autômato inicia uma transição com um dígito (0 a 9) ou com
um ponto (.). Se a entrada for, por exemplo, 5.4, o autômato aceita e realiza sua
classificação conforme conveniente. Portanto, o item I está incorreto. Para o item
II, o primeiro '0' ativa a transição de q0 para q1. Na sequência, 0 e 2 permanecem
em   q1.  Ao   ser   lido   o   ponto,   o   autômato   passa   para   q2 e   permite   qualquer
quantidade de dígitos posteriormente. Portanto, o item II está correto. O item III
afirma   que   sempre   aceitará   cadeias   que   iniciem   apenas   em  números,   mas  a
cadeia .05, por exemplo, é aceita e, portanto, torna o item III incorreto. Quando um
ponto for lido antes de qualquer número (como primeiro caractere), o autômato
passará de q0 para q3. Observe que, apesar de já se ter lido um ponto, ainda não
está no estado final, pois aguarda pelo menos um dígito. Portanto, o item IV está
incorreto.
5. Sobre os compiladores e suas análises léxicas e sintáticas, analise os itens a
seguir:
I. Um dos componentes léxicos de uma linguagem se refere às palavras reservadas.
No caso da linguagem Pascal, entre as palavras reservadas, estão: AND, ARRAY,
BEGIN, CONST, DIV, ELSE, FUNCTION, LABEL, MOD, NOT, OF, OR, PROCEDURE,
PROGRAM,RECORD,REPEAT,TO,TYPE, UNTIL, VAR, WHILE.
II. A análise léxica/sintática de uma linguagem que tem palavras reservadas tende a
ser mais complexa que a de linguagens que têm apenas palavras-chave usadas
também como identificadores.
III. Um dos componentes sintáticos de uma linguagem se refere aos identificadores.
No caso da linguagem Pascal, estes são cadeias de caracteres contendo letras
('A', ..., 'Z', 'a', ..., 'z'), dígitos ('0', ... '9') e o caractere sublinhado ('_'), podendo o
primeiro caractere ser uma letra ou número.
IV. Se uma regra diz que um token se estende até que seja encontrado um caractere
que não faz parte dele, essa regra permitiria a um analisador léxico reconhecer em
XYZ + 1 uma ocorrência de um identificador XYZ.
V. Na linguagem Pascal, não se faz distinção entre maiúsculas e minúsculas em
identificadores e palavras reservadas. Em C, no entanto, identificadores como
TabSimb e tabsimb são distintos, permitindo que identificadores relacionados
tenham formas semelhantes.
Está correto o que se afirma em:
Você acertou!
C. I, IV e V, apenas.
O   item   I   apresenta   diretrizes   corretas,   pois   palavras   reservadas   também   são
componentes   léxicos   de   acordo   com   os   exemplos   mostrados   no   item.   Em   II,
afirma-se que palavras-chave podem ser usadas como identificadores,  o que é
incorreto. Em III, o texto termina dizendo que se pode iniciar por número, porém a
grande maioria das linguagens não permite o início de um identificador de forma
numérica. Em IV, é descrita uma regra aceita para a leitura da cadeia em questão.
Em V, é fato que Pascal pode não diferenciar,  mas C, Java e outras liguagens
diferenciam   maiúsculas   de   minúsculas   (ainda   que   não   se   recomende   nomes
iguais, mesmo com diferenciação de maiúsculo,  para evitar confusões em uma
análise humana).
	Exercícios

Continue navegando