Sonoma State University
Department of Computer Science
CS-460: Programming Languages
Spring 2026

Course Description

This course provides a survey of the syntactic, semantic, and implementation features of functional, procedural, object-oriented, logic, and concurrent programming languages.

Prerequisites

Grade of C- or better in CS-252 (Introduction to Computer Organization) and CS-315 (Data Structures), or consent of instructor.

Instructor

Robert Bruce

Learning Outcomes

Upon successful completion of this course, students will be able to:

  1. Create a Concrete Syntax Tree using deterministic finite state machines and recursive descent.
  2. Define the syntax of formal programming languages using Backus-Naur Form (BNF).
  3. Describe characteristics of functional, logical, object-oriented, and scripting programming languages.
  4. Explain the importance of tokenization and lexical analysis as building blocks in the development of an interpreter or compiler for programming languages.
  5. Describe how Abstract Syntax Trees are different from Concrete Syntax Trees or Parse Trees.
  6. Describe how symbol tables are invaluable in the development of compilers and interpreters.

Required Texts/Readings

Textbook

  1. Michael Scott, Programming Language Pragmatics, Fifth edition.

Other Readings (optional references)

  1. Brian W. Kernighan and Dennis M. Ritchie, C Programming Language, 2nd edition
  2. Robert Mecklenburg, Managing Projects with GNU make, 3rd edition

Course Requirements

In addition to in-class exercises, students will be assigned the following programming assignments outside of class. The programming assignments below will be completed as part of a team. Everyone on the team receives the same grade for the programming assignments. Detailed instructions about these assignments will be posted to Canvas. A brief description of each assignment is below:

Programming assignment 1: Ignore comments

Using procedurally-driven deterministic finite state automaton (DFA), write a program in C or C++ to identify and ignore comments for a ChagaLite programming language. Details for this assignment will be posted to Canvas.

Programming assignment 2: Tokenization

Given the ChagaLite programming language grammar defined in Bacus-Naur Form (BNF), write a program in C or C++ that tokenizes an entire input file and displays the tokens as output. Details for this assignment will be posted to Canvas.

Programming assignment 3: Recursive Descent Parser

Given the ChagaLite programming language grammar defined in Bacus-Naur Form (BNF), write a recursive descent parser in C or C++ with a procedurally-driven deterministic finite state automaton (DFA) to create a Concrete Syntax Tree (CST). Details for this assignment will be posted to Canvas.

Programming assignment 4: Symbol Table

Given the ChagaLite programming language grammar defined in Bacus-Naur Form (BNF), write a program in C or C++ that creates a symbol table (a linked list) of all the defined variables (including their type and scope), and the names of all functions and procedures. Functions and procedures may also have an input parameter list of variables and types. These too should be present (with appropriate scope) in the symbol table. Lastly, functions have a return datatype which must be noted in the symbol table as well. Details for this assignment will be posted to Canvas.

Team Programming assignment 5: Abstract Syntax Tree

Given the ChagaLite programming language grammar defined in Bacus-Naur Form (BNF), write a program in C or C++ that creates an Abstract Syntax Tree (AST) based on the Concrete Syntax Tree (CST) generated in programming assignment 3 (above). An abstract syntax tree is not a clone of the parse tree. Boolean and numeric expressions in the CST should be converted to postfix notation using the Shunting Yard Algorithm. Details for this assignment will be posted to Canvas.

Team Programming assignment 6: Interpreter

Write a program in C or C++ that can interpret and run applications for a ChagaLite programming language grammar defined in Bacus-Naur Form (BNF). The interpreter must execute the program, keeping track of variables and values and the flow of control at all times. The interpreter must also account for possible syntax errors or run-time errors. Details for this assignment will be posted to Canvas.

Midterm Examination

The midterm exam will based-on chapters 1, 2, 3, 4, 6, 7, and 8 of Scott’s Programming Language Pragmatics. The exam will be comprised of open-ended questions. The exam will be closed-book. You may use one A4 sheet of paper (8.5 inches width by 11 inches length) for notes during the midterm examination. You may write notes on both sides of the sheet of paper.

Final Examination

The final exam will based-on chapters 9, 10, 11, 12, 14, 15, 16, and 17 of Scott’s Programming Language Pragmatics. The exam will be comprised of open-ended questions. The exam will be closed-book. You may use one A4 sheet of paper (8.5 inches width by 11 inches length) for notes during the final examination. You may write notes on both sides of the sheet of paper.

Grading Information

Assignment Percentage of Grade
In-class exercises 5%
Programming assignment 1: Ignore comments 5%
Programming assignment 2: Tokenization 10%
Programming assignment 3: Recursive Descent Parser 10%
Programming assignment 4: Symbol table 10%
Programming assignment 5: Abstract Syntax Tree 10%
Programming assignment 6: Interpreter 10%
Midterm exam
Midterm exam study guide
20%
Final exam
Final exam study guide
20%
TOTAL 100%

† Graded as an individual
‡ Graded as a group (each member of the group gets the same grade)

Determination of Grades

Ultimately this course is graded A, B, C, D, or F. Percentage grades are rounded to the nearest whole number. For example, a grade of 92.4% will be rounded to 92% and result in a grade of "A minus". A grade of 92.5% will be rounded to 93% and result in a grade of "A".

Grading Scale

Percent range Grade
93% to 100% inclusive A
90% to 92% inclusive A-
87% to 89% inclusive B+
83% to 86% inclusive B
80% to 82% inclusive B-
77% to 79% inclusive C+
73% to 76% inclusive C
70% to 72% inclusive C-
67% to 69% inclusive D+
63% to 66% inclusive D
60% to 62% inclusive D-
Below 60% F

