(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: | ||
− | + | <p><span lang="pt">Considere a seguinte gramática atributiva:</span></p> | |
− | s | + | <table border="0" cellpadding="3"> |
− | + | <tbody> | |
− | + | <tr> | |
− | + | <td align="right">s</td> | |
− | + | <td align="left">-></td> | |
− | symbol 1 | + | <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> | |
− | symbol | + | <tr> |
− | + | <td align="right"> </td> | |
− | + | <td align="left"> </td> | |
− | + | <td align="left"> </td> | |
− | + | <td align="left"> </td> | |
− | O elemento lexical dig representa um | + | <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 == | == Solution == |
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 | ||||
} | ||||
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.