cs-4400-sp26

Lecture 15: Control Stacks and Exceptions

Outline

A control stack implementation for CalcLang

Starting where we left off:

#lang plait

(define-type Expr
  [addE (e1 : Expr) (e2 : Expr)]
  [numE (n : Number)]
  )

;; 1. define frames, stacks, and states
(define-type Frame
  [addF1 (e2 : Expr)]
  [addF2 (n : Number)])

(define-type Stack
  [emp]
  [snoc (k : Stack) (f : Frame)])

(define-type State
  [eval (k : Stack) (e : Expr)]
  [return (k : Stack) (n : Number)])

;; example
(example1 : State)
(define example1
  (eval (emp) (addE (addE (numE 1) (numE 2)) (numE 3))))
          

;; 2. Write step : State -> State
(step : (State -> State))
(define (step s) (error 'unimp ""))