From 1f47a9681ceca793c69d5326fdbf47669cc63854 Mon Sep 17 00:00:00 2001 From: Alex Klinkhamer Date: Sat, 12 Jul 2008 19:07:46 -0400 Subject: [PATCH] +Enumerated constants! --- src/infix-parser.lisp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/infix-parser.lisp b/src/infix-parser.lisp index e98f888..414bb56 100644 --- a/src/infix-parser.lisp +++ b/src/infix-parser.lisp @@ -25,18 +25,30 @@ (in-package :lineal) -;;; Should probably handle this more dynamically at compile-time. +;;; Define variables as constant integers +(defmacro enumerate-constants (&rest syms &aux (v 0)) + (declare (integer v)) + (cons 'progn + (mapcar + (lambda (k) + (unless (symbolp k) + (setf (values k v) (values-list k))) + (prog1 `(defconstant ,k ,v) + (incf v))) + syms))) + ;V Set precedence ranks.V -(defconstant +base-rank+ 0) -(defconstant +paren-rank+ 1) -(defconstant +comma-rank+ 2) -(defconstant +fn-rank+ 3) -(defconstant +addn-rank+ 4) -(defconstant +subtrn-rank+ 5) -(defconstant +multn-rank+ 6) -(defconstant +divisn-rank+ 7) -(defconstant +exptn-rank+ 8) -(defconstant +vip-rank+ 9);< Virtually infinite precedence. +(enumerate-constants + +base-rank+ + +paren-rank+ + +comma-rank+ + +fn-rank+ + +addn-rank+ + +subtrn-rank+ + +multn-rank+ + +divisn-rank+ + +exptn-rank+ + +vip-rank+);< Virtually infinite precedence. ;;; a b = a*b (defun multn-if-last-read () -- 2.11.4.GIT