Variable: ebnf-optimize

ebnf-optimize is a customizable variable defined in ebnf2ps.el.gz.

Value

nil

Documentation

Non-nil means optimize syntactic chart of rules.

The following optimizations are done:

   left recursion:
   1. A = B | A C. ==> A = B {C}*.
   2. A = B | A B. ==> A = {B}+.
   3. A = | A B. ==> A = {B}*.
   4. A = B | A C B. ==> A = {B || C}+.
   5. A = B | D | A C | A E. ==> A = ( B | D ) { C | E }*.

   optional:
   6. A = B | . ==> A = [B].
   7. A = | B . ==> A = [B].

   factorization:
   8. A = B C | B D. ==> A = B (C | D).
   9. A = C B | D B. ==> A = (C | D) B.
   10. A = B C E | B D E. ==> A = B (C | D) E.

The above optimizations are specially useful when ebnf-syntax is yacc.

This variable was added, or its default value changed, in Emacs 20.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/ebnf2ps.el.gz
(defcustom ebnf-optimize nil
  "Non-nil means optimize syntactic chart of rules.

The following optimizations are done:

   left recursion:
   1.  A = B | A C.             ==>   A = B {C}*.
   2.  A = B | A B.             ==>   A = {B}+.
   3.  A =   | A B.             ==>   A = {B}*.
   4.  A = B | A C B.           ==>   A = {B || C}+.
   5.  A = B | D | A C | A E.   ==>   A = ( B | D ) { C | E }*.

   optional:
   6.  A = B | .                ==>   A = [B].
   7.  A =   | B .              ==>   A = [B].

   factorization:
   8.  A = B C | B D.           ==>   A = B (C | D).
   9.  A = C B | D B.           ==>   A = (C | D) B.
   10. A = B C E | B D E.       ==>   A = B (C | D) E.

The above optimizations are specially useful when `ebnf-syntax' is `yacc'."
  :type 'boolean
  :version "20"
  :group 'ebnf-optimization)