Function: ebnf-term
ebnf-term is a byte-compiled function defined in ebnf-bnf.el.gz.
Signature
(ebnf-term TOKEN)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-bnf.el.gz
;;; term = factor
;;; | [factor] "+" ;; one-or-more
;;; | [factor] "/" [factor] ;; one-or-more
;;; .
(defun ebnf-term (token)
(let ((factor (ebnf-factor token)))
(and factor
(setq token (ebnf-bnf-lex)))
(cond
;; [factor] +
((eq token 'one-or-more)
(cons (ebnf-bnf-lex)
(and factor
(let ((kind (ebnf-node-kind factor)))
(cond
;; { A }+ + ==> { A }+
;; { A }* + ==> { A }*
((memq kind '(ebnf-generate-zero-or-more
ebnf-generate-one-or-more))
factor)
;; [ A ] + ==> { A }*
((eq kind 'ebnf-generate-optional)
(ebnf-make-zero-or-more (list factor)))
;; A +
(t
(ebnf-make-one-or-more (list factor)))
)))))
;; [factor] / [factor]
((eq token 'list)
(setq token (ebnf-bnf-lex))
(let ((sep (ebnf-factor token)))
(and sep
(setq factor (or factor (ebnf-make-empty))))
(cons (if sep
(ebnf-bnf-lex)
token)
(and factor
(ebnf-make-one-or-more factor sep)))))
;; factor
(t
(cons token factor))
)))