Difference between revisions of "Attribute Grammars/Exercise 3: Expressions"

From Wiki**3

< Attribute Grammars
(New page: <p><span lang="pt">A gramática seguinte admite atribuições dentro de expressões.</span></p> <table border="0" cellpadding="3"> <tr> <td align="right">S</td> <td...)
 
Line 1: Line 1:
 +
== Problem (in Portuguese) ==
 
<p><span lang="pt">A gram&aacute;tica seguinte admite atribui&ccedil;&otilde;es dentro de express&otilde;es.</span></p>
 
<p><span lang="pt">A gram&aacute;tica seguinte admite atribui&ccedil;&otilde;es dentro de express&otilde;es.</span></p>
 
<table border="0" cellpadding="3">
 
<table border="0" cellpadding="3">

Revision as of 17:44, 25 April 2010

Problem (in Portuguese)

A gramática seguinte admite atribuições dentro de expressões.

S -> E
E -> E + E | E := E | ( E ) | id

Quando uma expressão está a ser analisada é necessário diferenciar os casos onde a expressão está à direita, daqueles onde a expressão está à esquerda, do sinal de atribuição. Note que não é possível atribuir um valor a uma expressão. Por exemplo a expressão id + id := id é ilegal. No entanto, as expressões id := ( id + id ), quer id := ( id := id ), ou ainda ( id ) := ( id := ( id + id ) ) são autorizadas.

Considere que o operador ':=' é menos prioritário que o operador '+', além de associativo à direita, enquanto o operador '+' é associativo à esquerda.

Escreva um esquema de tradução que usa um atributo herdado ( e nenhum sintetizado ) chamado lado associado ao símbolo E, e que determina se a expressão corrente está à direita ou à esquerda da atribuição. O código associado à gramática emitirá uma mensagem de erro caso a expressão seja ilegal.

Solution