Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA LINGUAGENS DE PROGRAMAÇÃO Engenharia de Software Exercícios de Fixação – Descrição Sintática 1. Dada a gramática BNF de uma pequena linguagem de programação: <programa> ::= begin <lista_stmt> end <lista_stmt> ::= <stmt> | <stmt> ; <lista_stmt> <stmt> ::= <var> := <expressão> <var> ::= A | B | C | D | <expressão> <expressão> ::= <var> + <var> | <var> - <var> | <var> / <var> | <var> * <var> | <var> a. Construa a árvore de decisão para a seguinte expressão: begin A := B + C ; B := C end b. Construa a árvore de decisão para a seguinte expressão: begin A := B + C * D end c. Na derivação acima, existe uma ambiguidade. Como seria a gramática para evitar essa ambiguidade? (precedência do operador *) d. Construa a árvore de decisão para a seguinte expressão, usando a gramática construída no item anterior: begin A := C + B * C * D end e. Observe que a expressão anterior utiliza duas vezes o mesmo operador. Altere a gramática anterior definindo associatividade para o operador * à esquerda. 2. Dada a expressão: int x = 123; int y = 432; int z = x + y; print z + 2; print z; print y; print x; Defina uma gramática BNF suficiente para descrever a sintaxe da linguagem utilizada nessa expressão.
Compartilhar