Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach