File: ebnf-otz.el.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
This is part of ebnf2ps package.
This package defines an optimizer for ebnf2ps.
See ebnf2ps.el for documentation.
Optimizations
-------------
*To be implemented*:
left recursion:
A = B | A C B | A C D. ==> A = B {C (B | D)}*.
right recursion:
A = B | C A. ==> A = {C}* B.
A = B | D | C A | E A. ==> A = { C | E }* ( B | D ).
optional:
A = B | C B. ==> A = [C] B.
A = B | B C. ==> A = B [C].
A = D | B D | B C D. ==> A = [B [C]] D.
*Already implemented*:
left recursion:
A = B | A C. ==> A = B {C}*.
A = B | A B. ==> A = {B}+.
A = | A B. ==> A = {B}*.
A = B | A C B. ==> A = {B || C}+.
A = B | D | A C | A E. ==> A = ( B | D ) { C | E }*.
optional:
A = B | . ==> A = [B].
A = | B . ==> A = [B].
factorization:
A = B C | B D. ==> A = B (C | D).
A = C B | D B. ==> A = (C | D) B.
A = B C E | B D E. ==> A = B (C | D) E.
none:
A = B | C | . ==> A = B | C | .
A = B | C A D. ==> A = B | C A D.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Defined variables (1)
ebnf-empty-rule-list | List of empty rule name. |
Defined functions (20)
ebnf-add-empty-rule-list | (RULE) |
ebnf-create-alternative | (ALT) |
ebnf-eliminate-empty | (RULE) |
ebnf-eliminate-empty-rules | (SYNTAX-LIST) |
ebnf-extract-empty | (ELIST) |
ebnf-map-list-to-optional | (NLIST) |
ebnf-map-node-to-optional | (NODE) |
ebnf-node-equal | (A B) |
ebnf-node-equal-header | (NODE HEADER) |
ebnf-optimize | (SYNTAX-LIST) |
ebnf-optimize1 | (PROD) |
ebnf-otz-initialize | () |
ebnf-prefix-suffix | (LIS) |
ebnf-split-header-prefix | (NODE-LIST HEADER) |
ebnf-split-header-prefix1 | (NODE-LIST HEADER) |
ebnf-split-header-suffix | (NLIST ZLIST) |
ebnf-split-header-suffix1 | (NE ZE) |
ebnf-split-prefix | (LIS) |
ebnf-split-suffix | (LIS) |
ebnf-unique-list | (NLIST) |