Function: ebnf-node-equal
ebnf-node-equal is a byte-compiled function defined in ebnf-otz.el.gz.
Signature
(ebnf-node-equal A B)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-otz.el.gz
(defun ebnf-node-equal (A B)
(let ((kindA (ebnf-node-kind A))
(kindB (ebnf-node-kind B)))
(and (eq kindA kindB)
(cond
;; empty
((eq kindA 'ebnf-generate-empty)
t)
;; non-terminal, terminal, special
((memq kindA '(ebnf-generate-non-terminal
ebnf-generate-terminal
ebnf-generate-special))
(string= (ebnf-node-name A) (ebnf-node-name B)))
;; alternative, sequence
((memq kindA '(ebnf-generate-alternative ; any order
ebnf-generate-sequence)) ; order is important
(let ((listA (ebnf-node-list A))
(listB (ebnf-node-list B)))
(and (= (length listA) (length listB))
(let ((ok t))
(while (and ok listA)
(setq ok (ebnf-node-equal (car listA) (car listB))
listA (cdr listA)
listB (cdr listB)))
ok))))
;; production
((eq kindA 'ebnf-generate-production)
(and (string= (ebnf-node-name A) (ebnf-node-name B))
(ebnf-node-equal (ebnf-node-production A)
(ebnf-node-production B))))
;; otherwise
(t
nil)
))))