Official PDF Course Policy

Instructors

Course Description

This course examines basic concepts underlying the design of modern programming languages: types, control structures, abstraction mechanisms, inheritance, concurrency and constructs for programming. The course includes programming assignments in several languages, and is structured around designing, writing specifications for, and building interpreters and compilers for new programming languages.

Credits: 2-2-3

Pre-requisites: SI342 and (IC312 or SY301)

Grading

Your final grade will be computed as follows:

6 and 12 week grades will be computed based on this same breakdown, scaled according to the amount of work completed so far.

For labs we will use a form of specifications grading. Each lab will have specific standards which must all be met in order to earn a stated number of points. The grading will be “all or nothing”: until the standard is met, there will be no partial credit.

However, the opportunity to revise (or re-revise) labs with a new deadline, generally within one week, will be given under the following conditions:

Plus/minus grades will be assigned based on the following numerical cutoffs:

+ -
A 93-100 90-92
B 87-89 83-86 80-82
C 77-79 73-76 70-72
D 67-69 60-66
F 0-59

Collaboration

The guidance in the Honor Concept of the Brigade of Midshipmen and the Computer Science Department Honor Policy must be followed at all times. See https://www.usna.edu/CS/resources/honor.php.

All collaboration and outside sources should always be cited. The same rules apply for giving and receiving assistance. If you are unsure whether a certain kind of assistance or collaboration is permitted, you should assume it is not, work individually, and seek clarification from your instructor.

Specific instructions for this course:

Generative AI

PROVOSTNOTE 1531 defines an AI Usage Framework that courses use to prescribe what kinds of AI usage are allowed for given assignments and/or problems.

In this course, the only allowed AI tool is Google Gemini, logged in with your USNA account, and using the instructor-provided Gem for this course.

Late Policy

PROVOSTINST 1531.91 defines the baseline late work policy for USNA courses. As authorized by the Department Chair, this course enforces a strict zero-credit policy for work submitted past established deadlines.

Syllabus

The course is structured around a single task: designing and implementing a new programming language. Each unit is centered on a few additional programming language capabilities and a series of four tasks:

(1) Designing and specifying the syntax and semantics of a novel language to support the required capabilities; (2) Writing example programs in the novel language (which will later be used for testing); (3) Implementing a REPL-based interpreter for the language in Java; (4) Implementing a compiler for the language using LLVM.

To support these concrete tasks within each unit, we will also introduce various new concepts and examples from existing programming languages.

Deadlines for each homework and lab will be posted on the course website above. The overall schedule for the semester is as follows.

Textbook(s)

Classroom Conduct

Everyone in the classroom will show appropriate respect to each other at all times.

The section leader is responsible for recording attendance, bringing the class to attention, notifying the CS department office if the instructor is more than 5 minutes late, and directing the class in useful work in the instructor’s absence.

Drinks are permitted, but they must be in closable containers. Food, alcohol, and tobacco (of all kinds) are prohibited. The use of laptops, tablets, or other devices during class is at the discretion of the instructor; such use must be related to the class and should never serve as a distraction to other students.

The class will follow the non-attribution of communication practice (Chatham House Rule).

Extra Instruction

Extra instruction (EI) is strongly encouraged and should be scheduled by following the instructions on your instructor’s homepage. EI is not a substitute lecture; students should come prepared with specific questions or problems.

Learning Objectives

Upon completing this course, students will be able to:

  1. Understand the functional programming paradigm and be able to solve problems in a functional language (supports outcome CS-6).

  2. Develop a vocabulary for describing programming languages (supports outcome CS-6).

  3. Understand lexical analysis, parsing, and basic interpretation (supports outcome CS-6).

  4. Implement a simple interpreter (supports outcome CS-6).

  5. Learn a new programming language independently and use it to solve basic tasks (supports outcome CS-6).

Student Outcomes

Graduates of the program will have an ability to:

1. Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions.

2. Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline.

3. Communicate effectively in a variety of professional contexts.

4. Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles.

5. Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline.

CS-6. Apply computer science theory and software development fundamentals to produce computing-based solutions.