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))))))