Considere-se o ficheiro de texto “Dados

Propaganda
DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR
Eng. Informática
Linguagens Formais e Compilação
Exame - 2ª chamada
2º Semestre
2h 30min
01/Julho/2010
IMPORTANTE: Apresente todos os cálculos efectuados na resolução das questões.
Pergunta
A.1
A.2
B.1
B.2
B.3
B.4
C.1
C.2
C.3
C.4
D.1
D.2
D.3
Total
Cotação
1,50
0,50
0,75
0,50
0,50
2,00
1,25
1,00
0,75
1,00
2,00
1,25
1,00 14,00
A. LINGUAGENS FORMAIS E AUTÓMATOS FINITOS DETERMINÍSTICOS (AFD)
Considere os conjuntos letra = { a, …, z, A, …, Z }, digito = { 0, …, 9 }, traço = '-', virgula = ',' e
branco = ' ', e o alfabeto S = letra  digito  traço  virgula  branco.
1. Desenhe um AFD (com o mínimo de estados) sobre S que reconheça os 3 tipos de padrões seguintes:
- título do livro (sequências de palavras separadas por 1 branco).
Ex: Introducao aos Compiladores
- mês e ano (data) de edição no formato MM-AA, com mes  {1,…,12} e ano  {2000,…, 2010}.
Ex: 10-05 (Outubro-2005)
- preço do livro no formato Ea,b (a – euros, b – cêntimos).
Ex: E12,5 (12 euros e 50 cêntimos)
2. Verifique se o AFD construído antes aceita as seguintes sequências de caracteres:
- 07-00
- E10.75
Justifique, simulando para cada um dos casos usando sequências de transições de estados do AFD.
B. ANÁLISE LÉXICA
Seja o AFD sobre o alfabeto S = letra  digito, com letra = { a, …, z, A, …, Z } e digito = { 0, …, 9 }.
1. O AFD incompleto apresentado reconhece 3 tipos de padrões. Identifique-os, justificando.
Dê um exemplo de cada um dos 3 padrões.
2. Construa a tabela completa das d-transições associada ao AFD apresentado.
3. Verifique se a palavra A23ab2 é reconhecida pelo AFD. Justifique, apresentando todos os passos da
simulação (usando a tabela construída em 2 e não o AFD).
4. Implemente um programa em LEX que, dado um texto com caracteres:
–
determine o número de palavras iniciadas e terminadas por vogais;
–
substitua as palavras que contém a sub-palavra ao pela palavra SIM, mas apenas quando ao
não forma uma palavra isolada;
–
determine o número de ocorrências da palavra SE apenas quando se encontra inserida no início
de uma outra maior;
–
determine o número de palavras com pelo menos 1 A e no máximo com 3 A's;
–
determine o número de palavras com exactamente 2 a's não seguidos (aab só conta 1 vez);
–
determine o número de palavras que correspondem a números positivos maiores do que 9.
Nota: palavra define-se como sequência de letras
C. ANÁLISE SINTÁTICA DESCENDENTE
Dada a gramática G = ( { S, A, B }, { a, b, c, d, e, f }, P, S ), com o seguinte conjunto de produções P:
p1) S → S a
p2) S → S b
p3) S → AB
p4) A → c A
p5) A → d
p6) A → e
p7) B → e B
p8) B → f
p9) B → e
1. Calcule os First’s e os Follow’s de todos os símbolos não-terminais de G. Apresente os cálculos.
2. Determine os Lookahead's de todas as produções e verifique se G é do tipo LL(1).
3. Construa a tabela sintáctica predicativa (Tabela Oráculo), justificando cada elemento da tabela.
4. Verifique, simulando o algoritmo do analisador sintático predicativo não recursivo (ParserLL), se a frase
c d f e b a a pertence à linguagem gerada por G. Para tal, use a tabela seguinte:
S
Topo(Z)
S
...
S$
...

a
dfebaa$
...
a
c
...
acção
?
...
D. ANÁLISE SINTÁTICA ASCENDENTE – PARSER LR
Considere a gramática G = ( { S, A, B }, { a, b, c, d }, P, S ), com o seguinte conjunto de produções P:
p1) Z → S $
p2) S → A B
p3) A → B d A
p4) A → a
p5) B → c B
p6) B → b
em que:
First(S) = { a, b, c }
First(A) = { a, b, c }
First(B) = { b, c }
Follow(S) = { $ }
Follow(A) = { b, c }
Follow(B) = { $, d }
1. Construa o Autómato Finito Determinístico LR(1) para a gramática G e verifique se é LR(1).
2. Construa a Tabela Oráculo LR(1) da gramática G, associada ao AFD LR(1) construído antes.
3. Verifique se a frase b d c b d a b pertence à linguagem gerada por G. Justifique, podendo usar a tabela
seguinte para simular o comportamento do autómato LR(1):
acção
M[1,b] = ?
...
s
?
...
Pilha estados Z
1
?
...
Topo(Z)
1
?
...
a
b
?
...

a
dcbdab$
?
...
Download