Instructor
Dr. Jingnan Xie
Email: jingnan.xie@millersville.edu
Course Description
Introduction to the fundamental principles of programming language design, semantics, and implementation. Topics include syntax, semantics, names, bindings, scope, data types, type systems, control flow, object orientation, functional programming, and concurrency. Labs and assignments include experience writing programs in a non-procedural paradigm (OCaml).
Prerequisite: CMSC 362 with grade C- or better.
Course Outcomes
- Apply syntax-related concepts such as context-free grammars and parse trees.
- Apply semantics-related concepts such as denotational mapping functions and weakest preconditions.
- Understand and differentiate between models for data control, scope, lifetime, and type checking of variables.
- Analyze and apply parameter passing techniques.
- Explain and compare models of run-time storage management.
- Compare non-procedural programming paradigms to procedural programming.
- Design and implement programs in a non-procedural programming paradigm.
- Distinguish compile-time versus run-time activities.
- Write a technical paper and give an oral presentation on a programming languages topic.
Textbook & Resources
Course Policies
Emails will be answered within 24 hours. Lab attendance is required. Exams and assignments must be attempted to pass. Late submissions are not accepted except for grace days. Active participation is encouraged.
Grading Policy
- Lab and Homework Assignments: 20%
- Final Paper and Presentation: 10%
- Final Exam: 35%
- Two Midterms: 35%
- Class Participation Bonus: up to 2%
Students must attempt all exams and assignments. The exam average must be ≥70% to earn C- or above.
Grade scale: ≥93 A, 90–92 A-, 87–89 B+, 83–86 B, 80–82 B-, 77–79 C+, 73–76 C, 70–72 C-, 67–69 D+, 63–66 D, 60–62 D-, <60 F
Weekly Topics & Handouts
| Week | Main Topic | OCaml / Functional Programming Focus | Handouts / Assignments |
|---|---|---|---|
| 1 | Preliminaries | OCaml Setup | Research Paper Assignment (submit to D2L) Paper Format Sample Lec 00 Research and Present: History of Programming Languages (Slides 28-29 of Lec 00) |
| 2 | Language Evaluation and Classes of Languages | Lec 01 Lec 02 HW01: Language Evaluation (Submit to D2L) | |
| 3 | Intro to OCaml | OCaml: top-level execution, side effects (unit), function, curry and list | Lec 03: Intro to OCaml OCaml First Code Example Lab1 (submit to Autolab) Sample Solution to HW1 |
| 4 | Tail Recursion, Compiled vs Interpreted | OCaml: Tail Recursion, more on functions | Lec 04: Tail Recursion Lec 05: Compiled vs Interpreted Languages Lab02 (submitted to Autolab) |
| 5 | Describing Syntax, Exam Review | OCaml: Tuple | Lec 06: Describing Syntax HW02 (submitted to D2L) |
| 6 | Exam 1 | OCaml: Tuple | Lec 07: Tuple |
| 7 | Describing Semantics | OCaml: Higher Order Functions | Handout Lab 03 (submitted to Autolab) |
| 8 | Spring Break | Handout | |
| 9 | Implementing Subprograms & Function Abstraction | Higher-order functions, currying, closures | Handout |
| 10 | Abstract Data Types & Encapsulation | Modules, ADTs, type abstraction | Handout |
| 11 | Object-Oriented Programming | Class mapping to functional constructs, objects in OCaml | Handout |
| 12 | OOP: Inheritance & Polymorphism | Polymorphic types, functional interfaces | Handout |
| 13 | Exception Handling & Testing | OCaml exceptions, error handling | Handout |
| 14 | Concurrency & Miscellaneous | Functional approaches to concurrency, lazy evaluation | Handout |
| 15 | Final Exam | - |