Function: ebnf-abn-element
ebnf-abn-element is a byte-compiled function defined in
ebnf-abn.el.gz.
Signature
(ebnf-abn-element TOKEN)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-abn.el.gz
;;; element = rulename / group / option /
;;; char-val / num-val / prose-val
;;;
;;; group = "(" *c-wsp alternation *c-wsp ")"
;;;
;;; option = "[" *c-wsp alternation *c-wsp "]"
;;;
;;; char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE
;;; ; quoted string of SP and VCHAR without DQUOTE
;;;
;;; num-val = "%" (bin-val / dec-val / hex-val)
;;;
;;; bin-val = "b" 1*BIT
;;; [ 1*("." 1*BIT) / ("-" 1*BIT) ]
;;; ; series of concatenated bit values
;;; ; or single ONEOF range
;;;
;;; dec-val = "d" 1*DIGIT
;;; [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ]
;;;
;;; hex-val = "x" 1*HEXDIG
;;; [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ]
;;;
;;; prose-val = "<" *(%x20-3D / %x3F-7E) ">"
;;; ; bracketed string of SP and VCHAR without
;;; ; angles
;;; ; prose description, to be used as last resort
(defun ebnf-abn-element (token)
(cond
;; terminal
((eq token 'terminal)
(ebnf-make-terminal ebnf-abn-lex))
;; non-terminal
((eq token 'non-terminal)
(ebnf-make-non-terminal ebnf-abn-lex))
;; group
((eq token 'begin-group)
(let ((body (ebnf-abn-alternation)))
(or (eq (car body) 'end-group)
(error "Missing `)'"))
(cdr body)))
;; optional
((eq token 'begin-optional)
(let ((body (ebnf-abn-alternation)))
(or (eq (car body) 'end-optional)
(error "Missing `]'"))
(ebnf-token-optional (cdr body))))
;; no element
(t
nil)
))