Grading Policies

Late assignments

Absent extenuating circumstances (illness, family emergency), late submissions will be accepted under the late policy until the advertised "Until" deadline on Canvas. The late policy is minus 10% per day, and never grows more than minus 50% markdown (as long as the assignment is submitted before the final deadline via Canvas).

Late exams and quizzes
  • There are no make-up exams.
  • Official proof of emergency required for missing an exam, project, or project presentation.

Course Schedule

Week Topics and Assignments Readings and Deadlines
Week 1:
Monday, January 26, 2026
Lecture: Success in CS-460: Programming Languages Chapter 1: Introduction
Week 1:
Wednesday, January 28, 2026
Lecture: Regular Expressions
Exercise 1a: Regular Expressions
 
Week 2:
Monday, February 2, 2026
Exercise 1b: Regular Expressions Chapter 2: Programming Language Syntax
Week 2:
Wednesday, February 4, 2026
Lecture: Tokenization
Exercise 2a: Tokenization
 
Week 3:
Monday, February 9, 2026
Exercise 2b: Tokenization Chapter 3: Names, Scopes, and Bindings
Week 3:
Wednesday, February 11, 2026
Lecture: Concrete Syntax Trees
Exercise 3a: Concrete Syntax Tree
 
Week 4:
Monday, February 16, 2026
Exercise 3b: Concrete Syntax Tree Chapter 4: Program Semantics
Week 4:
Wednesday, February 18, 2026
Lecture: Symbol tables
Exercise 4a: Symbol table
DUE: Programming Assignment 1: Ignore Comments
Week 5:
Monday, February 23, 2026
Exercise 4b: Symbol table Chapter 6: Control Flow
Week 5:
Wednesday, February 25, 2026
Lecture: Shunting Yard Algorithm for numerical expressions
Supplementary material: Converting a numerical expression into postfix using Shunting Yard algorithm
Exercise 5a: Converting numerical expressions from infix to postfix
 
Week 6:
Monday, March 2, 2026
Lecture: Shunting Yard Algorithm for Boolean expression
Supplementary material: Converting a Boolean expression into postfix using Shunting Yard algorithm
Exercise 5b: Converting Boolean expressions from infix to postfix
Chapter 7: Type Systems
DUE: Programming Assignment 2: Tokenization
Week 6:
Wednesday, March 4, 2026
Lecture: Abstract Syntax Trees
Exercise 6a: Abstract Syntax Tree
 
Week 7:
Monday, March 9, 2026
Exercise 6b: Abstract Syntax Tree Chapter 8: Composite Types
Week 7:
Wednesday, March 11, 2026
Topic: Type Systems
Exercise 7a (from exercise 7.18 on p. 366, chapter 7)
 
Week 8:
Monday, March 16, 2026
Topic: Composite Types
Exercise 7b (from exercise 8.1 on p. 441, chapter 8)
Chapter 9: Subroutines and Control Abstraction
Week 8:
Wednesday, March 18, 2026
MIDTERM EXAM  
Monday, March 23, 2026 SPRING BREAK  
Wednesday, March 25, 2026 SPRING BREAK  
Week 9:
Monday, March 30, 2026
Topic: Composite Types
Exercise 8a (from exercise 8.12 on p. 443, chapter 8)
Chapter 10: Object Orientation
Week 9:
Wednesday, April 1, 2026
Topic: Subroutines and Control Abstraction
Exercise 8b (from exercise 9.18 on p. 512, chapter 9)
DUE: Programming Assignment 3: Recursive Descent Parser
Week 10:
Monday, April 6, 2026
Topic: Subroutines and Control Abstraction
Exercise 9a (from exercise 9.41 on p. 514, chapter 9)
Chapter 11: Functional Languages
Week 10:
Wednesday, April 8, 2026
Topic: Object Orientation
Exercise 9b (from exercise 10.16 on p. 576, chapter 10)
 
Week 11:
Monday, April 13, 2026
Exercise 10: Team Formation Chapter 12: Logic Languages
DUE: Programming Assignment 4: Symbol Table
Week 11:
Wednesday, April 15, 2026
Topic: Object Orientation
Exercise 11 (from exercise 10.1 on p. 574, chapter 10)
 
Week 12:
Monday, April 20, 2026
Topic: Functional Programming Language
Exercise 12a
Chapter 14: Scripting Languages
Week 12:
Wednesday, April 22, 2026
Topic: Functional Programming Language
Exercise 12b
 
Monday, April 27, 2026 Topic: Scripting Languages
Exercise 13a
Chapter 15: Building a Runnable Program
Week 13:
Wednesday, April 29, 2026
Topic: Scripting Languages
Exercise 13b
DUE: Programming Assignment 5: Abstract Syntax Tree
Week 13:
Monday, May 4, 2026
Topic: Scripting Languages
Exercise 14a
Chapter 16: Run-Time Program Management
Week 14:
Wednesday, May 6, 2026
Topic: Scripting Languages
Exercise 14b
 
Week 14:
Monday, May 11, 2026
Topic: Scripting Languages
Exercise 15a
Chapter 17: Code Improvement
Week 15:
Wednesday, May 13, 2026
Topic: Scripting Languages
Exercise 15b
DUE: Programming Assignment 6: Interpreter
May 18, 2026 FINAL EXAM at 10:30 AM