UFRN – DIMAP
DIM0339 - Compiladores
Segundo Semestre de 2005
Exercícios - Análise sintática (1a. Parte)
1.
Projetar uma gramática não ambígua para uma
linguagem de expressões lógicas usando as constantes true
e false. A linguagem deverá conter os
operadores booleanos de negação (not),
conjunção (and) e disjunção (or),
com as seguintes características:
Operador |
Características |
and |
Binário, infixo |
or |
Binário, infixo |
not |
Unário, posfixo |
( ) |
Unário |
A precedência dos operadores é dada por: ( ) > not > and > or.
2.
Projetar uma gramática não ambígua para a
linguagem das expressões regulares que poden ser
construídas usando o alfabeto {0, 1}. Os operadores que devem poder ser usados
nas expressões regulares definidas por esta gramática são os seguintes (dados
em ordem de menor a maior precedência):
Sintaxe |
Operação |
Número de operandos |
Associatividade |
R|S |
União |
binária |
Assoc. a esquerda |
RS |
Concatenação |
binária |
Assoc. a direita |
R+ , R* |
Fechamentos |
unárias |
-- |
( R ) |
Parênteses |
unária |
-- |
Alguns exemplos de expressões regulares que podem ser obtidas usando esta gramática são:
010
(01*|(0|1+)*|1)101
1(0(0+)1|01(0+)*1)*1111
(11000*+*)+**
3. Projetar gramáticas não ambíguas para linguagens de declarações de variáveis inteiras, reais e caracteres similares àquelas de C e de Pascal.
4. Adicionar declarações de arrays e registros (records) à declarações do exercício anterior.
5. Exercício 4.2 do livro-texto.
6. Exercício 4.3 do livro-texto.
7. Exercício 4.5 do livro-texto.
8. Exercício 4.6 do livro-texto.
9. Construir gramáticas para as expressões das linguagens: Pascal, C, Haskell e Prolog.
10. Exercício 4.9 do livro-texto.
11. Exercício 3.10 do livro-texto.
12. Exercício 4.11 do livro-texto.