Baixe o app para aproveitar ainda mais
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
Compartilhar