Update of /project/climacs/cvsroot/climacs In directory common-lisp.net:/tmp/cvs-serv22111
Modified Files: syntax.lisp Log Message: Performance improvement of the Earley parser. handle-item is no longer called on nil items which represented the vast majority of calls.
Date: Fri Apr 15 07:02:53 2005 Author: rstrandh
Index: climacs/syntax.lisp diff -u climacs/syntax.lisp:1.42 climacs/syntax.lisp:1.43 --- climacs/syntax.lisp:1.42 Thu Apr 14 10:13:18 2005 +++ climacs/syntax.lisp Fri Apr 15 07:02:53 2005 @@ -372,8 +372,9 @@ (flet ((handle-parse-tree () (map-over-incomplete-items from-state (lambda (orig-state incomplete-item) - (handle-item (derive-item incomplete-item parse-tree) - orig-state to-state))))) + (let ((new-item (derive-item incomplete-item parse-tree))) + (when new-item + (handle-item new-item orig-state to-state))))))) (cond ((find parse-tree (gethash from-state parse-trees) :test #'parse-tree-better) (setf (gethash from-state parse-trees) @@ -387,9 +388,6 @@ (t (push parse-tree (gethash from-state parse-trees)) (handle-parse-tree))))))
-(defmethod handle-item ((item (eql nil)) orig-state to-state) - nil) - (defmethod handle-item ((item incomplete-item) orig-state to-state) (declare (optimize speed)) (cond ((find item (the list (gethash orig-state (incomplete-items to-state))) @@ -410,8 +408,8 @@ :parse-tree (right-hand-side rule))) to-state to-state)) (loop for parse-tree in (gethash to-state (parse-trees to-state)) - do (handle-item (derive-item item parse-tree) - to-state to-state))))) + do (let ((new-item (derive-item item parse-tree))) + (when new-item (handle-item new-item to-state to-state)))))))
(defmethod handle-item ((item complete-item) orig-state to-state) (potentially-handle-parse-tree (parse-tree item) orig-state to-state))