CMSC 330: Programming Languages

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

  1. Apply syntax-related concepts such as context-free grammars and parse trees.
  2. Apply semantics-related concepts such as denotational mapping functions and weakest preconditions.
  3. Understand and differentiate between models for data control, scope, lifetime, and type checking of variables.
  4. Analyze and apply parameter passing techniques.
  5. Explain and compare models of run-time storage management.
  6. Compare non-procedural programming paradigms to procedural programming.
  7. Design and implement programs in a non-procedural programming paradigm.
  8. Distinguish compile-time versus run-time activities.
  9. 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

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
1PreliminariesOCaml SetupResearch Paper Assignment (submit to D2L)   Paper Format Sample   Lec 00   Research and Present: History of Programming Languages (Slides 28-29 of Lec 00)
2Language Evaluation and Classes of Languages Lec 01   Lec 02   HW01: Language Evaluation (Submit to D2L)
3Intro to OCamlOCaml: top-level execution, side effects (unit), function, curry and listLec 03: Intro to OCaml   OCaml First Code Example   Lab1 (submit to Autolab)   Sample Solution to HW1
4Tail Recursion, Compiled vs InterpretedOCaml: Tail Recursion, more on functionsLec 04: Tail Recursion   Lec 05: Compiled vs Interpreted Languages   Lab02 (submitted to Autolab)
5Describing Syntax, Exam ReviewOCaml: TupleLec 06: Describing Syntax   HW02 (submitted to D2L)
6Exam 1Lec 07: Tuple
7Describing SemanticsOCaml: lambda-CalculusLec 08: Describing Semantics   Lab 03 (submitted to Autolab)
8Spring BreakHandout
9Axiomatic SemanticsOCaml: Higher Order FunctionsLec 09: λ-calculus and HOF   Lec 10: Axiomatic Semantics
10TypesOCaml: Variants and Recursive TypesLec 11: Types I   Lec 12: Variants and Recursive   Lec 13: Types II
11Exam 2Handout
12Variables, Bindings, Scopes, Expressions, StatementsOCaml: FoldingHandout
13SubprogramsHandout
14SubprogramsHandout
15Paper Presentation
16Final Exam

Useful Links