From 8f5293ab80cc8c8078f8bcefd137b1b64c8fc48c Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Tue, 14 Jan 2025 22:01:16 -0400 Subject: [PATCH] Remove old assigment from previous years --- A1/infix-ae.rkt | 70 ------------------------------------------------- 1 file changed, 70 deletions(-) delete mode 100644 A1/infix-ae.rkt diff --git a/A1/infix-ae.rkt b/A1/infix-ae.rkt deleted file mode 100644 index d25d903..0000000 --- a/A1/infix-ae.rkt +++ /dev/null @@ -1,70 +0,0 @@ -#lang plait - -(define minutes-spent 60) - -#| BNF for the AE language: - ae: NUMBER - | { ae + ae } - | { ae - ae } - | { ae * ae } - | { ae / ae } -|# - -;; AE abstract syntax trees -(define-type AE - [Num (val : Number)] - [Add (l : AE) (r : AE)] - [Sub (l : AE) (r : AE)] - [Mul (l : AE) (r : AE)] - [Div (l : AE) (r : AE)]) - -;; to convert s-expressions into AEs -(define (parse-sx sx) - (let ([rec (lambda (fn sx) - (parse-sx (fn (s-exp->list sx))))]) - (cond - [(s-exp-match? `NUMBER sx) - (Num (s-exp->number sx))] - [(s-exp-match? `(ANY + ANY) sx) - (Add (rec first sx) (rec third sx))] - [(s-exp-match? `(ANY - ANY) sx) - (Sub (rec first sx) (rec third sx))] - [(s-exp-match? `(ANY * ANY) sx) - (Mul (rec first sx) (rec third sx))] - [(s-exp-match? `(ANY / ANY) sx) - (Div (rec first sx) (rec third sx))] - [else (error 'parse-sx (to-string sx))]))) - -;; consumes an AE and computes the corresponding number -(define (eval expr) - (type-case AE expr - [(Num n) n] - [(Add l r) (+ (eval l) (eval r))] - [(Sub l r) (- (eval l) (eval r))] - [(Mul l r) (* (eval l) (eval r))] - [(Div l r) (if (equal? 0 (eval r)) - (cond - [(< 0 (eval l)) +inf.0] - [(> 0 (eval l)) -inf.0] - [else +nan.0]) - (/ (eval l) (eval r)))])) - -;; evaluate an AE program contained in an s-expr -(define (run sx) - (eval (parse-sx sx))) - -;; Basic Parser tests -(test (run `3) 3) ; Evalutate number by itself -(test (run `{3 + 4}) 7) ; Evaluate two positive integers addition -(test (run `{{3 - 4} + 7}) 6) ; Evaluate subtraction and addition -(test (run `{8 * 9}) 72) ; Evaluate multiplication -(test (run `{8 / 2}) 4) ; Evaluate division - -;; Divide by zero tests -(test (run `{-8 / 0}) -inf.0) ; Negative divide by zero -(test (run `{8 / {5 - 5}}) +inf.0) ; Positive divide by zero -(test (run `{1 / {1 / 0}}) 0.0) ; Divide by positive infinity -(test (run `{0 / 0}) +nan.0) ; Special 0/0 case - -;; Parser Errors -(test/exn (run `{+ 1 1}) "parse") ; Parse error \ No newline at end of file