diff options
author | Darren Bane <darren.bane@gmail.com> | 2020-09-02 23:46:59 +0100 |
---|---|---|
committer | Darren Bane <darren.bane@gmail.com> | 2020-09-02 23:46:59 +0100 |
commit | d34eb60916327589576143fa84c1a2468bee6cf3 (patch) | |
tree | d6a4ad519c2bd0801ee9a385ac7da8bfb9e4b40f /cabs-syn.lisp | |
parent | f4389b863ecc0fe17cc13d12cc39ca2b37e3c0d7 (diff) | |
download | lsp-d34eb60916327589576143fa84c1a2468bee6cf3.tar.gz |
Making changes
Diffstat (limited to 'cabs-syn.lisp')
-rw-r--r-- | cabs-syn.lisp | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/cabs-syn.lisp b/cabs-syn.lisp index 1a921a0..12b9fd4 100644 --- a/cabs-syn.lisp +++ b/cabs-syn.lisp @@ -1,5 +1,5 @@ (defpackage #:cabs-syn - (:use #:common-lisp) + (:use #:common-lisp #:cutil) (:export #:<exp-int> #:<exp-var> @@ -16,19 +16,13 @@ #:<phrase-list> #:<phrase-run> #:<phrase-p-end> - priority-uop - priority-binop)) + #:priority-uop + #:priority-binop)) (in-package #:cabs-syn) ;; If these were only C enums, without any payload, I'd just use symbols and (error) in the t case. ;; But classes seem better for the associated data, in discriminated unions. -;; Is it worth putting just 3 lines in a "cutils.lisp" or something? -;; Not for now, since it's private. -(defclass <abstract-class> () ()) -(defmethod make-instance ((self <abstract-class>) &key) - (error "Cannot instantiate abstract class ~A" (class-name c))) - (defclass <expression> () () (:metaclass <abstract-class>)) (defclass <exp-int> (<expression>) ((int :accessor int))) (defclass <exp-var> (<expression>) ((var :accessor var))) @@ -44,7 +38,7 @@ (defclass <cmd-if> (<command>) ((expr :accessor expr) (num :accessor num))) (defclass <cmd-let> (<command>) ((var :accessor var) (expr :accessor expr))) -(defclass <line> () ((num :accessor num) (cmd :accessor cmd))) +(defclass <line> () ((num :initarg n :accessor num) (cmd :initarg c :accessor cmd))) (defclass <phrase> () () (:metaclass <abstract-class>)) (defclass <phrase-line> (<phrase>) ((line :accessor line))) @@ -57,8 +51,7 @@ ((not) 1) ((uminus) 7))) -(defun priority-binop (bin-op) - (cond ((member bin-op '(mult div)) 6) +(defun priority-binop (bin-op (cond ((member bin-op '(mult div)) 6) ((member bin-op '(plus minus)) 5) ((eql bin-op 'mod) 4) ((member bin-op '(equal less lesseq great greateq diff)) 3) |