X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/aa14a4cddcb96b681d5c19a2ec8bad382f43b264..dfdcf6ca08c0c619900fd7d81893121f80f02d9b:/src/parser/parser-test.lisp diff --git a/src/parser/parser-test.lisp b/src/parser/parser-test.lisp index f25961e..4041586 100644 --- a/src/parser/parser-test.lisp +++ b/src/parser/parser-test.lisp @@ -38,6 +38,7 @@ (once-only (string value winp consumedp) (with-gensyms (my-value my-winp my-consumedp label what) `(let ((,scanner (make-string-scanner ,string))) + (declare (ignorable ,scanner)) (multiple-value-bind (,my-value ,my-winp ,my-consumedp) (with-parser-context (character-scanner-context :scanner ,scanner) @@ -361,10 +362,11 @@ ;;;-------------------------------------------------------------------------- ;;; Test expression parser. -(defparse token (:context (context character-parser-context) parser) - (with-gensyms (value) - (expand-parser-spec context - `(seq ((,value ,parser) :whitespace) ,value)))) +(eval-when (:compile-toplevel :load-toplevel :execute) + (defparse token (:context (context character-parser-context) parser) + (with-gensyms (value) + (expand-parser-spec context + `(seq ((,value ,parser) :whitespace) ,value))))) (let ((add (binop "+" (x y 5) `(+ ,x ,y))) (sub (binop "-" (x y 5) `(- ,x ,y))) @@ -400,10 +402,13 @@ (seq (#\&) and) (seq (#\|) or))) (token (or (seq (#\() lp) + (seq (#\[) lb) (seq (#\-) neg) (seq (#\!) not))) (token (or (seq (#\!) fact) - (when nestedp (seq (#\)) rp)))))) + (when nestedp + (or (seq (#\)) rp) + (seq (#\]) rb))))))) (next (or :any (t :eof)))) (cons value next)))))) @@ -425,7 +430,6 @@ (assert-expr-parse "1 ** 2 ** 3" '((** 1 (** 2 3)) . :eof) t t) (assert-expr-parse "1 + 2) * 3" '((+ 1 2) . #\)) t t) (assert-expr-parse "1 + 2 * 3" '((+ 1 (* 2 3)) . :eof) t t) - (assert-expr-parse "! 1 + 2 = 3 | 6 - 3 /= 12/6" '((or (not (= (+ 1 2) 3)) (/= (- 6 3) (/ 12 6)))