3 (defun try-parse* (parser string)
4 (call-with-module-environment
6 (let* ((char-scanner (make-string-scanner string))
7 (scanner (make-instance 'sod-token-scanner
8 :char-scanner char-scanner)))
9 (funcall parser scanner)))))
11 (defmacro try-parse ((scanner string) &body parser)
12 `(try-parse* (lambda (,scanner)
14 (token-scanner-context :scanner ,scanner)