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

From Wiki**3

< Attribute Grammars
Line 13: Line 13:
 
</tr>
 
</tr>
 
</table>
 
</table>
<p><span lang="pt">Quando uma express&atilde;o est&aacute; a ser analisada &eacute; necess&aacute;rio diferenciar os casos onde a express&atilde;o est&aacute; &agrave; direita, daqueles onde a express&atilde;o est&aacute; &agrave; esquerda, do sinal de atribui&ccedil;&atilde;o. Note que n&atilde;o &eacute; poss&iacute;vel atribuir um valor a uma express&atilde;o. Por exemplo a express&atilde;o   <strong>id + id := id</strong> &eacute; ilegal. No entanto, as express&otilde;es   <strong>id := ( id + id )</strong>, quer    <strong>id := ( id := id )</strong>, ou ainda   <strong>( id ) := ( id := ( id + id ) )</strong> s&atilde;o autorizadas.</span></p>
+
 
<p><span lang="pt">Considere que o operador ':=' &eacute; menos priorit&aacute;rio que o operador '+', al&eacute;m de associativo &agrave; direita, enquanto o operador '+' &eacute; associativo &agrave; esquerda.</span></p>
+
Quando uma express&atilde;o est&aacute; a ser analisada &eacute; necess&aacute;rio diferenciar os casos onde a express&atilde;o est&aacute; &agrave; direita, daqueles onde a express&atilde;o est&aacute; &agrave; esquerda, do sinal de atribui&ccedil;&atilde;o. Note que n&atilde;o &eacute; poss&iacute;vel atribuir um valor a uma express&atilde;o. Por exemplo a express&atilde;o '''id + id := id''' &eacute; ilegal. No entanto, as express&otilde;es '''id := ( id + id )''', quer    '''id := ( id := id )''', ou ainda '''( id ) := ( id := ( id + id ) )''' s&atilde;o autorizadas.
<p><span lang="pt">Escreva um esquema de tradu&ccedil;&atilde;o que usa um atributo herdado ( e nenhum sintetizado ) chamado   <tt>lado</tt> associado ao s&iacute;mbolo   <tt>E</tt>, e que determina se a express&atilde;o corrente est&aacute; &agrave; direita ou &agrave; esquerda da atribui&ccedil;&atilde;o. O c&oacute;digo associado &agrave; gram&aacute;tica emitir&aacute; uma mensagem de erro caso a express&atilde;o seja ilegal.</span></p>
+
 
 +
Considere que o operador ''':=''' &eacute; menos priorit&aacute;rio que o operador '''+''', al&eacute;m de associativo &agrave; direita, enquanto o operador '+' &eacute; associativo &agrave; esquerda.
 +
 
 +
Escreva um esquema de tradu&ccedil;&atilde;o que usa um atributo herdado (e nenhum sintetizado) chamado '''lado''' associado ao s&iacute;mbolo '''E''', e que determina se a express&atilde;o corrente est&aacute; &agrave; direita ou &agrave; esquerda da atribui&ccedil;&atilde;o. O c&oacute;digo associado &agrave; gram&aacute;tica emitir&aacute; uma mensagem de erro caso a express&atilde;o seja ilegal.
  
 
== Solution ==
 
== Solution ==

Revision as of 17:08, 10 April 2018

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