;;; -*- Mode: Lisp; Syntax: Common-Lisp; -*- File: language/parsing.lisp ;;;; Parsing Algorithms (defvar *grammar* nil "The current default grammar.") (defstruct (parse-node (:type list) (:constructor parse-node (category &optional children))) "The parse-node data structure implied in Figure 22.7 [p 666]" category children) (defun bottom-up-parse (words &optional (grammar *grammar*)) "Return a forest of parses or failure. [p 666]" (let ((forest (mapcar #'parse-node words))) (loop (if (and (length=1 forest) (eq (parse-node-category (first forest)) (grammar-start-symbol grammar))) (RETURN (first forest)) (let* ((i