denotational semantics - syntax - a*b+c - (a*b)+c vs a*(b+c) - assume code "parsed up" into nice tree - natural way to write: EXPR(ap,+,EXPR(ap,*,EXPR(var,a),EXPR(var,b)),EXPR(var,c)) - instead write a*b+c and assume "natural decomposition" Valuation Function : maps code fragments to "meaning" type of "meaning" varies depending on nature of language need to talk about control flow, develop notion of "continuation"