Function: antlr-directory-dependencies

antlr-directory-dependencies is a byte-compiled function defined in antlr-mode.el.gz.

Signature

(antlr-directory-dependencies DIRNAME)

Documentation

Return dependencies for all grammar files in directory DIRNAME.

This function is for ANTLR v2 grammars only.

The result looks like ((CLASS-SPEC ...) . (FILE-DEP ...))
  where CLASS-SPEC = (CLASS (FILE . EVOCAB) ...).

FILE-DEP are the dependencies for each grammar file in DIRNAME, see antlr-file-dependencies. For each grammar class CLASS, FILE is a grammar file in which CLASS is defined and EVOCAB is the name of the export vocabulary specified in that file.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/antlr-mode.el.gz
(defun antlr-directory-dependencies (dirname)
  "Return dependencies for all grammar files in directory DIRNAME.
This function is for ANTLR v2 grammars only.

The result looks like \((CLASS-SPEC ...) . \(FILE-DEP ...))
  where CLASS-SPEC = (CLASS (FILE . EVOCAB) ...).

FILE-DEP are the dependencies for each grammar file in DIRNAME, see
`antlr-file-dependencies'.  For each grammar class CLASS, FILE is a
grammar file in which CLASS is defined and EVOCAB is the name of the
export vocabulary specified in that file."
  (let ((grammar (directory-files dirname t "\\.g\\'")))
    (when grammar
      (let ((antlr-imenu-name nil)		; dynamic-let: no imenu
	    (expanded-regexp
             (concat (format (regexp-quote
                              (cadr antlr-special-file-formats))
                             ".+")
                     "\\'"))
	    classes dependencies)
        (with-temp-buffer
          (dolist (file grammar)
            (when (and (file-regular-p file)
                       (null (string-match expanded-regexp file)))
              (insert-file-contents file t nil nil t)
              (normal-mode t)           ; necessary for major-mode, syntax
					; table and `antlr-language'
              (when (and (derived-mode-p 'antlr-mode)
                         (eq antlr-tool-version 'antlr-v2))
                (let* ((file-deps (antlr-file-dependencies))
                       (file (car file-deps)))
                  (when file-deps
                    (dolist (class-def (cl-caadr file-deps))
                      (let ((file-evocab (cons file (cdr class-def)))
                            (class-spec (assoc (car class-def) classes)))
                        (if class-spec
                            (nconc (cdr class-spec) (list file-evocab))
                          (push (list (car class-def) file-evocab)
                                classes))))
                    (push file-deps dependencies)))))))
	(cons (nreverse classes) (nreverse dependencies))))))