To provide a solid foundation for studying advanced topics in Programming Language Specification and Design.
Specifically, the student learning outcomes include:
This course introduces standard concepts related to the specification and design of high-level programming languages. It discusses different programming paradigms, algebraic specification and implementation of data types, and develops interpreters in Racket (Scheme) for specifying (operationally) various programming language features/constructs (spanning simple expression language to class-based object-oriented language). It also introduces attribute grammar framework that is convenient for automatic translation and axiomatic semantics formalism that assists in program verification. The programming assignments will be coded using Racket IDE.
The course load includes programming assignments, a
midterm exam, and a final exam.
(1) Programming assignments will not be graded. You may work in teams of two and share your work with each other to improve your understanding of the material. Do not plagiarize from online sources.
(2) The exams will be open notes/book. Plagiarism from online sources is prohibited. The exam will provide helpful information and code snippets from the text book or course notes that are deemed necessary for answering questions.
(3) The entire class is expected to take the exam simulaneously so that everyone can be tested on the same exam. (Exceptions may be made only under extraordinary circumstances and a different exam may be given.) In the event of academic integrity concerns, exam will be taken using other means including lockdown browsers or using Google Hangout/Meet and shared Google Document.
(4) Any academic impropriety during an exam (which includes copying from other students, or accessing online resources which are prohibited, and passing it off as your own work) will have a minimum penalty of an 'F' grade, plus additional disciplinary action for unethical behavior. See http://www.wright.edu/students/judicial/integrity.html for details.
Tentatively, both the midterm exam and the final exam are expected to be weighted equally for determining the final grade. If this policy is modified for any reason, you will be informed about it in the class.
The final letter grade will be determined solely based on the cumulative score on the midterm exam (weighted 50%) and the final exam (weighted 50%) using the following scale: A[90-100], B[80-90), C[70-80), D[60-70), and F[0-60). However, I reserve the right to adjust the scale somewhat to utilize the gaps in the distribution.
|Topics with links to Lecture Notes||Addl. Readings (EOPL-2nd ed)|
|Class 1||Evolution of Programming Languages||Turing Awards|
||Scheme Metalanguage; Recursive Definitions||Chap 1.1, 1.2|
||Abstract Data Types: Algebraic Specs||Chap 2|
||Abstract Syntax and its Representation||Chap 2|
||Interpreter for a Simple Expression Language||Chap 3|
||User-Defined Functions; Scoping||Chap 1.3, 3|
|Class 10||Implementing Recursion||Chap 3|
||Closures and Streams|
|Class 13||Imperative Programming : Assignment||Chap 3|
|Class 14||Interpreter for an Object-Oriented Language||Chap 5|
|Class 15||(oopl.ps) (oopl.pdf)|
|Class 16||Introduction to Attribute Grammars||
|Class 18||Introduction to Axiomatic Semantics|
Case Studies: Specification of Java
Case Study: Design of multi-paradigm languages
|Final Exam (Dec 8 : 3pm-4:30pm)|