Clean up library API.
authorUtz-Uwe Haus <lisp@uuhaus.de>
Wed, 1 Oct 2008 20:40:33 +0000 (1 22:40 +0200)
committerUtz-Uwe Haus <lisp@uuhaus.de>
Wed, 1 Oct 2008 20:40:33 +0000 (1 22:40 +0200)
Signed-off-by: Utz-Uwe Haus <lisp@uuhaus.de>
entrypoints.lisp
package.lisp
pegparser-boot.lisp
pegutils.lisp

index a270d0e..a612595 100644 (file)
 
 (in-package #:opossum)
 \f
+;; low-level macros
+(defmacro get-string-parser (pkg)
+  "Return the parse-string function in the package PKG."
+  `(let ((*package* ,pkg))
+    #'parse-string))
+
+(defmacro get-file-parser (pkg)
+  "Return the parse-file function in the package PKG."
+  `(let ((*package* ,pkg))
+    #'parse-file))
 
+(defmacro get-stream-parser (pkg)
+  "Return the parse-stream function in the package PKG."
+  `(let ((*package* ,pkg))
+    #'parse-stream))
 \f
+
 ;;; parser entry point
-(defun make-string-parser (grammarfile head &key (dst-package (make-default-dst-package grammarfile)))
+(defun make-string-parser (grammarfile &rest args
+                          &key start-rule dst-package )
   "Return a function of 1 argument, a string, that parses according to GRAMMARFILE, starting at rule named HEAD. The parser is instantiated in package DST-PACKAGE."
-  (opossum:generate-parser-package grammarfile dst-package head)
-  (let ((*package* dst-package))
-    #'parse-string))
+  (declare (ignore start-rule dst-package))
+  (get-string-parser
+   (apply #'opossum:generate-parser-package grammarfile args)))
 
 (defun make-file-parser (grammarfile head &key (dst-package (make-default-dst-package grammarfile)))
   "Return a function of 1 argument, a file, that parses according to GRAMMARFILE, starting at rule named HEAD. The parser is instantiated in package DST-PACKAGE."
-  (opossum:generate-parser-package grammarfile dst-package head)
-  (let ((*package* dst-package))
-    #'parse-file))
+  (get-file-parser (opossum:generate-parser-package grammarfile dst-package head)))
 
 (defun make-stream-parser (grammarfile head &key (dst-package (make-default-dst-package grammarfile)))
-  "Return a function of 1 argument, a file, that parses according to GRAMMARFILE, starting at rule named HEAD. The parser is instantiated in package DST-PACKAGE."
-  (opossum:generate-parser-package grammarfile dst-package head)
-  (let ((*package* dst-package))
-    #'parse-stream))
+  "Return a function of 1 argument, a stream, that parses according to GRAMMARFILE, starting at rule named HEAD. The parser is instantiated in package DST-PACKAGE."
+  (get-stream-parser (opossum:generate-parser-package grammarfile dst-package head)))
 
index 6d4da94..38a91d2 100644 (file)
   (:export #:context)
   ;; special variables
   (:export #:*context*)
-  ;; user-visible functions
-  (:export #:read-file #:read-stream
-          #:parse-file #:parse-string #:parse-stream
-          #:generate-parser-file
-          #:generate-parser-package
-          #:make-string-parser
-          #:make-file-parser))
+  ;; low-level user interface
+  (:export #:generate-parser-file #:generate-parser-package
+          #:get-string-parser #:get-file-parser #:get-stream-parser
+          #:parse-file #:parse-string #:parse-stream)
+  ;; high-level user interface
+  (:export #:make-string-parser
+          #:make-file-parser
+          #:make-stream-parser))
 
 
 \f
index 58f127b..f24368c 100644 (file)
@@ -5,7 +5,7 @@
 (defun parse-file (f)
   (let ((opossum:*context* (make-instance 'opossum:context :start-index 0
                                          :destpkg *package*
-                                         :input (opossum:read-file f))))
+                                         :input (opossum::read-file f))))
     (funcall (|parse_program|) 0)))
 
 (DEFUN |parse_program| ()
index 9fbd230..b5e928e 100644 (file)
@@ -373,10 +373,10 @@ returns the result of that function, or a failure context if none succeeded."
   (make-package (gensym "opossum-parser")
                :documentation (format T "Opossum parser for grammar ~A" grammarfile)))
 
-(defun generate-parser-package (grammarfile dst-package head &key start-rule (parse-file-fun #'opossum:parse-file))
+(defun generate-parser-package (grammarfile &key (dst-package (make-package (gensym "opossum-parser-")))
+                               start-rule (parse-file-fun #'opossum:parse-file))
   "Create functions to parse using GRAMMARFILE in DST-PACKAGE, starting ar rule named HEAD.
 DST-PACKAGE will contain the 3 functions PARSE-STRING, PARSE-FILE and PARSE-STREAM as exported entrypoints."
-  (declare (ignore start-rule))
   (error "This is broken and needs to be merged with g-p-f.")
   (let ((*package* dst-package))
     (multiple-value-bind (form actions)
@@ -390,9 +390,9 @@ DST-PACKAGE will contain the 3 functions PARSE-STRING, PARSE-FILE and PARSE-STRE
            :do (format *debug-io* "Compiled ~A~%" sym))
       (intern (compile 'parse-string
                       #'(lambda (s)
-                          `,(format nil "Parse S using grammar ~A starting at ~A" grammarfile head)
+                          `,(format nil "Parse S using grammar ~A starting at ~A" grammarfile start-rule)
                           (let ((*context* (make-instance 'opossum:context :dstpkg *package* :input s)))
-                            (funcall (make-name head) 0)))))
+                            (funcall (make-name start-rule) 0)))))
       (intern (compile 'parse-file
                       #'(lambda (f) (parse-string (read-file f)))))
       (intern (compile 'parse-stream