Apresente o código de três endereços, representado por triplas, da expressão aritmética x = a + a * (b - c) + (b - c) * d, sobre a gramática livre de contexto apresentada a seguir (Aho, 2008).
Notação Algébrica:
G = ({A, E, T, F, V}, {a, b, c, d, x, =, +, -, *, /, (, )}, P, A)
P = {A → V=E
E → T+E | T-E | T
T → F*T | F/T | F
F → (E) | V
V → a | b | c | d | x}
Notação de Backus-Naur (BNF):
G = ({atr, exp, ter, fat, var}, {a, b, c, d, x, =, +, -, *, /, (, )}, P, atr)
P = {<atr> ::= <var>=<exp>
<exp> ::= <ter>+<exp> | <ter>-<exp> | <ter>
<ter> ::= <fat>*<ter> | <fat>/<ter> | <fat>
<fat> ::= (<exp>) | <var>
<var> ::= a | b | c | d | x}
| oper | arg1 | arg2 | |
|---|---|---|---|
| (0) | - | b | c |
| (1) | * | a | (0) |
| (2) | * | (0) | d |
| (3) | + | (1) | (2) |
| (4) | + | a | (3) |
| (5) | = | x | (4) |
Aho, Alfred V. (2008). Compiladores: princípios, técnicas e ferramentas. 2ª edição. São Paulo: Pearson Addison-Wesley. 634 páginas.