diff options
author | Darren Bane <darren.bane@gmail.com> | 2020-08-30 15:32:05 +0100 |
---|---|---|
committer | Darren Bane <darren.bane@gmail.com> | 2020-08-30 15:32:05 +0100 |
commit | 4e68c5a3613c8fad09a3bb155222f9d0bd1209e1 (patch) | |
tree | b6b6f57f10b2a0e1c95a4212db1d2ca98de4774b /cabs-syn.lisp | |
parent | d737f1ab887c1d3e7b97cfaa443e6037d5f53c5b (diff) | |
download | lsp-4e68c5a3613c8fad09a3bb155222f9d0bd1209e1.tar.gz |
Making changes
Diffstat (limited to 'cabs-syn.lisp')
-rw-r--r-- | cabs-syn.lisp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/cabs-syn.lisp b/cabs-syn.lisp index a339a47..1a921a0 100644 --- a/cabs-syn.lisp +++ b/cabs-syn.lisp @@ -1,14 +1,42 @@ +(defpackage #:cabs-syn + (:use #:common-lisp) + (:export + #:<exp-int> + #:<exp-var> + #:<exp-str> + #:<exp-unr> + #:<exp-bin> + #:<cmd-rem> + #:<cmd-goto> + #:<cmd-print> + #:<cmd-input> + #:<cmd-if> + #:<cmd-let> + #:<phrase-line> + #:<phrase-list> + #:<phrase-run> + #:<phrase-p-end> + 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. -(defclass <expression> () () (:abstractp t)) +;; 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))) (defclass <exp-str> (<expression>) ((str :accessor str))) (defclass <exp-unr> (<expression>) ((op :accessor op) (exp :accessor exp))) (defclass <exp-bin> (<expression>) ((exp1 :accessor exp1) (op :accessor op) (exp2 :accessor exp2))) -(defclass <command> () () (:abstractp t)) +(defclass <command> () () (:metaclass <abstract-class>)) (defclass <cmd-rem> (<command>) ((rem :accessor rem))) (defclass <cmd-goto> (<command>) ((goto :accessor goto))) (defclass <cmd-print> (<command>) ((expr :accessor expr))) @@ -18,7 +46,7 @@ (defclass <line> () ((num :accessor num) (cmd :accessor cmd))) -(defclass <phrase> () () (:abstractp t)) +(defclass <phrase> () () (:metaclass <abstract-class>)) (defclass <phrase-line> (<phrase>) ((line :accessor line))) (defclass <phrase-list> (<phrase>) ()) (defclass <phrase-run> (<phrase>) ()) @@ -35,3 +63,4 @@ ((eql bin-op 'mod) 4) ((member bin-op '(equal less lesseq great greateq diff)) 3) ((member bin-op '(and or)) 2))) +(provide "cabs-syn") |