Started adding a debug/trace mechanism
authorD Herring <dherring@at.tentpost.dot.com>
Sun, 11 Mar 2007 21:57:01 +0000 (17:57 -0400)
committerD Herring <dherring@at.tentpost.dot.com>
Sun, 11 Mar 2007 21:57:01 +0000 (17:57 -0400)
examples/tests.lisp
parser.lisp

index 32ffa18..8f6a42a 100644 (file)
@@ -1,5 +1,8 @@
+(use-package "EBNF-PARSER")
+
+
 ;; Simple tests
-(defun parse-test (string &key (start 0))
+(grammar-rule parse-test
   "match := 'a' | 'b'"
   (grammar-or
    (grammar-string "a")
index aeb73ce..401b020 100644 (file)
              "GRAMMAR-FUNC"
              "GRAMMAR-RULE"
              "START"
-             "STRING"))
+             "STRING"
+             "*ENABLE-DEBUG*"))
 
 (in-package "EBNF-PARSER")
 
+(defparameter *enable-debug* nil "compile debug statements into grammar rules")
+
 
 ;;; Internal utilities
 
 
 ;;; Helper macros
 
-
 (defmacro grammar-rule (name &body body)
   "defun wrapper to simplify rule production"
-  `(defun ,name (string &key (start 0))
-    ,@body))
+  (if *enable-debug*
+      (let ((b body)
+            (n (string name))
+            (doc (car body)))
+        (if (stringp doc)
+            (let ((b2 (cdr b)))
+              `(defun ,name (string &key (start 0))
+                ,doc
+                (format t "~A:~A" ,n start)
+                ,@b2))
+            `(defun ,name (string &key (start 0))
+              (format t "~A:~A" ,n start)
+              ,@body)))
+      `(defun ,name (string &key (start 0))
+        ,@body)))
+