This course discusses various programming language concepts, as well as design and implementation topics for several language families. Topics include introduction languages and grammars; recursive descent parsing; data types, expressions, control structures, and parameter passing; compilers and interpreters; memory management; functional programming principles. Students completing this course should be able to quickly learn to effectively use new computer programming languages. In particular, students should be able to evaluate programming language features and designs, solve problems using the functional, object-oriented, and declarative paradigms, describe the strengths and limitations of the imperative, functional and object oriented paradigms for solving different kinds of problems (or in different application domains), explain and answer questions about specific languages that illustrate different paradigms, including questions about relevant concepts and major features, and design, define, and evaluate parts of programming languages or similar systems and justify their design decisions.
CS 295 or equivalent