;;; -*- Mode: LISP; Package: :cl-user; BASE: 10; Syntax: ANSI-Common-Lisp; ;-*- ;;; Touched: Tue Apr 23 12:33:07 2002 ;;; Time-stamp: <2002-12-13 22:02:24> ;;; LOAD THIS FILE (in-package "CL-USER") (defvar *ZEBU-directory* (or (and *load-truename* (make-pathname :directory (pathname-directory *load-truename*))) (default-directory))) (defvar *ZEBU-binary-directory* (make-pathname :directory (append (pathname-directory *ZEBU-directory*) (list "binary")))) (defvar *load-source-pathname-types* '("lisp" NIL)) (defvar *load-binary-pathname-types* '("x86f")) (load (merge-pathnames "zebu-package.lisp" *ZEBU-directory*)) (defparameter zebu:*zebu-version* (let ((file (make-pathname :name "Version" :type nil :directory (pathname-directory *ZEBU-directory*)))) (when (probe-file file) (with-open-file (s file :direction :input) (read-line s))))) (defun zebu-compile-file-1 (source &key (OUTPUT-FILE (MERGE-PATHNAMES (MAKE-PATHNAME :TYPE "tab" :DEFAULTS source) *zebu-binary-directory*)) (error-file nil) (trace-file nil) (error-output t) (load nil) (external-format :default) ((:verbose *compile-verbose*) *compile-verbose*) ((:print *compile-print*) *compile-print*) ((:progress *compile-progress*) *compile-progress*) ((:block-compile *block-compile-argument*) *block-compile-default*) ((:entry-points *entry-points*) nil) ((:byte-compile *byte-compile*) *byte-compile-default*) (grammar 'zebu::*default-grammar*) (compile-domain t)) (declare (ignore *BYTE-COMPILE* *ENTRY-POINTS* *BLOCK-COMPILE-ARGUMENT* EXTERNAL-FORMAT LOAD ERROR-OUTPUT TRACE-FILE ERROR-FILE)) (zebu:zebu-compile-file source :grammar grammar :output-file output-file :compile-domain compile-domain :verbose t)) (defun zebu-load-file-1 (filename &key (verbose nil verbose-p) (print nil print-p) (if-source-newer nil if-source-newer-p) (if-does-not-exist :error) contents (external-format :default)) (declare (ignore EXTERNAL-FORMAT CONTENTS IF-DOES-NOT-EXIST IF-SOURCE-NEWER-P IF-SOURCE-NEWER PRINT-P PRINT VERBOSE-P)) (zebu:zebu-load-file filename :verbose verbose)) (in-package "ZEBU") (defun set-kb-sequence-first (x y) (declare (type kb-sequence x)) (setf (kb-sequence-first x) y)) (defun set-kb-sequence-rest (x y) (declare (type kb-sequence x)) (setf (kb-sequence-rest x) y)) ;;; ;;; ;;; sysdcls (in-package "CL-USER") #-mk-defsystem(require :defsystem) ;; say no to defsystem (mk:define-language :ZEBU :compiler 'zebu-compile-file-1 :loader 'zebu-load-file-1 :source-extension "zb" :binary-extension "tab") (mk:defsystem "ZEBU-KERNEL" :source-pathname #.*ZEBU-directory* :binary-pathname #.*ZEBU-binary-directory* :documentation "Functions needed in the ZEBU run-time and compile-time environment" :components ((:file "zebu-package") (:file "zebu-aux") (:file "zebu-mg-hierarchy"))) (mk:defsystem "ZEBU-CORE" :source-pathname #.*ZEBU-directory* :binary-pathname #.*ZEBU-binary-directory* :depends-on ("ZEBU-KERNEL") :documentation "Run time system for LALR(1) parser" :components ((:file "zebu-loader") (:file "zebu-driver":depends-on ("zebu-loader")) (:file "zebu-actions" :depends-on ("zebu-loader")))) (mk:defsystem "ZEBU-COMPILER" :source-pathname #.*ZEBU-directory* :binary-pathname #.*ZEBU-binary-directory* :depends-on ("ZEBU-CORE" "ZEBU-KERNEL") :documentation "Compile time system for LALR(1) parser: Converts a grammar to a parse table" :components ((:file "zebu-regex") (:file "zebu-oset") (:file "zebu-g-symbol" :depends-on ("zebu-oset")) (:file "zebu-loadgram" :depends-on ("zebu-g-symbol" "zebu-oset")) (:file "zebu-generator" :depends-on ("zebu-kb-domain" "zebu-loadgram")) (:file "zebu-lr0-sets" :depends-on ("zebu-g-symbol" "zebu-loadgram")) (:file "zebu-empty-st" :depends-on ("zebu-loadgram")) (:file "zebu-first" :depends-on ("zebu-loadgram" "zebu-oset")) (:file "zebu-follow" :depends-on ("zebu-loadgram" "zebu-first")) (:file "zebu-tables" :depends-on ( "zebu-g-symbol" "zebu-loadgram" "zebu-lr0-sets")) (:file "zebu-printers" :depends-on ("zebu-loadgram" "zebu-lr0-sets" "zebu-tables")) (:file "zebu-slr") (:file "zebu-closure" :depends-on ("zebu-oset" "zebu-g-symbol" "zebu-first")) (:file "zebu-lalr1" :depends-on ("zebu-oset" "zebu-lr0-sets" "zebu-follow")) (:file "zebu-dump" :depends-on ("zebu-loadgram" "zebu-slr" "zebu-lalr1")) (:file "zebu-compile" :depends-on ("zebu-dump")) (:file "zebu-mg" :depends-on nil #+nil ("zebu-compile" "zebu-dump" "zebu-empty-st" "zebu-closure" "zebu-tables" "zebu-generator") :source-extension "zb" :binary-extension "tab" :compiler zebu-compile-file-1 :loader zebu-load-file-1 :language :ZEBU) (:file "zebu-kb-domain"))) (mk:defsystem "ZEBU-RR" :source-pathname #.*ZEBU-directory* :binary-pathname #.*ZEBU-binary-directory* :depends-on ("ZEBU-CORE" "ZEBU-KERNEL") :documentation "Base routines for rewriting abstract syntax trees" :components ((:file "zebu-kb-domain") (:file "zebu-tree-attributes" :depends-on ("zebu-kb-domain")) (:file "zebra-debug" :depends-on ("zebu-kb-domain" "zebu-tree-attributes")))) (mk:defsystem "ZEBU" :source-pathname #.*ZEBU-directory* :binary-pathname #.*ZEBU-binary-directory* :depends-on ("ZEBU-KERNEL" "ZEBU-CORE" "ZEBU-COMPILER" "ZEBU-RR") :components ((:module "ZEBU-KERNEL") (:module "ZEBU-CORE") (:module "ZEBU-COMPILER") (:module "ZEBU-RR"))) (defvar *ZEBU-test-directory* (make-pathname :directory (append (pathname-directory *ZEBU-directory*) (list "test")))) (defvar *ZEBU-test-binary-directory* (make-pathname :directory (append (pathname-directory *ZEBU-test-directory*) (list "binary")))) (ensure-directories-exist *ZEBU-binary-directory*) (defpackage "ZEBU-TEST" (:use "ZEBU" "COMMON-LISP")) (mk:defsystem "ZEBU-TEST" :depends-on ("ZEBU" "ZEBU-COMPILER") :source-pathname #.*ZEBU-test-directory* :binary-pathname #.*ZEBU-test-binary-directory* :source-extension "zb" :binary-extension "tab" :language :ZEBU :compiler zebu-compile-file-1 :loader zebu-load-file-1 :components ((:file "ex1") (:file "ex1-dom" :source-extension "lisp" :compiler compile-file :loader load :depends-on ("ex1")) (:file "arith") ; this uses the meta-grammar (:file "ar-dom" :source-extension "lisp" :depends-on ("arith") :compiler compile-file :loader load) (:file "ex2") (:file "ex2-dom" :depends-on ("ex2") :source-extension "lisp" :compiler compile-file :loader load) (:file "ex3") ;;; defsystem cant handle #+nil(:file "ex4.40") #+nil(:file "ex4.41") #+nil(:file "ex4.42") (:file "mini-la") ; this uses the meta-grammar w Kleene (:file "minl-dom" :depends-on ("mini-la") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) "useless" "simple" "lr4-21" (:file "lr4-dom" :depends-on ("lr4-21") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) "ex6_2" (:file "ex6-dom" :depends-on ("ex6_2") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) "pc" (:file "pc-dom" :depends-on ("pc") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) "pc1" ; this uses the null-grammar (:file "pc1-dom" :depends-on ("pc1") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) "pc2" ; this uses the meta-grammar (:file "pc2-dom" :depends-on ("pc2") :source-extension "lisp" :compile-only t :compiler compile-file :loader load) ;;; don't compile the following: #+nil(:file "exercise" :suffixes "lisp" :type :lisp-example :depends-on ("ZEBU-RR")) #+nil("regextst" :suffixes "lisp" :type :lisp-example))) ;;; ;;; #| (declaim (optimize (speed 3) (safety 1) (compilation-speed 0))) (mk:compile-system "ZEBU") (mk:load-system "ZEBU") |# ;;; NOTES: ;;; - tested under zebu-3.5.5 ;;; - must dos2unix test files