CS 352 Syllabus

Organization of Programming Languages

Revised: November 2017

Course Description

History and evolution of programming languages. Language paradigms: imperative (procedural and object-oriented) and functional. Syntax, semantics, language design and implementation focusing on lexical and syntactic analysis based on formal language theory. Languages that will be emphasized will be C for imperative programming and Go for functional programming. A competent knowledge of the Java language is assumed.

Prerequisites and Notes

  • CS 151.
  • 3 credit hours.


  • An understanding of how the address space of a program and its data appears during program execution

  • Understanding of the major components of programming language translation

  • Understanding of lexical analysis and its relationship to finite automata and regular expressions

  • Understanding of syntactic analysis and its relationship to context-free grammars

  • A brief introduction to some key concepts in the theory of computing such as the halting problem and undecidability

  • An introductory understanding of the history and evolution of programming languages

  • The ability to program using the C language and understanding its syntax and semantics and how they differ from those of Java

  • The ability to program using Go language and understanding a substantial part of its syntax and semantics and how they differ from those of Java including an understanding of functional programming as illustrated by Go.

  • (optional) The ability to use regexes that are Perl Compatible Regular Expressions (PCRE)


  • Robert W. Sebesta, Concepts of Programming Languages, Eleventh Edition, Addison Wesley, 2015
  • Supplemental book: Charlie McDowell, C for Java Programmers: A Primer, http://www.lulu.com/product/ebook/c-for-java-programmers-a-primer/17479514?productTrac
  • Supplemental book: Karl Seguin, The Little Go Book, http://openmymind.net/The-Little-Go-Book/

Grading Procedure

Grading procedures and factors influencing course grade are left to the discretion of individual instructors, subject to general university policy.

Attendance Policy

Attendance policy is left to the discretion of individual instructors, subject to general university policy.

Course Outline

  1. Foundations for assessment, comparison and categorization of programming languages. Implementation methods and design tradeoffs. Readings from Chapter 1 of Sebesta.

  2. Programming language history and evolution. Readings from Chapter 2 of Sebesta. This content is distributed throughout the course.

  3. C Programming Language: Discussion of the C programming language and imperative programming, discussion of similarities and differences between C and Java. Arrays, strings, pointers, preprocessing, compilers, linkers, loaders. Reading from C for Java Programmers by McDowell.

  4. Overview of the parts of language translation process. Readings from Chapters 3 and 4 of Sebesta.

  5. Language Lexical and Syntactic Analysis: Regular expressions, finite state machines, context-free grammars, BNF, parse trees, ambiguity, precedence, attribute grammars and associativity. Lexical analysis, parsing, recursive descent parsing. Readings from Chapters 3 and 4 of Sebesta.

  6. Theory of Computing: A few concepts about classes of language recognizers and language generators and about the halting problem and undecidability. Readings from handouts.

  7. Go programming language with a focus on its support for functional programming (functions as first class values and closure). Reading from the book The Little Go Book which is online.

  8. (optional) Regexes (Perl Compatible Regular Expressions) as a language tool. Readings from handouts.

Office of Web Services