]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/ebnf-otz.el
(gdb-flush-pending-output): New variable.
[gnu-emacs] / lisp / progmodes / ebnf-otz.el
index a98a45e803487bdc1286f340e053e1eacee4a8e2..1aa8feb25a7bfa63a9038fb02f954a53d679fc8d 100644 (file)
@@ -1,12 +1,13 @@
-;;; 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/11/19 22:24:07 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].
+;;
+;;    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.
+;;
+;;
 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;;; code:
+;;; Code:
 
 
 (require 'ebnf2ps)
 ;;    A = B | .                ==>   A = [B].
 ;;    A =   | B .              ==>   A = [B].
 
-;;    factoration:
+;;    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.
 ;;    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))
 ;; 6.  A = B | .                ==>   A = [B].
 ;; 7.  A =   | B .              ==>   A = [B].
 
-;; factoration:
+;; 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.
 
 (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