Attribute Grammars/Exercise 3: Expressions: Difference between revisions

From Wiki**3

< Attribute Grammars
No edit summary
 
Line 1: Line 1:
== Problem (in Portuguese) ==
#REDIRECT [[ist:Attribute Grammars/Exercise 3: Expressions]]
<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">
<tr>
<td align="left" style="padding-left: 100px;">S -&gt; E</td>
</tr>
<tr>
<td align="left" style="padding-left: 100px;">E -&gt; E '''+''' E | E ''':=''' E | '''(''' E ''')''' | '''id'''</td>
</tr>
</table>
 
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.
 
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 ==
 
[[category:Compiladores]]
[[category:Ensino]]

Latest revision as of 23:13, 5 December 2018