Você está na página 1de 3

CENTRO UNIVERSITÁRIO DOS GUARARAPES (UNIFG)

LISTA DE EXERCÍCIOS DE COMPILADORES – CCO – 8MA/NA

1. Considere os tokens:
 Números inteiros sem sinal
 Números reais sem sinal
 Operadores aritméticos: +, -, /, *, (, )
 Operador de atribuição: =
 Identificadores, onde são válidas apenas letras
Escreva regras usando expressões regulares e desenhe um autômato finito para reconhecer os tokens
acima.

2. Dada a gramática:
E -> E + T | E - T | T
T -> T * F | F
F -> ( E ) | num
Escreva derivações e árvores sintáticas para as expressões a seguir (assuma que os numerais são
instâncias do terminal num):
 3+4*5-6
 3*(4-5+6)
 3-(4+5*6)

3. Utilizando o Jflap escreva uma gramática capaz de gerar uma sequência pares de “a” e “b”.
Exemplo: aabb, aaaabbbb, e assim por diante. As janelas do Jflap devem ser expostas em
fomato.pdf.
4. Utilizando o Jflap escreva uma gramática capaz de gerar uma sequência ímpar de “a” e “b”.
Exemplo: ab, aaabbb, e assim por diante. As janelas do Jflap devem ser expostas em
fomato.pdf.
5. Utilizando o Gals ( Gerador de Analisador Léxico e Sintático) escreva um analisador léxico capaz de
reconhecer funções do tipo y = ax+b onde a e b são números reais. Escreva também uma gramática para
o problema anterior utilizando-se de símbolos não terminais. Dê um “print” na tabela de análise léxica e
sintática.
6. A gramática G = ({S, A, B}, {0, 1}, P, S), onde P é dado pelas regras de produção S → 0AB | 1BA A
→ 0AS | 1A | ε B → 0B | 1BS | ε gera uma linguagem que
(A) pertence à classe Regular.
(B) contém a cadeia vazia ε.
(C) pode ser aceita por um autômato com pilha.
(D) pode ser denotada por uma expressão regular.
(E) é igual ao conjunto de cadeias { x ∈ {0, 1}* | x tem quantidade igual de zero (0) e de um (1) }

7. Em um texto fonte de linguagem de programação, o compilador realiza a identificação da função


gramatical das palavras, a verificação da estrutura gramatical dos comandos e dos seus significados. Os
componentes arquiteturais de um compilador que realizam essas atividades são, respectivamente,
(A) analisador léxico, analisador semântico, otimizador de código intermediário.
(B) analisador léxico, analisador sintático, analisador semântico.
(C) analisador sintático, gerador de código, analisador semântico.
(D) analisador semântico, gerador de código intermediário, otimizador de código intermediário.
(E) analisador sintático, analisador semântico, gerador de código.

8. Em relação aos conceitos de verificação e tipos de uma linguagem de programação, considere as


afirmativas a seguir.
I. A verificação de tipos é a atividade de assegurar que os operandos de um operador sejam de
tipos compatíveis. Um tipo compatível é aquele válido para o operador ou com permissão, nas
regras da linguagem, para ser convertido pelo código gerado pelo compilador para um tipo válido.
II. É melhor detectar erros durante a execução do que na compilação de um programa, pois no processo
de compilação de um algoritmo deve-se dar prioridade a questões mais complexas da análise
semântica do programa.
III. Quando uma linguagem permite que uma dada célula de memória armazene valores de diferentes
tipos em diversos momentos durante a execução, a verificação de tipos torna-se desnecessária, pois
não há como realizar um controle de tipos em iterações diferentes do algoritmo.
IV. Se todas as vinculações de variáveis a tipos forem estáticas em uma linguagem, a verificação de tipos
quase sempre poderá ser feita estaticamente. A vinculação dinâmica de tipos requer a verificação
destes em tempo de execução, o que é chamado de verificação dinâmica de tipos.
Assinale a alternativa correta.
a) Somente as afirmativas I e II são corretas.
b) Somente as afirmativas I e IV são corretas.
c) Somente as afirmativas III e IV são corretas.
d) Somente as afirmativas I, II e III são corretas.
e) Somente as afirmativas II, III e IV são corretas
9. Considere a gramática das expressões a
seguir. S → E$
E→E+T
E→T
T→T∗F
T→F
F → id
F→
(E)
Sobre essa gramática, considere as afirmativas a seguir.
I. A gramática é LL(1).
II. O operador + possui uma precedência maior que o operador ∗.
III. Não é possível construir um analisador descendente recursivo para a gramática.
IV. Os terminais + ∗ ) $ pertencem ao conjunto FOLLOW de F.
Assinale a alternativa correta.
a) Somente as afirmativas I e II são corretas.
b) Somente as afirmativas I e IV são corretas.
c) Somente as afirmativas III e IV são corretas.
d) Somente as afirmativas I, II e III são corretas.
e) Somente as afirmativas II, III e IV são corretas.

10. Considere a gramática a


seguir. S → E$
E→T+E
E→T
T→x
Com relação a essa gramática, atribua V (verdadeiro) ou F (falso) às afirmativas a seguir.
( ) A gramática é LR(0).
( ) Em uma tabela de análise SLR, a produção T → x terá reduções somente nos terminais + e $.
( ) A gramática é SLR.
( ) Em uma tabela de análise LR(0), a produção E → T terá reduções somente nos terminais x e +.
( ) A gramática é LR(1).

Assinale a alternativa que contém, de cima para baixo, a sequência correta.


a) V, V, F, F, V.
b) V, F, V, F, F.
c) V, F, F, V, F.
d) F, V, V, F, V.
e) F, V, F, V, F

Você também pode gostar