Brief history of programming languages. Formal grammars. BNF notation. Principles of modern programming languages: features, design and evaluation. Imperative vs. declarative language styles. General-purpose language features, such as types, operators, expressions, subprograms, recursion, and object-orientation. Special purpose language features, such as support for graphical interface, concurrency, and non-determinism. Relationship between language design and implementation.