Guest User

Untitled

a guest
Jan 18th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.38 KB | None | 0 0
  1. (defvar relops '(#\= #\< #\> (#\< #\>) (#\< #\=) (#\> #\=))) ; instance variables for the relational operators
  2. (defvar literals '((#\t #\r #\u #\e) (#\f #\a #\l #\s #\e))) ; boolean literals
  3. (defvar letters '(#\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k #\l #\m #\n #\o #\p
  4.           #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z #\A #\B #\C #\D #\E #\F #\G #\H
  5.           #\I #\J #\K #\L #\M #\N #\O #\P #\Q #\R #\S #\T #\U #\V #\W #\X
  6.           #\Y #\Z)) ;list of letters
  7. (defvar digits '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)); list of digits
  8. (defvar whitespace '(#\Tab #\Linefeed #\Return #\Space))
  9. (defvar input '(#\t #\r #\u #\e #\^))
  10. (defvar cur ()) ;global variable to hold current token
  11. (defun main ()
  12.   (format t "Entering <bool_expr>~%")
  13.   (print (expr)))
  14. (defun expr ()
  15.   (progn
  16.     (reload)
  17.     (format t "Entering <and_term>~%")
  18.     (cond ((equal (first cur) #\|)
  19.        (progn
  20.          (pop input)
  21.          (reload)
  22.          (return-from expr(expr))))
  23.       ((equal input nil)
  24.        t)
  25.       (t nil)))
  26.   (term))
  27. (defun term ()
  28.   (format t "Entering <bool_factor>~%")
  29.   (return-from term (factor))
  30.   (if (equal (first cur) #\&)
  31.       (progn (pop input)
  32.          (print "&")
  33.          (reload)
  34.          (format t "Entering <bool_factor>~%")
  35.          (factor))))
  36.  
  37.  
  38. (defun factor ()
  39.   (cond ((member cur literals :test 'equal)
  40.      (return-from factor (literal)))
  41.     ((equal (first cur) #\!)
  42.      (progn (pop cur)
  43.         (return-from factor (literal))))
  44.     ((or (member (first cur) letters) (member (first cur) digits))
  45.      (progn
  46.        (format t "Entering <relation_expr>~%")
  47.        (return-from factor (relation))))
  48.     (t (return-from factor nil))))  
  49.  
  50. (defun literal ()
  51.   (format t "Entering <bool_literal>~%")
  52.   (setf cur ()));empties the list so we can fill it with more of the expression
  53.  
  54. (defun relation ()
  55.   (if (member (first cur) relops)
  56.       (progn (relop)
  57.          (reload)
  58.          (cond ((id)
  59.             (id))
  60.            (t (return-from relation nil)))))
  61.   (id))
  62.  
  63.      
  64.  
  65. (defun id ()
  66.   (if (equal cur nil)
  67.       (return-from id nil))
  68.   (format t "Entering <id>")
  69.   (loop for c in cur do
  70.        (if (not (or (member c letters) (member c digits)))
  71.        (return-from id nil)))
  72.   (reload)
  73.   t)
  74.  
  75.        
  76. (defun relop ()
  77.   (format t "Entering <relop>~%"))
  78.  
  79. (defun reload ()
  80.   (setf cur ())
  81.   (loop for c in input until (member c whitespace) do
  82.        (setf cur (append cur (list c)))
  83.        (pop input))
  84.   (pop input))
  85.  
  86.  
  87. (main)
Add Comment
Please, Sign In to add comment