CS 210

From CS Wiki
Jump to: navigation, search

CS 210: Programming Languages

Catalog Description: Major features of good programming languages, with primary emphasis on language features and their role in writing good software; programming language design alternative; various types of languages, including procedural, data-flow, functional and object-orientated languages.

Type: Required for all CS majors

Total Credits: 3

Contact Hours: 3 lecture hours per week

Course Coordinator: Clinton Jeffery

URL: http://marvin.cs.uidaho.edu/Teaching/CS210/index.html (Spring 2014)

http://www2.cs.uidaho.edu/~jeffery/courses/210/ (Fall 2015)

Prereq: CS 121

Textbook: Modern Programming Languages, Adam Brooks Webber, Franklin Beedle and Associates, 2011

Textbook URL:

Prerequisites by Topic:

  1. Experience using a compiled language
  2. Experience using a typed language
  3. Experience programming with an object-oriented language
  4. Knowledge of trees, graphs & linked lists
  5. Basic set theory

Main Topics Covered

  1. Programming language concepts (3 hours)
  2. Programming language types (4 hours)
  3. General structure of compilers (3 hours)
  4. Automata and grammars (8 hours)
  5. Lexical analyzers and parsers (6 hours)
  6. Memory management for data structures (3 hours)
  7. Types and type checking (2 hours)
  8. Virtual machines (3 hours)
  9. Specific languages (Prolog, Scheme, etc.) (8 hours)

Course Outcomes

Note: the primary Student Outcome addressed in this course is (a), which is reinforced.

  1. Analyze a language translation problem and identify and design lexical scanning and parsing requirements to solve it. (b)
  2. Describe the structure of compilers and execution environments, and know the phases of a compiler, and the purpose / products / errors of each phase. (i)
  3. Convert a simple language definition into a flex/bison program. (i)
  4. Know what features must be present in any programming language; understand what are the important properties of a good programming language; understand that no one language can be good for all purposes, and be able to compare and contrast the features of artificial and natural languages. (j)
  5. Understand the implications of the Sapir-Whorf hypothesis for computer languages. (j)
  6. Understand the notation, meaning, and use of regular expressions. (j)
  7. Understand the notation, meaning and use of Backus Naur form and context free grammars. (j)
  8. Understand ambiguity; understand how to create precedence and associativity using a grammar. (j)
  9. Derive a sentence in a specific language using a parse tree. (j)
  10. Understand declaration, allocation, binding, scope and lifetime of symbols for various language paradigms. (j)
  11. Understand activation records and parameter passing. (j)
  12. Understand function signature and overloading. (j)
  13. Understand the basics of exemplar languages from the common categories such as declarative, imperative, functional and object oriented languages. (j)
  14. Understand functional and data abstraction and how languages support this. (j)
  15. Understand coercion, casting and type checking. (j)
  16. Understand inheritance, interfaces, private variables and accessors, and public and private methods. (j)
  17. Understand the purpose of unnamed functions and closures. (j)
  18. Understand the purpose of garbage collection and the trade-offs of reference counting versus region-based garbage collection. (j)