This course studies the categories and features of programming languages. An examination of one language from each group: imperative, applicative and declarative. Topics include types and type resolution and checking, scope, visibility and binding, control structures, expression evaluation, data and behavior abstraction, parameter passing, error handling and concurrency. The course will also give an overview of lexical analysis and parsing techniques. Formerly COSC 351. Not open to students who have received credit for COSC 351. Prerequisite: COSC 201 and MATH 200 or MATH 281.