;;;----- Licensing notice ---------------------------------------------------
;;;
-;;; This file is part of the Sensble Object Design, an object system for C.
+;;; This file is part of the Sensible Object Design, an object system for C.
;;;
;;; SOD is free software; you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License as published by
(cl:in-package #:sod)
+;;;--------------------------------------------------------------------------
+;;; Miscellaneous details.
+
+(export '*sod-version*)
+(defparameter *sod-version* sod-sysdef:*version*
+ "The version of the SOD translator system, as a string.")
+
;;;--------------------------------------------------------------------------
;;; Debugging utilities.
:if-does-not-exist :create)
(output-module (read-module path) reason out)))
+(export 'test-parser)
+(defmacro test-parser ((scanner &key) parser input)
+ "Convenient macro for testing parsers at the REPL.
+
+ This is a macro so that the parser can use the fancy syntax. The name
+ SCANNER is bound to a `sod-token-scanner' reading tokens from the INPUT
+ string. Then the PARSER is invoked and three values are returned: a
+ `successp' flag indicating whether the parser succeeded; the result,
+ output or error indicator, of the parser; and a list consisting of the
+ lookahead token type and value, and a string containing the untokenized
+ remaining input."
+ (once-only (input)
+ (with-gensyms (char-scanner value winp consumedp where)
+ `(let* ((,char-scanner (make-string-scanner ,input))
+ (,scanner (make-instance 'sod-token-scanner
+ :char-scanner ,char-scanner
+ :filename "<test-input>")))
+ (with-parser-context (token-scanner-context :scanner ,scanner)
+ (multiple-value-bind (,value ,winp ,consumedp) (parse ,parser)
+ (declare (ignore ,consumedp))
+ (let ((,where (scanner-capture-place ,char-scanner)))
+ (values ,winp ,value
+ (list (token-type ,scanner) (token-value ,scanner)
+ (subseq ,input ,where))))))))))
+
;;;--------------------------------------------------------------------------
;;; Calisthenics.