First semester, alternate years. Programming Languages A programming language is a tool for instructing computers, a means for programmers to communicate with each other, a method for expressing high-level design, a notation for algorithms, a tool for experimentation, and a means for controlling computerized equipment. The purpose of this course is to give students an understanding of the essentials of programming languages, such as syntax, semantics, run-time structure, data and procedural abstraction. The course studies the necessary tools for the critical evaluation of existing and future programming languages and programming concepts. Principles that underlie diverse languages, their unifying themes, distinctions between them, and implementation issues are stressed.
Emphasis is placed on the programming paradigms with which the students are least familiar.
First semester, each year. It studies abstract models of finite automata, regular expressions, push-down automata, and Turing machines. General computers are equivalent to a mathematical model called a Universal Turing machine. Ambiguous and non-deterministic machines, and their significance for realistic computers, will also be studied. The course deals with the types of problems that can and cannot be solved by these classes of machines.