7
) Considere a seguinte gramática em notação BNF:
<
<
<
<
<
tdecl> → <type> <varlist> ;
varlist> → <var> | <varlist> , <var>
var> → a | b | c | d | e | f | g
type> → static <basictype> | <basictype>
basictype> → int | bool | string
Apresente uma derivação à extrema esquerda e construa a árvore de análise para cada
uma das seguintes sentenças:
a) int a, b;
b) static string a, b, c;
c) bool a, b, c, d, e;
8
9
) Prove que a seguinte gramática é ambígua:
<
<
<
S> -> <A>
A> -> <A> + <A> | <id>
id> -> a | b | c
) Considerando a existência de um analisador léxico implementado em C capaz de
reconhecer os seguintes tokens:
INT_LIT: número inteiro;
IDENT: identificador de variável;
ADD_OP: operador de soma;
SUB_OP: operador de subtração;
LEFT_PAREN: parêntese esquerdo;
RIGHT_PAREN: parêntese direito;
Os quais são referentes a seguinte gramática:
<
termo> -> <fator> + <fator>
<fator> - <fator>
fator> -> identificador
|
<
|
|
numero inteiro
( <termo> )
a) De acordo com a descrição dos tokens e da gramática, apresente a
implementação em C das funções que descrevem a gramática em um analisador
sintático baseado no método de análise descendente recursiva.
b) Simule a execução das funções do analisador léxico e apresente a árvore de
análise gerada para o seguinte programa de entrada: (n1 + n2) – 25