From 86c57d32ddb5e62ef711b13d4e269c72e8578328 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 14 Feb 2017 22:44:17 -0800 Subject: [PATCH] fix mod --- beautiful-racket-demo/basic-demo-2/expr.rkt | 8 ++++++-- beautiful-racket-demo/basic-demo-2/lexer.rkt | 2 +- beautiful-racket-demo/basic-demo-2/parser.rkt | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/beautiful-racket-demo/basic-demo-2/expr.rkt b/beautiful-racket-demo/basic-demo-2/expr.rkt index 8b3dfd7..44351de 100644 --- a/beautiful-racket-demo/basic-demo-2/expr.rkt +++ b/beautiful-racket-demo/basic-demo-2/expr.rkt @@ -12,8 +12,12 @@ [(_ VAL) #'VAL] [(_ LEFT "*" RIGHT) #'(* LEFT RIGHT)] [(_ LEFT "/" RIGHT) #'(/ LEFT RIGHT 1.0)] - [(_ LEFT "^" RIGHT) #'(expt LEFT RIGHT)] - [(_ LEFT "%" RIGHT) #'(modulo LEFT RIGHT)]) + [(_ LEFT "mod" RIGHT) #'(modulo LEFT RIGHT)]) + +;; b-expt : [b-expt "^"] b-value +(define-macro-cases b-expt + [(_ VAL) #'VAL] + [(_ LEFT "^" RIGHT) #'(expt LEFT RIGHT)]) (define (b-expr expr) (if (integer? expr) (inexact->exact expr) expr)) diff --git a/beautiful-racket-demo/basic-demo-2/lexer.rkt b/beautiful-racket-demo/basic-demo-2/lexer.rkt index 523be1f..b01c0c7 100644 --- a/beautiful-racket-demo/basic-demo-2/lexer.rkt +++ b/beautiful-racket-demo/basic-demo-2/lexer.rkt @@ -3,7 +3,7 @@ (define-lex-abbrev digits (:+ (char-set "0123456789"))) -(define-lex-abbrev reserved-terms (:or "print" "goto" "end" "+" ":" "let" "=" "gosub" "return" "-" "for" "to" "step" "next" "if" "then" "else" "and" "or" "<" ">" "*" "/" "(" ")" "^" "!" "%" "input" ";" "def")) +(define-lex-abbrev reserved-terms (:or "print" "goto" "end" "+" ":" "let" "=" "gosub" "return" "-" "for" "to" "step" "next" "if" "then" "else" "and" "or" "<" ">" "*" "/" "(" ")" "^" "!" "mod" "input" ";" "def")) (define basic-lexer (lexer-srcloc diff --git a/beautiful-racket-demo/basic-demo-2/parser.rkt b/beautiful-racket-demo/basic-demo-2/parser.rkt index 873fb39..d064388 100644 --- a/beautiful-racket-demo/basic-demo-2/parser.rkt +++ b/beautiful-racket-demo/basic-demo-2/parser.rkt @@ -25,7 +25,8 @@ b-expr : b-logic-expr b-logic-expr : [b-logic-expr ("and" | "or")] b-comp-expr b-comp-expr : [b-comp-expr ("=" | "<" | ">")] b-sum b-sum : [b-sum ("+"|"-")] b-product -b-product : [b-product ("*"|"/"|"%"|"^")] b-value +b-product : [b-product ("*"|"/"|"mod")] b-expt +b-expt : [b-expt "^"] b-value ;; values @b-value : b-id | b-number | /"(" b-expr /")" | b-not | b-func