---
# System prepended metadata

title: Advanced Programming Languages quiz#4
tags: [Advanced Programming Languages]

---

---
title: Advanced Programming Languages quiz#4
tags: Advanced Programming Languages
---

:::info
Tatchakorn Saibunjom 
410721325
:::

# Quiz#4

Write an **L-attributed** attribute grammar, based on the CFG of **Example 4.7**, that accumulates the value of the overall expression into the root of the tree. You will need to use dynamic memory allocation so that individual attributes can hold an arbitrary amount of information.

### Example 4.7
$$
\begin{aligned}
expr & \rightarrow const \ expr\_tail \\
expr\_tail &\rightarrow - \ const \ expr\_tail \  | \ \epsilon \\
\end{aligned}
$$

```graphviz
digraph g {
    node [shape="none"]
    
    "-",
    "-_"            [label="-"]
    9, 3, 4
    epsilon         [label="ε"]
    expr_tail_      [label="expr_tail"]
    expr_tail__     [label="expr_tail"]
    
    expr        -> 9, expr_tail 
    expr_tail   ->  "-", 4, expr_tail_
    expr_tail_  -> "-_", 3, expr_tail__
    expr_tail__ -> epsilon
}

```

## Answer

### 1. $expr \rightarrow const \ expr\_tail$
$\square \ expr\_tail.lval := const.val$
$\square \ expr.val := expr\_tail.val$

### 2. $expr\_tail \rightarrow - \ const \ expr\_tail$
$\square \ expr\_tail_1.lval := expr\_tail.lval - const.val$
$\square \ expr\_tail.val := expr\_tail_1.val$

### 3. $expr\_tail \rightarrow \epsilon$
$\square \ expr\_tail.val := expr\_tail.lval$