Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defvar relops '(#\= #\< #\> (#\< #\>) (#\< #\=) (#\> #\=))) ; instance variables for the relational operators
- (defvar literals '((#\t #\r #\u #\e) (#\f #\a #\l #\s #\e))) ; boolean literals
- (defvar letters '(#\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k #\l #\m #\n #\o #\p
- #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z #\A #\B #\C #\D #\E #\F #\G #\H
- #\I #\J #\K #\L #\M #\N #\O #\P #\Q #\R #\S #\T #\U #\V #\W #\X
- #\Y #\Z)) ;list of letters
- (defvar digits '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)); list of digits
- (defvar whitespace '(#\Tab #\Linefeed #\Return #\Space))
- (defvar input '(#\t #\r #\u #\e #\^))
- (defvar cur ()) ;global variable to hold current token
- (defun main ()
- (format t "Entering <bool_expr>~%")
- (print (expr)))
- (defun expr ()
- (progn
- (reload)
- (format t "Entering <and_term>~%")
- (cond ((equal (first cur) #\|)
- (progn
- (pop input)
- (reload)
- (return-from expr(expr))))
- ((equal input nil)
- t)
- (t nil)))
- (term))
- (defun term ()
- (format t "Entering <bool_factor>~%")
- (return-from term (factor))
- (if (equal (first cur) #\&)
- (progn (pop input)
- (print "&")
- (reload)
- (format t "Entering <bool_factor>~%")
- (factor))))
- (defun factor ()
- (cond ((member cur literals :test 'equal)
- (return-from factor (literal)))
- ((equal (first cur) #\!)
- (progn (pop cur)
- (return-from factor (literal))))
- ((or (member (first cur) letters) (member (first cur) digits))
- (progn
- (format t "Entering <relation_expr>~%")
- (return-from factor (relation))))
- (t (return-from factor nil))))
- (defun literal ()
- (format t "Entering <bool_literal>~%")
- (setf cur ()));empties the list so we can fill it with more of the expression
- (defun relation ()
- (if (member (first cur) relops)
- (progn (relop)
- (reload)
- (cond ((id)
- (id))
- (t (return-from relation nil)))))
- (id))
- (defun id ()
- (if (equal cur nil)
- (return-from id nil))
- (format t "Entering <id>")
- (loop for c in cur do
- (if (not (or (member c letters) (member c digits)))
- (return-from id nil)))
- (reload)
- t)
- (defun relop ()
- (format t "Entering <relop>~%"))
- (defun reload ()
- (setf cur ())
- (loop for c in input until (member c whitespace) do
- (setf cur (append cur (list c)))
- (pop input))
- (pop input))
- (main)
Add Comment
Please, Sign In to add comment