Revised: August 2018
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.
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)
Grading procedures and factors influencing course grade are left to the discretion of individual instructors, subject to general university policy.
Attendance policy is left to the discretion of individual instructors, subject to general university policy.
Foundations for assessment, comparison and categorization of programming languages. Implementation methods and design tradeoffs. Readings from Chapter 1 of Sebesta.
Programming language history and evolution. Readings from Chapter 2 of Sebesta. This content is distributed throughout the course.
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.
Overview of the parts of language translation process. Readings from Chapters 3 and 4 of Sebesta.
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.
Theory of Computing: A few concepts about classes of language recognizers and language generators and about the halting problem and undecidability. Readings from handouts.
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.
(optional) Regexes (Perl Compatible Regular Expressions) as a language tool. Readings from handouts.