Revised: December 2019
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.
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
(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.
(optional) Regexes (Perl Compatible Regular Expressions) as a language tool. Readings from handouts.