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.