Fundamentals of programming languages (2. ed.)