;ELC   
;;; Compiled
;;; in Emacs version 26.3
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.

;;; This file does not contain utf-8 non-ASCII characters,
;;; and so can be loaded in Emacs versions earlier than 23.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(require 'ebnf2ps)
#@26 List of empty rule name.
(defvar ebnf-empty-rule-list nil (#$ . 427))
#@43 Add empty RULE in `ebnf-empty-rule-list'.
(defalias 'ebnf-add-empty-rule-list #[(rule) "\205 	\303H\304H\305=\205 	\306H\nB\211\207" [ebnf-ignore-empty-rule rule ebnf-empty-rule-list 7 0 ebnf-generate-empty 6] 2 (#$ . 503)])
#@23 Initialize optimizer.
(defalias 'ebnf-otz-initialize #[nil "\301\211\207" [ebnf-empty-rule-list nil] 2 (#$ . 738)])
#@24 Eliminate empty rules.
(defalias 'ebnf-eliminate-empty-rules #[(syntax-list) "\203] 	G\306	\307\211\f\203W \310\311\312\313T\211\314_\245!#\210)\f@\315!\2039 \f\202O \316HB\n\203L \n\fA\241\210\202O 	A)\fA\211\204 -\202  	\207" [ebnf-empty-rule-list syntax-list before new-list prod-list ebnf-nprod 0 nil "Eliminating empty rules" message "%s...%3d%%" round 100.0 ebnf-eliminate-empty 6 ebnf-total messag rule] 7 (#$ . 861)])
(defalias 'ebnf-eliminate-empty #[(rule) "\306H\211\307=\203 \310H\n\235?\205\334 \202\334 	\311=\203e \310H\310H\312\211\211\203W @\313!\203> \202N \f\203K \fA\241\210\202N AA\211\204. \205a \310I\210,\202\334 	\314=\203\277 \310H\310H\312\211\211\203\245 @\313!\203\214 \202\234 \f\203\231 \fA\241\210\202\234 AA\211\204| \205\273 G\315U\203\265 @\202\273 \310I\210,\202\334 	\316=\203\333 \313\317H!\211\205\327 \317I\210)\202\334 )\207" [rule kind ebnf-empty-rule-list elt before header 0 ebnf-generate-non-terminal 6 ebnf-generate-sequence nil ebnf-eliminate-empty ebnf-generate-alternative 1 ebnf-generate-production 7 seq prod] 5])
#@28 Syntactic chart optimizer.
(defalias 'ebnf-optimize #[(syntax-list) "\204 	\207	G\305\306	\203 \307	@!\nB	A\211\204 \n\237+\207" [ebnf-optimize syntax-list new ebnf-nprod ebnf-total 0 nil ebnf-optimize1] 4 (#$ . 2028)])
(defalias 'ebnf-optimize1 #[(prod) "\306\307\310\311	T\211\312_\n\245!#\210)\313H\211\314H\315=\203\354 \316\f\317H\317H\"\211@A\320\"\313\203\201 \321=\203H \322\323!\206Q \324! \323 A!\206f \325 A!! @\203w \326!\"\202} \327!\"*\202\351 \203\333 \324!A\"\326\323\"!\206\231 \325\"!!#\330!\211$\203\253 $C\203\302 G\331U\203\307 @\314H\332=\203\307 #\202\327 \333\323!\206\323 \325!#D!+\202\351 \334\f!\206\351 \323!\206\351 \fI\210,)\207" [messag ebnf-nprod ebnf-total prod production hlist "Optimizing syntactic chart" message "%s...%3d%%" round 100.0 7 0 ebnf-generate-alternative ebnf-split-header-prefix 6 ebnf-split-header-suffix t nil ebnf-prefix-suffix ebnf-extract-empty ebnf-create-alternative ebnf-make-zero-or-more ebnf-make-one-or-more ebnf-map-list-to-optional 1 ebnf-generate-empty ebnf-make-sequence ebnf-map-node-to-optional nlist zlist elist nl el xlist znode nnode] 7])
(defalias 'ebnf-split-header-prefix #[(node-list header) "\306	\"\211@\307\211\nA\211\203I \n@\211\310H\311=\203C \312HA\211G\313U\2033 @\202< \312I\210)\fB\202E \314)\202\f \203R \315 \fB\f\237,B\207" [node-list header hlist nlist zlist empty-p ebnf-split-header-prefix1 nil 0 ebnf-generate-sequence 6 1 t ebnf-make-empty elt seq] 4])
(defalias 'ebnf-split-header-prefix1 #[(node-list header) "\304\211\n\203$ \305\n@\"\203 \n@	B\202 \n@B\nA\211\204 \237	\237*B\207" [nlist hlist node-list header nil ebnf-node-equal-header] 4])
(defalias 'ebnf-node-equal-header #[(node header) "\303H\211\304=\203 \305\306H@\n\"\202# 	\307=\203\" \306H\n\230\202# \310)\207" [node kind header 0 ebnf-generate-sequence ebnf-node-equal-header 6 ebnf-generate-non-terminal nil] 4])
(defalias 'ebnf-map-node-to-optional #[(node) "\301H\302=\205 \303\304H!\207" [node 0 ebnf-generate-alternative ebnf-map-list-to-optional 6] 3])
(defalias 'ebnf-map-list-to-optional #[(nlist) "G\303U\205, @A@\211\304H\305=\203 \306	!\202+ 	\304H\305=\203* \306\n!\202+ \307*\207" [nlist second first 2 0 ebnf-generate-empty ebnf-make-optional nil] 3])
(defalias 'ebnf-extract-empty #[(elist) "\304\211\211\2030 @\305H\306=\204 \202) \307\n\203& \nA\241\210\202) AA\211\204\n 	+B\207" [elist empty-p before now nil 0 ebnf-generate-empty t] 4])
(defalias 'ebnf-split-header-suffix #[(nlist zlist) "\306\211\nG\307U\2038 \310\n@\f\2033 \2033 \311@\"A\f\310=\203, \310\202 \f	B\202 \f*\202o \nGGU\203n \310\f\203i \203i \311\n@@\"\nAA\f\310=\203b \310\202B \f	B\202B \f)\202o \306\205\262 \312	!\211G\211\313U\203\205 \310\202\261 \307U\203\241 @\203\234 \314!\202\261 \202\261 \203\254 \315 B\316\237!**\207" [empty-p new nlist elt ok zlist nil 1 t ebnf-split-header-suffix1 ebnf-unique-list 0 ebnf-make-optional ebnf-make-empty ebnf-create-alternative lis len] 4])
(defalias 'ebnf-split-header-suffix1 #[(ne ze) "\306H\307=\203e 	\306H\307=\205\243 \310H	\310H\311\211\fGGY\205c \312\fGGZ\211\f\233\203K \n\203K \313\n@@\"\nAA\2021 )\205c \306U\203[ \312\202c S\f\233\311\241\210	,\207	\306H\307=\203\237 	\310H\211G\313S\f\233@\"\205\235 \314U\203\211 \312\202\235 \315U\203\224 \f@\202\235 \315Z\f\233\311\241\210	*\207\313	\"\207" [ne ze z len zl nl 0 ebnf-generate-sequence 6 nil t ebnf-node-equal 1 2 ok] 5])
(defalias 'ebnf-prefix-suffix #[(lis) "\2058 <\2058 \304!\305	A!\211A	@\n@	\204# \n\2057 \306	\2053 \307!\2062 \310!C\244\n\244!+\207" [lis prefix suffix middle ebnf-split-prefix ebnf-split-suffix ebnf-make-sequence ebnf-map-list-to-optional ebnf-create-alternative] 5])
(defalias 'ebnf-split-prefix #[(lis) "G@\306H\307=\203 @\310H\202 @C	T\f\306V\203p \nA\211\203p \n@\306H\307=\203: \n@\310H\202= \n@C\306\203h \203h \311@@\"\203h AAT\202C \f^+\202 \f\306U\204| \f	V\203\202 \312B\2026\f\233\211\203\221 \fS\233\312\241\210\312\211@\306H\307=\203\247 \n\204\262 A\211\313\202\312 \nG\314U\203\301 \n@\240\210\202\307 @\310\nI\210A\n\203\"\n@\312\211\306H\307=\203\f\310H\233\211\203G\314U\203\372 \n@\240\210\202\310I\210\n\202\313\203\nA\241\210\202A\nA*\202\312 \315\2032\316 C\244\2023!,B,\207" [lis len tail head ipre i 0 ebnf-generate-sequence 6 ebnf-node-equal nil t 1 ebnf-unique-list ebnf-make-empty this cur prefix empty-p before rest elt] 5])
(defalias 'ebnf-split-suffix #[(lis) "G@\306H\307=\203 @\310H\202 @C\237	T\f\306V\203x \nA\211\203x \n@\306H\307=\203< \n@\310H\202? \n@C\237\211\306\203k \203k \311@@\"\203k AAT\202H \237\210\f^,\202 \237\f\306U\204\207 \f	V\203\215 \312B\202^G\fZ\211\233\306V\205\250 S\233\312\241\210\312\211@\306H\307=\203\274 \n\204\307 A\211\313\202\337 \nG\314U\203\326 \n@\240\210\202\334 @\310\nI\210A\n\203J\n@\312\211\306H\307=\203/\310H\211G\fZ\211\203/\306V\203/\314U\203\n@\240\210\202)S\233\312\241\210\310I\210\n\202C\313\203@\nA\241\210\202CA\nA*\202\337 \315\203Z\316 C\244\202[!-B,\207" [lis len tail head isuf cur 0 ebnf-generate-sequence 6 ebnf-node-equal nil t 1 ebnf-unique-list ebnf-make-empty tlis this i n suffix before empty-p rest elt] 5])
(defalias 'ebnf-unique-list #[(nlist) "\306\n\203F \nA\n@\306\2039 \307\f@\"\204# A\211\202 \310\306	\2033 	\nA\241\210\202 A\202 \204? \n\nA+\202 *\207" [nlist before current remove-p head tail nil ebnf-node-equal t] 4])
(defalias 'ebnf-node-equal #[(A B) "\306H	\306H\211\n=\205~ \307=\203 \310\202~ \311>\203( \312H	\312H\230\202~ \313>\203b \312H	\312H\211G\fGU\205^ \310\203[ \203[ \314@\f@\"A\fA\202A )*\202~ \315=\203} \312H	\312H\230\205~ \314\316H	\316H\"\202~ \317*\207" [A B kindB kindA listB listA 0 ebnf-generate-empty t (ebnf-generate-non-terminal ebnf-generate-terminal ebnf-generate-special) 6 (ebnf-generate-alternative ebnf-generate-sequence) ebnf-node-equal ebnf-generate-production 7 nil ok] 5])
(defalias 'ebnf-create-alternative #[(alt) "G\301V\203 \302!\207@\207" [alt 1 ebnf-make-alternative] 2])
(provide 'ebnf-otz)
