Consider the following abstract syntax tree:

         Program
            |
          FnExp
        /       \
     p,q,r    PrimAppExp
                  |
                  *
               /     \
            VarExp PrimAppExp
              |       |
              p       +
                   /     \
                VarExp  VarExp
                  |       |
                  q       r

Which one of the following SLang 1 expressions does it represent?

fn(p,q,r)=>*(p,+(q,r))
  • fn(p,q,r)=>+(p,*(q,r))
  • (fn(p,q,r)=>*(p,+(q,r)))
  • (fn(p,q,r)=>+(p,*(q,r)))

Review the differences between concrete syntax and abstract syntax.

Where are parentheses used in SLang 1?