Você está na página 1de 4

C ONSTRUÇÃO DE C OMPILADORES I [BCC328]

Prova 1 (2020–2) Departamento de Computação


14 de julho de 2021 Universidade Federal de Ouro Preto
Prof. José Romildo Malaquias
Nome:
Matrícula:

Questão 1. Responda às seguintes perguntas, com explicações detalhadas.


a) Dê um exemplo de gramática ambígua, e explique porque ela é ambígua, dando evidências através da construção
de árvores sintáticas para uma determinada cadeia da linguagem.

b) Qual é a relação entre os analisadores léxico e sintático de um compilador?

Questão 2. Considere a seguinte especificação léxica (na notação do ocamllex):


[’ ’ ’\t’ ’\n’]+ { }
’#’ [^ ’\n’]* { }
’=’ { assign }
’+’ { plus }
’-’ { minus }
’*’ { times }
’/’ { div }
’;’ { semicolon }
"let" { let }
"in" { in }
[’+’ ’-’]? ([’0’-’9’]+ ’.’ [’0’-’9’]* | [’0’-’9’]* ’.’ [’0’-’9’]+) { real }
[’+’ ’-’]? ([’0’-’9’]+ | "0x" [’0’-’9’ ’A’-’F’ ’a’-’f’]+) { integer }
[’a’-’z’ ’A’-’Z’ ’_’] [’a’-’z’ ’A’-’Z’ ’0’-’9’ ’_’]* { id }
"begin" { begin }
"end" { end }
_ { error }

1
Observe que os caracteres brancos (primeira regra) e os comentários (segunda regra) são descartados.
Faça a análise léxica do programa a seguir, indicando a sequência de tokens encontrados.
Em sua resposta anote os tokens encontrados na linha da tabela correspondente à linha do programa em que ele foi
encontrado.

1 # calculating
2 let x = 2 + -44 in
3 lety = 3 * x in
4 begin
5 answer := x - 0x23AF;
6 print(answer)
7 end

linha tokens
1
2
3
4
5
6
7
Questão 3. Considere a seguinte gramática livre de contexto:

S’ → S $
S →
S → X S
B → \ begin { WORD }
E → \ end { WORD }
X → B S E
X → { S }
X → WORD
X → begin
X → end
X → \ WORD

a) Determine quais símbolos não terminais são anuláveis.


b) Determine o conjunto FIRST de cada símbolo não terminal.

c) Determine o conjunto FOLLOW de cada símbolo não terminal.

NT NULLABLE FIRST FOLLOW


S’
S
B
E
X

Questão 4. Considere a seguinte gramática livre de contexto:

2
0 S → A $
1 A → u B D z
2 B → B v
3 B → w
4 D → E F
5 E → y
6 E →
7 F → x
8 F →
Os símbolos não terminais anuláveis, bem como os conjuntos FIRST e FOLLOW estão indicados na tabela a seguir.

NT NULLABLE FIRST FOLLOW


S F u
A F u $
B F w v x y z
D V x y z
E V y x z
F V x z

a) Construa a tabela de análise sintática LL(1) para a gramática.

NT u v w x y z $

b) Esta gramática é LL(1)? Justifique sua resposta.

c) Modifique esta gramática o mínimo possível para obter uma gramática LL(1) equivalente (que gera a mesma lin-
guagem).

3
Questão 5. A gramática a seguir não é LL(1). Observe que ela tem regras de produção para algum símbolo não terminal
que começam com um mesmo prefixo no lado direito da regra. Faça a fatoração à esquerda desta gramática, obtendo uma
gramática equivalente.
S → G $
G → P
G → P G
P → id : R
R →
R → id R

Você também pode gostar