The main topics of this course include a comparative study of programming language features, an introduction to programming language design and implementation, and an introduction to the theory of formal languages.
The course objectives are
- To provide an introduction to formalisms for specifying syntax and semantics of programming languages, includnig an introduction to the theory of formal languages,
- To provide an exposure to core concepts and principles of contemporary programming languages, and
- To explore various important programming methodologies, such as functional programming, logic programming, programming with abstract data types, and object-oriented programming.
- CSCI 2110: Computer Science III
- CSCI 2112: Discrete Structures
- CSCI 2132: Software Development
- CSCI 3132: Object-Oriented Programming explores object-oriented programming methodologies more in depth.
- CSCI 4112: Theory of Computation provides a more in-depth discussion of the theory of formal languages. (Currently not offered)
- CSCI 4131: Compiler Construction discusses the design and implementation of compilers for programming languages in more detail. (Currently not offered)
These slides are still work in progress. For the time being, I'll keep the slides from earlier iterations of this course online. These slides will be replaced with the ones I'm using this time around as I get them ready.
|Types of programming languages||Jan 9, 11, 28|
|Introduction to Scheme||Jan 14–21|
|Introduction to Prolog||Jan 23, 25|
|Lexical analysis and regular languages||Jan 30, Feb 4–8|
|Syntactic analysis and context-free languages||Feb 11–Mar 8|
|Semantic analysis||Mar 11, 13|
|Names, scopes, and binding||Mar 18, 20|
|Control flow||Mar 22, 25|
|Subroutines and control abstractions||Mar 27, 29|
|Data types||Apr 1, 3|
|Object orientation||Apr 5, 8|
|Introduction to Haskell||Not covered|
Michael L. Scott. Programming Language Pragmatics. 3rd edition, Morgan Kaufmann, 2009.
H. Abelson, G.J. Sussman, and J. Sussman. Structure and Interpretation of Computer Programs. 2nd edition, MIT Press, 1996.
John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman. Introduction to Automata Theory, Languages, and Computation. 3rd edition, Addison Wesley, 2006.
Allen B. Tucker and Robert E. Noonan. Programming Languages: Principles and Paradigms. 2nd edition, McGraw-Hill, 2007.
Robert W. Sebesta. Concepts of Programming Languages. 7th edition, Addison Wesley, 2005.
A. Appel. Modern Compiler Implementation in Java. Cambridge University Press, 1998.
Kenneth Slonneger and Barry L. Kurz. Formal Syntax and Semantics of Programming Languages. Addison Wesley, 1995.
H. Abelson and G. Sussman. Structure and Interpretation of Computer Programs. 2nd edition, MIT Press, 1996.
B. Meyer. Object-Oriented Software Construction. 2nd edition, Prentice Hall, 1997.
Leslie B. Wilson and Robert G. Clark. Comparative Programming Languages. 3rd edition, Addison Wesley, 2001.
Terrence W. Pratt and Marvin V. Zelkowski. Programming Languages Design and Implementation. 4th edition, Prenticel Hall, 2000.
Resources on Scheme, Prolog, and Haskell
R.K. Dybvig. The Scheme Programming Language: Comprehensive book on Scheme
Yet Another Scheme Tutorial: A brief and sweet tutorial on Scheme
D.P. Friedman and M. Felleisen. The Little Schemer: Fun read on Scheme by two of the biggest names in the Scheme world.
Learn Prolog Now!: A short introduction to Prolog
The Power of Prolog: Another short introduction to Prolog, including constraint programming (by the author of SWI Prolog's constraint programming engine)
Learn You a Haskell: An introduction to Haskell for people who can program but haven't programmed functionally before.
Real-World Haskell: An excellent introduction to Haskell that covers basic and intermediate concepts
Hoogle: Search interface for the documentation of standard Haskell packages and packages on Hackage
GHC Documentation: Documentation of the GHC Haskell compiler
Haskell Stack: A simple environment to get GHC up and running on your machine
Hackage: Standard repository of a large number of high-quality Haskell packages
- 8 assignments (A)
- 4 programming assignments
- 4 theory assignments
- The 3 best programming assignments and the 3 best theory assignments count.
- Each has equal weight.
- Midterm (M)
- Final (F)
Grade = max(40% * A + 20% * M + 40% * F, 40% * A + 60% * F)
I encourage you to form groups of up to 3 students who collaborate on assignments. Each group submits a single assignment; each member of the group receives the same marks. It is your responsibility to find students with whom you form a group. Group composition may change between assignments. No collaboration between groups is allowed on assignments.
Late assignments are accepted only if you were sick on the day the assignment was due or if there is an important event in your personal life that prevents you from completing the assignment on time. In the latter case, you must discuss these circumstances with me in advance to apply for a reasonable extension.
If you miss an exam, you will be given the opportunity to sit the exam at a later date. You must, however, present a good reason why you were not able to sit the exam at the regular scheduled time. Also, unless there are a large number of students who missed the regularly scheduled exam, make-up exams are oral exams.
I will not tolerate any form of plagiarism (copying from your classmates, copying solutions from the web, etc.). According to university regulations, I have to report you to the Faculty's Integrity Officer if I suspect you of academic dishonesty, and I will. The Integrity Officer may refer your case to the Senate Committee on Plagiarism. The penalty for plagiarism can range from failing the course to expulsion from the university. So please save me and yourself the aggravation. For more information, make sure you read the Dalhousie Academic Integrity Page.