CS 210

From CS Wiki
Jump to: navigation, search

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 2013)

Prereq: CS 121

Textbook: Terrence W. Pratt and Marvin V. Zelkowitz, Programming Languages: Design and Implementation, Prentice Hall or equivalent text.

Textbook URL: http://catalogue.pearsoned.co.uk/catalog/academic/product?ISBN=0130276782

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

  1. Analyze a language translation problem and identify and design lexical scanning and parsing requirements to solve it. (b)
  2. Design and implement a simple lex scanner and Yacc parser. (c)
  3. Describe the structure of compilers and execution environments, and know the phases of a compiler, and the purpose / products / errors of each phase. (i)
  4. Convert a simple grammar and language definition into a flex/bison program. (i)
  5. 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)
  6. Understand the implications of the Sapir-Whorf hypothesis for computer languages. (j)
  7. Understand the notation, meaning, and use of regular expressions. (j)
  8. Understand the notation, meaning and use of Backus Naur form and context free grammars and use this knowledge to write a grammar for a simple context free language. (j)
  9. Understand ambiguity; understand how to create precedence and associativity using a grammar. (j)
  10. Derive a sentence in a specific language using a parse tree. (j)
  11. Understand declaration, allocation, binding, scope and lifetime of symbols for various language paradigms. (j)
  12. Understand activation records and parameter passing. (j)
  13. Understand function signature and overloading. (j)
  14. Understand the basics of exemplar languages from the common categories such as, simple stack languages, rule based languages, imperative languages, functional languages, and object oriented languages. (j)
  15. Understand functional and data abstraction and how languages support this. (j)
  16. Understand coercion, casting and type checking. (j)
  17. Understand inheritance, interfaces, accessors, public and private methods. (j)
  18. Understand the purpose of unnamed functions and closures. (j)
  19. Understand the purpose of garbage collection and two ways to do it. (j)