Tópicos
Gramáticas. Conjuntos FIRST e FOLLOW. Análise sintáctica descendente LL(1).
Exercício 1
Considere a gramática:
bexpr | -> | bexpr or bexpr | bterm |
bterm | -> | bterm and bterm | bfactor |
bfactor | -> | not bfactor | ( bexpr ) | true | false |
- Identifique os símbolos terminais e não terminais da gramática.
- Demonstre que a gramática é ambígua derivando 2 árvores de análise diferentes para a mesma sequência de entrada.
- Construa uma gramática não ambígua equivalente.
-
Construa a árvore de análise para a entrada:
not ( true or false and true )
Exercício 2
Considere a seguinte gramática:
E | -> | E + T | E - T | T |
T | -> | T * F | T / F | F |
F | -> | ( E ) | id |
- Transforme a gramática por forma a poder ser analisada por um analisador sintáctico preditivo.
- Calcule os conjuntos FIRST e FOLLOW para os símbolos não terminais.
- Elabore a tabela de análise do analisador sintáctico preditivo para esta gramática.
- Apresente uma tabela com o conteúdo da pilha, a entrada e a acção realizada em cada passo da análise quando a sequência de entrada é: a*(b+c).
Exercício 3
Considere a seguinte gramática, onde S é o símbolo inicial e { d, e, f, g, h } é o conjunto de símbolos terminais:
S | -> | A B d | C d |
A | -> | C d h | S e |
C | -> | g B | h f |
B | -> | g | ε |
- Examine a gramática e transforme-a por forma a poder construir um analisador sintáctico preditivo para a linguagem correspondente.
- Construa os conjuntos FIRST e FOLLOW dos símbolos não terminais da gramática obtida na pergunta anterior.
- Construa a tabela de análise do analisador sintáctico preditivo.
- Apresente uma tabela com o conteúdo da pilha, a entrada e a acção realizada em cada passo da análise quando a sequência de entrada é: hfded.
Resolução
Soluções dos exercícios no wiki da disciplina.