Function: ebnf-abn-rule
ebnf-abn-rule is a byte-compiled function defined in ebnf-abn.el.gz.
Signature
(ebnf-abn-rule TOKEN)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-abn.el.gz
;;; rule = rulename defined-as elements c-nl
;;; ; continues if next line starts with white space
;;;
;;; rulename = ALPHA *(ALPHA / DIGIT / "-")
;;;
;;; defined-as = *c-wsp ("=" / "=/") *c-wsp
;;; ; basic rules definition and incremental
;;; ; alternatives
;;;
;;; elements = alternation *c-wsp
;;;
;;; c-wsp = WSP / (c-nl WSP)
;;;
;;; c-nl = comment / CRLF
;;; ; comment or newline
;;;
;;; comment = ";" *(WSP / VCHAR) CRLF
(defun ebnf-abn-rule (token)
(let ((name ebnf-abn-lex)
(action ebnf-action)
elements)
(setq ebnf-action nil)
(or (eq token 'non-terminal)
(error "Invalid rule name"))
(setq token (ebnf-abn-lex))
(or (memq token '(equal incremental-alternative))
(error "Invalid rule: missing `=' or `=/'"))
(and (eq token 'incremental-alternative)
(setq name (concat name " =/")))
(setq elements (ebnf-abn-alternation))
(or (memq (car elements) '(end-of-rule end-of-input))
(error "Invalid rule: there is no end of rule"))
(setq elements (cdr elements))
(ebnf-eps-add-production name)
(cons (ebnf-abn-lex)
(ebnf-make-production name elements action))))