Back to the 2023 paper

Module 3: Semantic Analysis, Symbol Table, Run-time environment

20237m

Given the Syntax-Directed Definition below with the synthesized attribute val. Draw the annotated parse tree for the expression (3+4)∗(5+6)(3+4) * (5+6)

L→EL \to E, L.val=E.valL.val = E.val
E→TE \to T, E.val=T.valE.val = T.val
E→E1+TE \to E_1 + T, E.val=E1.val+T.valE.val = E_1.val + T.val
T→FT \to F, T.val=F.valT.val = F.val
T→T1∗FT \to T_1 * F, T.val=T1.val∗F.valT.val = T_1.val * F.val
F→(E)F \to (E), F.val=E.valF.val = E.val
F→digitF \to digit, F.val=digit.lexvalF.val = digit.lexval

Worked SolutionAI Assisted

Annotated parse tree for (3+4)×(5+6)(3+4)\times(5+6)

Syntax-directed definition (synthesized val):

  • L→EL \to E,  L.val=E.val\ L.val = E.val
  • E→TE \to T, E.val=T.valE.val = T.val
  • E→E1+TE \to E_1+T, E.val=E1.val+T.valE.val = E_1.val + T.val
  • T→FT \to F, T.val=F.valT.val = F.val
  • T→T1∗FT \to T_1*F, T.val=T1.val×F.valT.val = T_1.val \times F.val
  • F→(E)F \to (E), F.val=E.valF.val = E.val
  • F→digitF \to \text{digit}, F.val=digit.lexvalF.val = \text{digit.lexval}

Parse tree with every node's val annotated (evaluated bottom-up):

              L ─ E.val = 77                    (L → E, L.val = E.val)
                  |
                  E.val = 77                    (E → T,   E.val = T.val)
                  |
                  T.val = 77                    (T → T1 * F,  T.val = 7 * 11)
                 /         \
        T1.val = 7          F.val = 11
             |                    |
             F.val = 7           F → ( E )  .val = 11
             F → ( E ) .val=7         |
                |                    E → E1 + T  .val = 5 + 6 = 11
                E.val = 7            /        \
              E1.val = 3          T.val = 3   ?  ... (details below)

To avoid a confusing drawing, here is the node-by-node annotated tree (the expected exam answer):

L → E            : val = 77
E → T            : val = 77
T → T1 * F       : val = T1.val * F.val = 7 * 11 = 77

Left subtree  (3+4):
  T1 → F                          : val = 7
  F → (E)                         : val = 7      [parenthesized]
     E → E1 + T
        E1 → T → F → digit(3)     : val = 3
        T  → F → digit(4)         : val = 4
        E.val = 3 + 4 = 7
  ⇒ T1 (left factor) val = 7

Right subtree  (5+6):
  F → ( E )                       : val = 11     [parenthesized]
     E → E1 + T
        E1 → T → F → digit(5)     : val = 5
        T → F → digit(6)          : val = 6
        E.val = 5 + 6 = 11
  ⇒ F (right factor) val = 11

Root:
  T.val = 7 * 11 = 77,  E.val = 77,  L.val = 77

Each digit is a leaf via F→digitF\to\text{digit}, with F.val=digit.lexvalF.val = \text{digit.lexval} (3, 4, 5, 6).

E.val=7×11=77\boxed{E.val = 7 \times 11 = 77}

Similar questions

Official AppAndroid App

PYQDeck for Android

Solve BEU previous-year exam papers anywhere, anytime. Fast search, offline paper viewing, and step-by-step solutions designed specifically for your phone.