Function: ebnf-iso-primary
ebnf-iso-primary is a byte-compiled function defined in
ebnf-iso.el.gz.
Signature
(ebnf-iso-primary TOKEN)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-iso.el.gz
;;; primary = optional sequence | repeated sequence | special sequence
;;; | grouped sequence | meta identifier | terminal string
;;; | empty;
;;;
;;; empty = ;
;;;
;;; optional sequence = '[', definition list, ']';
;;;
;;; repeated sequence = '{', definition list, '}';
;;;
;;; grouped sequence = '(', definition list, ')';
;;;
;;; terminal string = "'", character - "'", {character - "'"}, "'"
;;; | '"', character - '"', {character - '"'}, '"';
;;;
;;; special sequence = '?', {character - '?'}, '?';
;;;
;;; meta identifier = letter, {letter | decimal digit};
(defun ebnf-iso-primary (token)
(let ((primary
(cond
;; terminal string
((eq token 'terminal)
(ebnf-make-terminal ebnf-iso-lex))
;; meta identifier
((eq token 'non-terminal)
(ebnf-make-non-terminal ebnf-iso-lex))
;; special sequence
((eq token 'special)
(ebnf-make-special ebnf-iso-lex))
;; grouped sequence
((eq token 'begin-group)
(let ((body (ebnf-iso-definition-list)))
(or (eq (car body) 'end-group)
(error "Missing `)'"))
(cdr body)))
;; optional sequence
((eq token 'begin-optional)
(let ((body (ebnf-iso-definition-list)))
(or (eq (car body) 'end-optional)
(error "Missing `]' or `/)'"))
(ebnf-token-optional (cdr body))))
;; repeated sequence
((eq token 'begin-zero-or-more)
(let* ((body (ebnf-iso-definition-list))
(repeat (cdr body)))
(or (eq (car body) 'end-zero-or-more)
(error "Missing `}' or `:)'"))
(ebnf-make-zero-or-more repeat)))
;; empty
(t
nil)
)))
(cons (if primary
(ebnf-iso-lex)
token)
primary)))