Difference between revisions of "Attribute Grammars/Exercise 2: Numbers"

From Wiki**3

< Attribute Grammars
(New page: Considere a seguinte gramática atributiva: s -> symbol 1 # symbol 2 { s. val = symbol 1. val + symbol 2. val symbol 1. x = 1 symbol 2. x = 1 ...)
 
Line 1: Line 1:
Considere a seguinte gramática atributiva:
+
<p><span lang="pt">Considere a seguinte gram&aacute;tica atributiva:</span></p>
s -> symbol 1 # symbol 2 {
+
<table border="0" cellpadding="3">
        s. val = symbol 1. val + symbol 2. val
+
<tbody>
        symbol 1. x = 1
+
<tr>
        symbol 2. x = 1
+
<td align="right">s</td>
      }
+
<td align="left">-&gt;</td>
symbol 1 -> symbol 2 dig {
+
<td align="left"><em>symbol</em> <sub>1</sub> <strong>#</strong> <em>symbol</em> <sub>2</sub></td>
        symbol 2. x = symbol 1. x * 5
+
<td align="left">{</td>
        symbol 1.val = symbol 2.val + dig.val * symbol 1.x
+
<td align="left">&nbsp;</td>
      }
+
</tr>
symbol -> dig {
+
<tr>
        symbol.val = dig.val * symbol.x
+
<td align="right">&nbsp;</td>
      }
+
<td align="left">&nbsp;</td>
 
+
<td align="left">&nbsp;</td>
 
+
<td align="left">&nbsp;</td>
O elemento lexical dig representa um dígito de 0 a 9, e o seu atributo val representa o valor numérico correspondente.
+
<td align="left"><em>s</em>.       <em>val</em> =       <em>symbol</em> <sub>1</sub>.       <em>val</em> +       <em>symbol</em> <sub>2</sub>.       <em>val</em></td>
 
+
</tr>
  1. Represente a àrvore semântica para a entrada 328#37.
+
<tr>
  2. Apresente uma gramática atributiva equivalente que apenas contenha atributos sintetizados.
+
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left"><em>symbol</em> <sub>1</sub>.       <em>x</em> = 1</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left"><em>symbol</em> <sub>2</sub>.       <em>x</em> = 1</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">}</td>
 +
<td align="left">&nbsp;</td>
 +
</tr>
 +
<tr>
 +
<td align="right"><em>symbol</em> <sub>1</sub></td>
 +
<td align="left">-&gt;</td>
 +
<td align="left"><em>symbol</em> <sub>2</sub> <strong>dig</strong></td>
 +
<td align="left">{</td>
 +
<td align="left">&nbsp;</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left"><em>symbol</em> <sub>2</sub>.       <em>x</em> =       <em>symbol</em> <sub>1</sub>.       <em>x</em> * 5</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">symbol       <sub>1</sub>.val = symbol       <sub>2</sub>.val +       <strong>dig</strong>.val * symbol       <sub>1</sub>.x</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">}</td>
 +
<td align="left">&nbsp;</td>
 +
</tr>
 +
<tr>
 +
<td align="right"><em>symbol</em></td>
 +
<td align="left">-&gt;</td>
 +
<td align="left"><strong>dig</strong></td>
 +
<td align="left">{</td>
 +
<td align="left">&nbsp;</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">symbol.val =       <strong>dig</strong>.val * symbol.x</td>
 +
</tr>
 +
<tr>
 +
<td align="right">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">&nbsp;</td>
 +
<td align="left">}</td>
 +
<td align="left">&nbsp;</td>
 +
</tr>
 +
</tbody>
 +
</table>
 +
<p><span lang="pt"> <br /> O elemento lexical   <strong>dig</strong> representa um d&iacute;gito de   <strong>0</strong> a   <strong>9</strong>, e o seu atributo   <em>val</em> representa o valor num&eacute;rico correspondente.</span></p>
 +
<ol>
 +
<li> <span lang="pt">Represente a &agrave;rvore sem&acirc;ntica para a entrada     <strong>328#37</strong>.</span> </li>
 +
<li> <span lang="pt">Apresente uma gram&aacute;tica atributiva equivalente que apenas contenha atributos sintetizados.</span> </li>
 +
</ol>
  
 
== Solution ==
 
== Solution ==

Revision as of 17:15, 18 April 2009

Considere a seguinte gramática atributiva:

<tbody> </tbody>
s -> symbol 1 # symbol 2 {  
        s. val = symbol 1. val + symbol 2. val
        symbol 1. x = 1
        symbol 2. x = 1
      }  
symbol 1 -> symbol 2 dig {  
        symbol 2. x = symbol 1. x * 5
        symbol 1.val = symbol 2.val + dig.val * symbol 1.x
      }  
symbol -> dig {  
        symbol.val = dig.val * symbol.x
      }  


O elemento lexical dig representa um dígito de 0 a 9, e o seu atributo val representa o valor numérico correspondente.

  1. Represente a àrvore semântica para a entrada 328#37.
  2. Apresente uma gramática atributiva equivalente que apenas contenha atributos sintetizados.

Solution