Skip to main content

CS 352 Syllabus

Organization of Programming Languages

Revised: December 2019

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 Python and/or Javascript for functional programming. A competent knowledge of the Java language is assumed.

Corequisites and Notes

  • CS 253
  • MATH 255
  • 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

  • An understanding of functional programming as illustrated by the Python and/or Javascript language
  • (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,

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. The functional programming paradigm (functions as first class values and closure) using the Python and/or Javascript programming language. Readings from the handouts.
  8. (optional) Regexes (Perl Compatible Regular Expressions) as a language tool. Readings from handouts.

Office of Web Services