SHOW:
|
|
- or go back to the newest paste.
| 1 | (ql:quickload :smug) | |
| 2 | (defpackage :dclisp (:use :cl :smug)) | |
| 3 | (in-package :dclisp) | |
| 4 | ||
| 5 | ;;(defvar global-table '(("define" (atom args definiton)
| |
| 6 | ||
| 7 | (defun sexp () | |
| 8 | (skip-whitespace | |
| 9 | (=or (<list>) (<atom>)))) | |
| 10 | ||
| 11 | (defun <list> () | |
| 12 | (=let* ((_ (=char #\()) | |
| 13 | (contents (skip-whitespace | |
| 14 | (zero-or-more (sexp)))) | |
| 15 | (_ (=or (=char #\))))) | |
| 16 | (result contents))) | |
| 17 | ||
| 18 | (defun <atom> () | |
| 19 | (text (none-of "() "))) | |
| 20 | ||
| 21 | (defun parse-input (input) | |
| 22 | - | (let* ((parsed (funcall (sexp) input))) |
| 22 | + | (let* ((parsed (car (funcall (sexp) input)))) |
| 23 | (if (equal (cdr parsed) nil) | |
| 24 | (car parsed) | |
| 25 | (cons (car parsed) (parse-input (cdr parsed)))))) |