|
|
(11 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| <p><span lang="pt">Considere a seguinte gramática atributiva:</span></p>
| | #REDIRECT [[ist:Attribute Grammars/Exercise 2: Numbers]] |
| <table border="0" cellpadding="3">
| |
| <tbody>
| |
| <tr>
| |
| <td align="right">s</td>
| |
| <td align="left">-></td>
| |
| <td align="left"><em>symbol</em> <sub>1</sub> <strong>#</strong> <em>symbol</em> <sub>2</sub></td>
| |
| <td align="left">{</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <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>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"><em>symbol</em> <sub>1</sub>. <em>x</em> = 1</td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"><em>symbol</em> <sub>2</sub>. <em>x</em> = 1</td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left">}</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"><em>symbol</em> <sub>1</sub></td>
| |
| <td align="left">-></td>
| |
| <td align="left"><em>symbol</em> <sub>2</sub> <strong>dig</strong></td>
| |
| <td align="left">{</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </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"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </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"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left">}</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"><em>symbol</em></td>
| |
| <td align="left">-></td>
| |
| <td align="left"><strong>dig</strong></td>
| |
| <td align="left">{</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left">symbol.val = <strong>dig</strong>.val * symbol.x</td>
| |
| </tr>
| |
| <tr>
| |
| <td align="right"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left"> </td>
| |
| <td align="left">}</td>
| |
| <td align="left"> </td>
| |
| </tr>
| |
| </tbody>
| |
| </table>
| |
| <p><span lang="pt"> <br /> O elemento lexical <strong>dig</strong> representa um dígito de <strong>0</strong> a <strong>9</strong>, e o seu atributo <em>val</em> representa o valor numérico correspondente.</span></p>
| |
| <ol>
| |
| <li> <span lang="pt">Represente a àrvore semântica para a entrada <strong>328#37</strong>.</span> </li>
| |
| <li> <span lang="pt">Apresente uma gramática atributiva equivalente que apenas contenha atributos sintetizados.</span> </li>
| |
| </ol>
| |
| | |
| == Solution ==
| |
| | |
| [[category:Compilers]] | |
| [[category:Teaching]]
| |