-;;; ebnf-otz --- Syntatic chart OpTimiZer
+;;; ebnf-otz.el --- syntactic chart OpTimiZer
-;; Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+;; Free Sofware Foundation, Inc.
-;; Author: Vinicius Jose Latorre <vinicius@cpqd.com.br>
-;; Maintainer: Vinicius Jose Latorre <vinicius@cpqd.com.br>
-;; Keywords: wp, ebnf, PostScript
-;; Time-stamp: <99/11/20 18:03:10 vinicius>
-;; Version: 1.0
+;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
+;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
+;; Time-stamp: <2004/02/29 18:40:14 vinicius>
+;; Keywords: wp, ebnf, PostScript
+;; Version: 1.0
;; This file is part of GNU Emacs.
;; 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].
+;;
+;; factoration:
+;; 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.
+;;
+;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; code:
+;;; Code:
(require 'ebnf2ps)
;; A = B | C A D. ==> A = B | C A D.
(defun ebnf-optimize (syntax-list)
- "Syntatic chart optimizer."
+ "Syntactic chart optimizer."
(if (not ebnf-optimize)
syntax-list
(let ((ebnf-total (length syntax-list))
;; 10. A = B C E | B D E. ==> A = B (C | D) E.
(defun ebnf-optimize1 (prod)
- (ebnf-message-info "Optimizing syntatic chart")
+ (ebnf-message-info "Optimizing syntactic chart")
(let ((production (ebnf-node-production prod)))
(and (eq (ebnf-node-kind production) 'ebnf-generate-alternative)
(let* ((hlist (ebnf-split-header-prefix
(provide 'ebnf-otz)
+;;; arch-tag: 7ef2249d-9e8b-4bc1-999f-95d784690636
;;; ebnf-otz.el ends here